[本発明を適用した通信システムの一実施の形態]
図2は、本発明を適用した通信システム(システムとは、複数の装置が論理的に集合した物をいい、各構成の装置が同一筐体中にあるか否かは、問わない)の一実施の形態の構成例を示すブロック図である。
図2において、通信システムは、リーダライタ10、及び、無線タグ20から構成される。
リーダライタ10は、アンテナ11を有し、アンテナ11からRF信号を出力することにより、無線タグ20との間で、非接触で近接通信を行い、無線タグ20(が内蔵するメモリ部24)に、データを記憶させ(書き込み)、また、無線タグ20からデータを読み出す。
無線タグ20は、リーダライタ10に近接すると、リーダライタ10がアンテナ11から出力するRF信号を電源として動作を開始し、リーダライタ10との間で近接通信を行う。
近接通信では、リーダライタ10は、RF信号をデータに従って変調することにより、データを送信し、無線タグ20は、リーダライタ10がRF信号によって送信するデータを受信して、内蔵するメモリ部24に書き込む。
また、無線タグ20は、メモリ部24に記憶されたデータを読み出し、リーダライタ10から送信されてくるRF信号を負荷変調することで、データを、リーダライタ10に送信する。
すなわち、無線タグ20は、アンテナ21、RF部22、コマンドシーケンサ部23、及び、メモリ部24を有する。
アンテナ21は、例えば、コイルとコンデンサとからなる共振回路で構成され、リーダライタ10からのRF信号を受信し、RF部22に供給する。
RF部22は、リーダライタ10との間で近接通信を行う。
すなわち、RF部22は、リーダライタ10と無線タグ20とが近接することにより、アンテナ21で、リーダライタ10からのRF信号が受信されると、そのRF信号から電源となる電力を得て、必要なブロックに供給する。
また、RF部22は、リーダライタ10からのRF信号を、コマンドやデータに復調し、コマンドシーケンサ部23に供給する。
さらに、RF部22は、コマンドシーケンサ部23から供給されるデータに従って、リーダライタ10からのRF信号を負荷変調することで、データを、リーダライタ10に送信する。
コマンドシーケンサ部23は、RF部22から供給される、リーダライタ10からのコマンドに従って、シーケンス制御を行うことで、メモリ部24に対するデータの読み書き等の制御を行う。
すなわち、コマンドシーケンサ部23は、リーダライタ10からのコマンドが、データの書き込みを要求するライトコマンドである場合、そのライトコマンドとともに、リーダライタ10から送信され、RF部22から供給されるデータを、メモリ部24に書き込む。
また、コマンドシーケンサ部23は、リーダライタ10からのコマンドが、データの読み出しを要求するリードコマンドである場合、メモリ部24からデータを読み出し、RF部22に供給する。
メモリ部24は、例えば、EEPROM等の不揮発性メモリであり、コマンドシーケンサ部23の制御(管理)の下、データを記憶する。
[メモリ部24の論理フォーマット]
図3は、図1の無線タグ20が有するメモリ部24の論理フォーマットを説明する図である。
メモリ部24の記憶領域の一部は、例えば、定期券や、所定のサービス提供者が管理する電子マネー、イベント等のチケット等のサービスに割り当てられる最小単位の記憶領域であるユーザブロックになっている。
メモリ部24には、1個以上のユーザブロックが設けられる。
ここで、サービスには、1個以上のユーザブロックが割り当てられ、その1個以上のユーザブロックに、サービスを提供するためのデータが記憶される。
ユーザブロックは、複数であるM+1個のユニットを有する(Mは、1以上の整数)。
ユニットには、サービスを提供するためのデータが書き込まれる。但し、ユーザブロックを構成するM+1個のユニットのうちの1個のユニットは、ユーザブロックに書き込まれるデータをバッファリングするバッファとして機能する。
以上のように、ユーザブロックを構成する1個のユニットは、バッファとして機能するため、ユーザブロックは、バッファとして機能する1個のユニットと、サービスを提供するためのデータを記憶する1以上のM個のユニットとの、合計で、複数であるM+1個のユニットを有する。
ここで、以下、ユーザブロックを構成するM+1個のユニットのうちの、バッファとして機能するユニットを、バッファユニットともいい、バッファユニットではないユニットを、データユニットともいう。
図3では、ユーザブロックを構成するM+1個のユニットのうちの、M+1番目のユニットが、バッファユニットになっており、他の1ないしM番目のM個のユニットは、データユニットになっている。
なお、バッファユニットとなるユニットは、ユーザブロックに対するデータの書き込みが行われると変化するが、その説明は、後述する。
ユニットは、1以上であるK個のページを有する。
ページは、メモリ部24に対する書き込みが行われる最小単位の記憶領域であり、図3では、1ページは、Nバイトの記憶領域になっている。
ここで、図3では、ユニットが有するページのうちの1ページは、メモリ部24の記憶領域を管理するための管理情報を記憶するページ(管理ページ)として使用される。
すなわち、図3では、ユニットを構成するK個のページのうちの特定の1個のページは、そのユニットを管理するための管理情報が記憶される管理ページになっている。
したがって、図3では、ユニットには、データを記憶する1ページ以上のページ(データページ)と、1ページの管理ページとが必要であるため、ユニットを構成するページ数Kは、複数である。
なお、図3では、ユニットを構成するK個のページのうちのK番目のページが、管理ページになっている。管理ページとなるページは、(バッファユニットのように)変化せず、固定のページである。
管理ページには、ユニットナンバ、(1個の)シーケンスナンバ、及び、エラー検出コードが、ユニットの管理情報として書き込まれる。
ユニットナンバは、そのユニットナンバが書き込まれる管理ページを有するユニットを特定する情報である。
シーケンスナンバは、メモリ部24にデータが書き込まれるごとに規則的に更新される値であり、例えば、直前の値に対して、1などの所定値をインクリメント又はデクリメントした値や、直前の値を引数として所定の関数を演算することにより求められる値、入力値と出力値とを対応付けたテーブルを用い、直前の値を入力値として求められる出力値等を採用することができる。
なお、ここでは、例えば、メモリ部24にデータが書き込まれるごとに1ずつインクリメントされる値を、シーケンスナンバとして用いることとする。
エラー検出コードは、ユニットに書き込まれたデータの誤り(エラー)を検出する誤り検出用のコードで、例えば、CRC(Cyclic Redundancy Checking)等である。
[メモリ部24に対するデータの書き込み制御]
図4は、コマンドシーケンサ部23による、メモリ部24に対するデータの書き込みの制御を説明する図である。
図4において、データが書き込まれるユニットを有するユーザブロックは、M+1個のユニット#1,#2,・・・,#M+1を有する。
そして、図4では、データの書き込みが行われる直前(書き込み前)においては、M+1個のユニット#1ないし#M+1のうちの、例えば、M+1番目のユニット#M+1が、バッファユニットになっており、他の1ないしM番目のユニット#1ないし#Mが、データユニットになっている。
また、図4では、書き込み前においては、データユニット#mのユニットナンバS_PADは、値mになっている。
なお、バッファユニットには、ユニットナンバS_PADは付与されないが、図4では、便宜上、バッファユニットになっているユニット#M+1のユニットナンバS_PADを、バッファユニットを表す値としての0としてある。
また、図4では、書き込み前のデータユニット#1のシーケンスナンバSEQが、値Xになっている。他のデータユニット#2ないし#MのシーケンスナンバSEQの図示は、省略してある。
ここで、1つのユニット#mは、K個のページから構成される。いま、ユーザブロックの1番目のユニット#1の1番目のページを、第1ページということとすると、ユニット#mは、第(m-1)K+1ページないし第mKページのK個のページから構成される。そして、各ユニット#mの最後のページである第mKページは、管理ページである。
いま、例えば、リーダライタ10から無線タグ20に対して、ユニットナンバS_PADが値1のユニットへのデータの書き込みを要求するライトコマンドが、データとともに送信されてきたとする。
この場合、コマンドシーケンサ部23は、リーダライタ10からのライトコマンドに従い、そのライトコマンドとともに送信されてきたデータを、書き込みを行うべき対象のユニットである対象ユニット、すなわち、ユニットナンバS_PADが値1になっているユニット#1(ライトコマンドによって書き込みが要求されているユニットナンバS_PADのユニット)ではなく、バッファユニットになっているユニット#M+1に書き込む。
さらに、コマンドシーケンサ部23は、バッファユニットになっているユニット#M+1の管理ページに、対象ユニットであるユニット#1のユニットナンバS_PAD=1と同一のユニットナンバS_PAD=1、所定の値Yに更新されたシーケンスナンバSEQ、及び、エラー検出コードを書き込む。
ここで、図4では(後述する図5でも同様)、エラー検出コードの図示を省略してある。
また、図4において、バッファユニットになっているユニット#M+1の管理ページに書き込まれるシーケンスナンバSEQの値Yは、対象ユニットであるユニット#1の管理ページに書き込まれているシーケンスナンバSEQ=Xを1だけインクリメントすることにより更新した値X+1である。
以上のように、バッファユニットになっているユニット#M+1の管理ページに、値が1のユニットナンバS_PAD、所定の値Yに更新されたシーケンスナンバSEQ、及び、エラー検出コードが書き込まれることで、ユニット#M+1は、バッファユニットではなく、ユニットナンバS_PADが値1のデータユニットとなる。
その結果、この時点では、ユニットナンバS_PADが値1のユニットは、ユニット#1及び#M+1の2個となる。
但し、ユニット#M+1のシーケンスナンバSEQ=Yは、ユニット#1のシーケンスナンバSEQ=Xよりも新しい値、すなわち、シーケンスナンバSEQ=Xを更新した値X+1になっている。
したがって、ユニットナンバS_PADが値1の、2個のユニット#1及び#M+1については、シーケンスナンバSEQを参照することで、最新のデータが書き込まれたユニット#M+1と、データが過去に書き込まれたユニット#1(ユニットナンバS_PADが値1のユニットに書き込まれたデータのうちの、最新のデータの直前に書き込まれたデータを記憶しているユニット)とを区別することができる。
ここで、ユニットナンバS_PADが同一の2個のユニットが存在する場合に、その2個のユニットのうちの、最新のデータが書き込まれたユニット(本実施の形態では、シーケンスナンバが大きい方のユニット)を、新ユニットともいい、データが過去に書き込まれたユニット(シーケンスナンバが小さい方のユニット)を、旧ユニットともいう。
その後、コマンドシーケンサ部23は、ユニットナンバS_PADが値1になっている2個のユニット#1及び#M+1のうちの旧ユニット、すなわち、対象ユニットであるユニット#1の管理ページをイレースし、イレース状態にすることで、ユニット#1を、新たに、バッファユニットとして、メモリ部24にデータを書き込む書き込み処理を完了する。
なお、上述したように、バッファユニットには、ユニットナンバS_PADは付与されないが、図4では、新たにバッファユニットになったユニット#1のユニットナンバS_PADを、バッファユニットであることを表す値0としてある。
以上のように、コマンドシーケンサ部23は、リーダライタ10からのライトコマンドに従い、データを、バッファユニットであるユニット#M+1に書き込み、バッファユニットのユニットナンバとして、対象ユニットであるユニット#1のユニットナンバS_PAD=1を書き込み、ユニット#1を、新たなバッファユニットとすることで、結果的に対象ユニットとなった、ユニットナンバS_PADが値1のユニット#M+1へのデータの書き込みを行う。
その結果、メモリ部24では、ユニットナンバS_PADが値1のユニットに記憶されるデータに関して、最新のデータ(図4では、ユニット#M+1に書き込まれたデータ)が、直前(前回)のデータ(図4では、ユニット#1に書き込まれていたデータ)を残したまま書き込まれるので、メモリコラプション、すなわち、例えば、メモリ部24にアクセスが行われている最中に、無線タグ20がリーダライタ10から離れること等によって、メモリ部24に記憶されたデータに不整合が生じた場合に対処することができる。
図5は、メモリコラプションに対する対処を説明する図である。
図5において、書き込み前においては、図4の場合と同様に、M+1番目のユニット#M+1が、バッファユニットになっており、他の1ないしM番目のユニット#1ないし#Mが、データユニットになっている。
また、書き込み前においては、データユニット#mのユニットナンバS_PADは、値mになっており、バッファユニットであるユニット#M+1のユニットナンバS_PADは、バッファユニットを表す値0になっている。
いま、例えば、図4の場合と同様に、リーダライタ10から無線タグ20に対して、ユニットナンバS_PADが値1のユニットを対象ユニットとするデータの書き込みを要求するライトコマンドが、データとともに送信されてきたとする。
この場合、コマンドシーケンサ部23は、図4で説明したように、リーダライタ10からのライトコマンドに従い、そのライトコマンドとともに送信されてきたデータを、バッファユニットになっているユニット#M+1(ユニットナンバS_PADが値0になっているユニット)に書き込む。
さらに、コマンドシーケンサ部23は、図4で説明したように、バッファユニットになっているユニット#M+1の管理ページに、対象ユニットであるユニット#1のユニットナンバS_PAD=1と同一のユニットナンバS_PAD=1、対象ユニットであるユニット#1のシーケンスナンバSEQ=Xを更新した値Y=X+1のシーケンスナンバSEQ、及び、エラー検出コードを書き込み、その後、対象ユニットであるユニット#1の管理ページをイレースし、イレース状態にすることで、ユニット#1を、新たに、バッファユニットとして、メモリ部24にデータを書き込む書き込み処理を完了する。
いま、書き込み処理の途中、すなわち、例えば、バッファユニットになっているユニット#M+1の管理ページに、ユニットナンバS_PAD=1、所定の値Yに更新されたシーケンスナンバSEQ、及び、エラー検出コードを書き込んでいる最中に、無線タグ20が、リーダライタ10から離れ、無線タグ20に、必要な電力が供給されなくなった(電源断になった)とする。
この場合、コマンドシーケンサ部23は、次に、リーダライタ10と無線タグ20とが近接することにより、電源が供給されて起動したとき(次回の起動時)に、メモリ部24の記憶内容をリカバリする。
すなわち、例えば、バッファユニットになっているユニット#M+1の管理ページに、ユニットナンバS_PAD=1、所定の値YのシーケンスナンバSEQ、及び、エラー検出コードのうちの、少なくとも、ユニットナンバS_PAD=1、及び、所定の値Yに更新されたシーケンスナンバSEQが書き込まれた後に、電源断になったとすると、ユニットナンバS_PADが値1で同一の2個のユニット#1及び#M+1が存在する。
図4で説明したように、ユニットナンバS_PADが値1の、2個のユニット#1及び#M+1については、シーケンスナンバSEQを参照することで、最新のデータが書き込まれたユニット(新ユニット)#M+1と、データが過去に書き込まれたユニット(旧ユニット)#1とを区別することができる。
次回の起動時、コマンドシーケンサ部23は、新ユニットであるユニット#M+1の管理ページのエラー検出コードとしてのCRCを用いて、誤り検出を行い、誤りが検出されなかった場合(エラー検出コードが正常である場合)、新ユニットであるユニット#M+1へのデータの書き込みが正常に完了しているとして、旧ユニットであるユニット#1の管理ページをイレースし、イレース状態にすることで(図5では、ユニットナンバS_PADが、バッファユニットであることを表す値0にされている)、ユニット#1を、バッファユニットとする。
そして、その後、図4で説明したように、バッファユニットへの新たなデータの書き込みが行われる。
一方、新ユニットであるユニット#M+1の管理ページのエラー検出コードとしてのCRCを用いた誤り検出の結果、誤りが検出された場合(エラー検出コードがエラーである場合)、コマンドシーケンサ部23は、新ユニットであるユニット#M+1へのデータの書き込みが正常に完了していないとして、メモリ部24の状態を、例えば、新ユニットであるユニット#M+1へのデータの書き込みが行われる直前の状態に戻す。
すなわち、コマンドシーケンサ部23は、新ユニットであるユニット#M+1の管理ページをイレースし、イレース状態にすることで(図5では、ユニットナンバS_PADが、バッファユニットであることを表す値0にされている)、ユニット#M+1を、バッファユニットとする。
そして、その後、図4で説明したように、バッファユニットへの新たなデータの書き込みが行われる。
[無線タグ20の処理]
図6は、図2の無線タグ20の処理を説明するフローチャートである。
なお、以下では、1個のユーザブロックに注目し、その1個のユーザブロックに対する処理を説明する。
リーダライタ10と無線タグ20とが近接し、無線タグ20のRF部22において、リーダライタ10からのRF信号が受信され、無線タグ20の必要なブロックへの電源の供給が開始されると、コマンドシーケンサ部23は起動する。
そして、コマンドシーケンサ部23は、起動後、リーダライタ10からのコマンドを受信する前に、例えば、図示せぬ内部レジスタの初期化等の、リーダライタ10との間で近接通信を行うための所定の起動処理を開始する。
さらに、コマンドシーケンサ部23は、起動処理中に、メモリ部24のバッファユニットの全ページをイレースし(イレース状態にする処理のみを行い)、イレース状態にする。
すなわち、ステップS11において、コマンドシーケンサ部23は、メモリ部24の、注目している注目ユーザブロックを構成するM+1個のユニット#1ないし#M+1の管理ページのユニットナンバS_PADを確認し、処理は、ステップS12に進む。
ステップS12では、コマンドシーケンサ部23は、ステップS11でのユニットナンバS_PADの確認の結果に基づいて、同一のユニットナンバS_PADのユニット(2個のユニット)が存在するかどうかを判定する。
ステップS12において、同一のユニットナンバS_PADのユニットが存在しないと判定された場合、すなわち、管理ページがイレース状態になっているユニット、つまり、バッファユニットが存在する場合、処理は、ステップS13ないしS15をスキップして、ステップS16に進む。
また、ステップS12において、同一のユニットナンバS_PADのユニットが存在すると判定された場合、すなわち、例えば、前回行われた書き込み処理が完了しなかったために、図5で説明したように、管理ページがイレース状態になっているユニットであるバッファユニットが存在せず、ユニットナンバS_PADが同一の2個のユニットが存在する場合、処理は、ステップS13に進み、コマンドシーケンサ部23は、同一のユニットナンバS_PADの2個のユニットのうちの、シーケンスナンバSEQが新しいユニット(新ユニット)のエラー検出コードを用いて、新ユニットに誤りがないかどうかを判定する誤り検出を行う。
ステップS13において、新ユニットに誤りがある(エラー検出コードが正常でない)と判定された場合、処理は、ステップS14に進み、コマンドシーケンサ部23は、同一のユニットナンバS_PADの2個のユニットのうちの、シーケンスナンバSEQが古いユニット(旧ユニット)を、最新の正常な書き込みが行われた最新ユニットとして認識する。
さらに、ステップS14では、コマンドシーケンサ部23は、同一のユニットナンバS_PADの2個のユニットのうちの他方のユニット(新ユニット)を、バッファユニットとして認識し、処理は、ステップS16に進む。
また、ステップS13において、新ユニットに誤りがない(エラー検出コードが正常である)と判定された場合、処理は、ステップS15に進み、コマンドシーケンサ部23は、同一のユニットナンバS_PADの2個のユニットのうちの、シーケンスナンバSEQが新しいユニット(新ユニット)を、最新の正常な書き込みが行われた最新ユニットとして認識する。
さらに、ステップS15では、コマンドシーケンサ部23は、同一のユニットナンバS_PADの2個のユニットのうちの他方のユニット(旧ユニット)を、バッファユニットとして認識し、処理は、ステップS16に進む。
ステップS16では、コマンドシーケンサ部23は、バッファユニットの管理ページが、イレース状態であるかどうかを判定する。
ステップS16において、バッファユニットの管理ページが、イレース状態であると判定された場合、すなわち、前回行われた書き込み処理の、後述するステップS22において、バッファユニットの管理ページのイレースが行われている場合、処理は、ステップS17をスキップして、ステップS18に進む。
また、ステップS16において、バッファユニットの管理ページが、イレース状態でないと判定された場合、すなわち、前回行われた書き込み処理の、後述するステップS22において、バッファユニットの管理ページのイレースが行われておらず、したがって、ステップS22の直前のステップS21で行われる、前回行われた書き込み処理時にバッファユニットになっていてデータの書き込みが行われた最新ユニットの管理ページについて、十分なリテンション特性を維持することができる程度の浮遊ゲートへの電荷の蓄積が行われていない可能性がある場合、処理は、ステップS17に進み、コマンドシーケンサ部23は、最新ユニットの管理ページへの、その管理ページの記憶内容の再書き込みを行って、処理は、ステップS18に進む。
ここで、ステップS17での、最新ユニットの管理ページへの、その管理ページの記憶内容の再書き込みでは、コマンドシーケンサ部23は、最新ユニットの管理ページの記憶内容を、管理ページの1ページのみにライトし、管理ページをライト状態にして、十分なリテンション特性を維持することができる程度の浮遊ゲートに電荷を蓄積させる。
以上のように、前回行われた書き込み処理時にバッファユニットになっていてデータの書き込みが行われた最新ユニットの管理ページについて、十分なリテンション特性を維持することができる程度の浮遊ゲートへの電荷の蓄積が行われていない可能性がある場合には、最新ユニットの管理ページの再書き込みが行われるので、前回行われた書き込み処理時にバッファユニットになっていてデータの書き込みが行われた最新ユニットの管理ページについて、浮遊ゲートへの十分な電荷の蓄積(十分なリテンション特性を維持することができる程度の浮遊ゲートへの電荷の蓄積)が行われる前に、リーダライタ10と無線タグ20とが離されること等によって、浮遊ゲートへの十分な電荷の蓄積ができなかったときであっても、今回の起動処理中に行われるステップS17の処理によって、浮遊ゲートに電荷が十分に蓄積され、リテンション特性を維持することができる。
ステップS18では、コマンドシーケンサ部23は、バッファユニットの全ページをイレースし、イレース状態とする。
以上のステップS11ないしS18の処理が、起動処理中に行われる。
無線タグ20において、起動処理が終了すると、処理は、ステップS18からステップS19に進み、無線タグ20は、リーダライタ10からのコマンドを待つコマンド待ち状態となる。
そして、リーダライタ10からコマンドが送信されてくるのを待って、処理は、ステップS19からステップS20に進み、RF部22は、リーダライタ10からのコマンドを受信し、コマンドシーケンサ部23に供給して、処理は、ステップS21に進む。
例えば、いま、リーダライタ10からのコマンドが、ライトコマンドであるとすると、ステップS21、及び、続くステップS22において、そのライトコマンドに従い、書き込み処理が行われる。
すなわち、ステップS21では、コマンドシーケンサ部23は、リーダライタ10からのライトコマンドに従い、そのライトコマンドとともにリーダライタ20から送信されてくるデータを、バッファユニットの管理ページ以外のページにライトし(ライト状態にする処理のみを行い)、ライト状態にする。
ここで、従来の無線タグにおいて、不揮発性メモリへのデータの書き込みでは、リーダライタからのライトコマンドの受信後、メモリセルをイレース状態にするイレースが行われ、その後、イレース状態のメモリセルをライト状態にするライトが行われる。
図6では、起動処理中に行われたステップS18において、バッファユニットの全ページのイレースが既に行われているので、ステップS21では、ライトの前に、イレースを行う必要がない。
ステップS21において、コマンドシーケンサ部23は、バッファユニットの管理ページ以外のページに、データをライトした後、さらに、バッファユニットの管理ページに、ユニットナンバ、シーケンスナンバ、及び、エラー検出コードをライトし(ライトのみをし)、ライト状態にする。
なお、ステップS21において、バッファユニットの管理ページにライトされるユニットナンバは、データを書き込む対象ユニットのユニットナンバであり、例えば、リーダライタからのライトコマンドに含まれる。
また、ステップS21において、バッファユニットの管理ページにライトされるシーケンスナンバは、対象ユニットの管理ページに既に書き込まれているシーケンスナンバを1だけインクリメントした値である。
さらに、ステップS21において、バッファユニットの管理ページにライトされるエラー検出コードは、コマンドシーケンサ部23において、バッファユニットの管理ページ以外のページにライトされたデータ(又は、そのデータ、並びに、管理ページにライトされたユニットナンバ、及び、シーケンスナンバ)に対して求められる。
ステップS21において、バッファユニットの管理ページ以外のページに、データがライトされ、さらに、バッファユニットの管理ページに、ユニットナンバ、シーケンスナンバ、及び、エラー検出コードがライトされると、処理は、ステップS22に進み、コマンドシーケンサ部23は、直前のステップS21でバッファユニットの管理ページに書き込まれたシーケンスナンバと同一のシーケンスナンバのユニット(データユニット)の管理ページをイレースし、書き込み処理が完了する。
すなわち、直前のステップS21でバッファユニットの管理ページに、シーケンスナンバが書き込まれると、注目ユーザブロックには、そのシーケンスナンバのユニットとして、新ユニット(直前のステップS21で管理ページの書き込みが行われた、バッファユニットであったユニット)と、対象ユニットでもある旧ユニットとの2個のユニットが存在する状態になる。
ステップS22では、コマンドシーケンサ部23は、その新ユニット、及び、旧ユニットのうちの、旧ユニット(対象ユニット)の管理ページをイレースする(イレースのみする)ことで、その旧ユニットを、新たなバッファユニットとする。
以上のように、無線タグ20では、コマンドシーケンサ部23が、RF部22においてリーダライタ10からのRF信号が受信されることで起動し、起動後、リーダライタ10からのコマンドを受信する前に行われる起動処理中に、バッファユニットの全ページをイレースするので(ステップS18)、リーダライタ10からのライトコマンドを受信した後は、不揮発性メモリであるメモリ部24へのデータの書き込みにおいて、メモリセルをイレース状態にするイレースを行わずに、メモリセルをライト状態にするライトを行うだけで済む。
したがって、ライトコマンドの受信後、ライトにおいて、ライト状態を維持するリテンション特性に必要な電荷蓄積時間(浮遊ゲートに電荷を蓄積する時間)として、従来と同一の時間をかけても、イレースを行わずに済む分、ライトコマンドを受信してから、メモリ部24にデータを書き込む書き込み処理を完了するまでの時間(書き込み処理時間)を短くすることができる。
すなわち、従来と同様のリテンション特性を維持し、かつ、書き込み処理時間を短くすることができる。
なお、図6では、ステップS12において、同一のユニットナンバS_PADのユニットが存在しないと判定された場合、すなわち、管理ページがイレース状態になっているバッファユニットが存在する場合と、ステップS13において、新ユニットに誤りがあると判定され、ステップS14において、同一のユニットナンバS_PADの2個のユニットのうちの旧ユニット(シーケンスナンバSEQが古いユニット)が、最新ユニットとされるとともに、新ユニットが、バッファユニットとされる場合との、いずれの場合も、処理を、ステップS16に進めることとしたが、これらの場合、処理は、ステップS16ではなく、ステップS18に進めることができる。
すなわち、上述したように、ステップS16では、バッファユニットの管理ページが、イレース状態であるかどうかが判定される。
そして、バッファユニットの管理ページが、イレース状態でない場合には、前回行われた書き込み処理において、ステップS22での、バッファユニットの管理ページのイレースが行われておらず、したがって、ステップS22の直前のステップS21でのライトが、前回行われた書き込み処理時にバッファユニットになっていてデータの書き込みが行われた最新ユニットの管理ページについて、浮遊ゲートへの十分な電荷の蓄積が行われるまで完了していない可能性があるので、ステップS17において、最新ユニットの管理ページのリテンション特性を維持するために、最新ユニットの管理ページの再書き込みが行われる。
一方、ステップS12において、同一のユニットナンバS_PADのユニットが存在しないと判定されるのは、管理ページがイレース状態になっているバッファユニットが存在する場合であり、バッファユニットが存在するということは、前回行われた書き込み処理としてのステップS22において、そのバッファユニットとなったユニットの管理ページのイレースが行われているので、前回行われた書き込み処理時にバッファユニットになっていたユニットについては、ステップS21のライトが完了しており、そのユニットの管理ページについては、浮遊ゲートへの十分な電荷の蓄積が行われている。
したがって、管理ページのリテンション特性を維持することができているので、ステップS17において、管理ページの再書き込みを行う必要はない。
また、同一のユニットナンバS_PADの2個のユニットが存在し、ステップS14において、その2個のユニットのうちの旧ユニットが、最新ユニットとされる場合には、最新ユニットとされる旧ユニットの管理ページについては、その旧ユニットが、前回、バッファユニットであったときに、データが書き込まれた後に行われた起動処理中のステップS17で、必要ならば、管理ページの再書き込みが行われているので、管理ページのリテンション特性を維持することができており、今回のステップS17において、管理ページの再書き込みを行う必要はない。
したがって、ステップS12において、同一のユニットナンバS_PADのユニットが存在しないと判定された場合と、ステップS14において、同一のユニットナンバS_PADの2個のユニットのうちの旧ユニットが、最新ユニットとされた場合との、いずれの場合も、管理ページのリテンション特性を維持することができているので、これらの場合、処理は、ステップS16ではなく、ステップS18に進めることができる。
[書き込み処理時間]
図7は、無線タグ20の書き込み処理時間を説明する図である。
ここで、上述したように、従来の無線タグでの、不揮発性メモリへのデータの書き込みでは、リーダライタからのライトコマンドの受信後、メモリセルをイレース状態にするイレースが行われ、その後、イレース状態のメモリセルをライト状態にするライトが行われる。
このように、ライトコマンドの受信後に、データの書き込みに必要なイレースとライトとを行って、不揮発性メモリにデータを書き込む方式を、同時方式という。
一方、図6で説明したように、無線タグ20の起動処理中に、バッファユニットの全ページのイレースを行っておき(データの書き込みに必要なイレースとライトのうちのイレースのみを行っておき)、リーダライタ10からのライトコマンドの受信後に、バッファユニットに、データのライトを行って(データの書き込みに必要なイレースとライトのうちのライトのみを行って)、メモリ部24にデータを書き込む様式を、分離方式という。
同時方式では、図7に示すように、無線タグとリーダライタとが近接した状態になって、リーダライタからRF信号の出力が開始されると、無線タグは、そのRF信号を電源として起動し、起動処理を開始する。
さらに、無線タグは、起動処理の終了後、リーダライタからポーリングが送信されてくるのを待って、そのポーリングを受信し、そのポーリングに対するレスポンスを返す。
なお、リーダライタが、RF信号の出力後、ポーリングを送信するまでの時間は、例えば、数10ミリ秒程度である。起動処理は、例えば、10ミリ秒程度で終了する。
その後、無線タグは、リーダライタからライトコマンドが送信されてくると、そのライトコマンドを受信する。さらに、無線タグは、リーダライタからのライトコマンドに従って、そのライトコマンドとともにリーダライタから送信されているデータを、不揮発性メモリに書き込む書き込み処理を行う。
なお、リーダライタが、無線タグからのレスポンスを受信してから、次のコマンドの送信を開始するまでの時間は、例えば、2.4ミリ秒以上である。
無線タグは、書き込み処理が完了すると、ライトコマンドに対するレスポンスを返す。
以上のように、同時方式の書き込み処理では、無線タグは、ライトコマンドの受信後に、イレースとライトとを行って、不揮発性メモリにデータを書き込む。
したがって、ユニット(バッファユニット)が、K個のページで構成され、1ページのイレースに要する時間をTe秒とするとともに、1ページのライトに要する時間をTw秒とすると、同時方式の書き込み処理には、K×(Te+Tw)秒の時間がかかる。
一方、分離方式では、図7に示すように、リーダライタ10と無線タグ20とが近接した状態になって、リーダライタ10からRF信号の出力が開始されると、無線タグ20は、そのRF信号を電源として起動し、起動処理を開始する。
起動処理においては、無線タグ20では、図6で説明したように、バッファユニットの全ページのイレースが行われる。
無線タグ20は、起動処理の終了後、リーダライタ10からポーリングが送信されてくるのを待って、そのポーリングを受信し、そのポーリングに対するレスポンスを返す。
そして、無線タグ20は、リーダライタからライトコマンドが送信されてくると、そのライトコマンドを受信する。さらに、無線タグ20は、リーダライタ10からのライトコマンドに従って、そのライトコマンドとともにリーダライタから送信されているデータを、メモリ部24(のバッファユニット)に書き込む書き込み処理を行う。
その後、無線タグ20は、書き込み処理が完了すると、ライトコマンドに対するレスポンスを返す。
分離方式の書き込み処理では、無線タグ20は、図6で説明したように、ライトコマンドの受信後に、バッファユニット(の全ページ)へのライトだけを行って、メモリ部24にデータを書き込む。
すなわち、バッファユニットのイレースは、既に、起動処理中に行われているので、リーダライタ10からのライトコマンドの受信後には行われない(行う必要がない)。
分離方式では、無線タグ20は、バッファユニットへのライトを行った後(ステップS21)、図6で説明したように、対象ユニットの管理ページである1ページのイレースを行い(ステップS22)、書き込み処理が完了する。
したがって、上述したように、バッファユニットが、K個のページで構成され、1ページのイレースに要する時間をTe秒とするとともに、1ページのライトに要する時間をTw秒とすると、分離方式の書き込み処理に要する時間(書き込み処理時間)は、Te+K×Tw秒になる。
以上から、分離方式の書き込み処理に要する書き込み処理時間は、同時方式に比較して、(K-1)×Te(=K×(Te+Tw)−(Te+K×Tw))秒だけ短くなる。
以上のように、分離方式によれば、書き込みに必要なイレースを、起動処理中に、いわば先だって行っておくので、同時方式と同様のリテンション特性を維持し、かつ、ライトコマンドを受信してからの書き込み処理時間を短くすることができる。
[メモリ部24の論理フォーマットの他の実施の形態]
図8は、図1の無線タグ20が有するメモリ部24の論理フォーマットの他の実施の形態を説明する図である。
図8の論理フォーマットは、メモリ部24の記憶領域の一部が、サービスに割り当てられる1個以上のユーザブロックになっている点で、図3の場合と共通する。
但し、図8の論理フォーマットは、メモリ部24の記憶領域の他の一部が、管理情報を記憶する管理ブロックになっている点で、管理情報がページ(管理ページ)に記憶される図3の場合と異なる。
ここで、図3では、ユニットには、データを記憶する1ページ以上のページ(データページ)と、管理情報を記憶する1ページの管理ページとが必要であるため、ユニットは、複数のページで構成されるが、図8では、管理情報は、管理ブロックに記憶され、管理ページが不要であるため、ユニットは、1ページ以上で構成することができる。
図8では、ユニットは、1ページで構成されている。
したがって、図8では、ユニットは、ページに等しい。
また、図8では、ユーザブロックのユニット(ページに等しい)には、データと、そのデータのエラー検出コードとしてのCRC等が記憶される。
管理ブロックは、例えば、ユーザブロックの個数の2倍の個数であるM'個のユニット(図8では、ページでもある)で構成される。
したがって、メモリ部24が、例えば、1個のユーザブロックを有することとすると、管理ブロックは、2個のユニットを有する。
管理ブロックには、ユーザブロックごとの管理情報が記憶される。1個のユーザブロックの管理情報は、管理ブロックの2個のユニットに記憶される。
ここで、1個のユーザブロックの管理情報を記憶する、管理ブロックの2個のユニットを、そのユーザブロックに対応する管理ブロックの2個のユニットともいう。
いま、ある1個のユーザブロックに注目すると、その注目する注目ユーザブロックに対応する管理ブロックの2個のユニット(ページ)のそれぞれには、注目ユーザブロックの管理情報として、注目ユーザブロックを構成するM+1個のユニットのユニットナンバS_PAD、及び、1個のシーケンスナンバ、並びに、それら(M+1個のユニットのユニットナンバS_PAD、及び、1個のシーケンスナンバ)のエラー検出コードとしてのCRC等が記憶される。
ここで、注目ユーザブロックに対応する管理ブロックの2個のユニットには、注目ユーザブロックにデータが書き込まれるごとに、そのデータの書き込みの後に、注目ユーザブロックの管理情報が、交互に書き込まれる。
したがって、注目ユーザブロックに対応する管理ブロックの2個のユニットのうちの一方のユニットには、注目ユーザブロックの最新の管理情報が記憶されており、他方のユニットには、その最新の管理情報が書き込まれる直前の管理情報が記憶されている。
以上のように、注目ユーザブロックに対応する管理ブロックの2個のユニットには、注目ユーザブロックにデータが書き込まれるごとに、注目ユーザブロックの管理情報が、交互に書き込まれることによって、注目ユーザブロックの最新の管理情報と、その最新の管理情報が書き込まれる直前の管理情報とが記憶されるので、メモリコラプションに対処することができる。
なお、注目ユーザブロックに対応する管理ブロックの2個のユニット(ページ)それぞれの、M+1個のユニットのユニットナンバS_PADを記憶する記憶領域は、注目ユーザブロックを構成するM+1個のユニットのユニットナンバS_PADを特定するための情報(以下、ユニットナンバ特定情報ともいう)を記憶するM+1個の記憶領域(以下、ユニットナンバ用領域ともいう)に区分されている。
そして、注目ユーザブロックを構成するM+1個のユニット#1ないし#M+1のうちの、m番目のユニット#mのユニットナンバ特定情報として、値mが採用され、M+1個のユニットナンバ用領域のうちの、先頭からi番目のユニットナンバ用領域には、ユニットナンバS_PADが値iのユニット#mのユニットナンバ特定情報#mが記憶される。
したがって、M+1個のユニットナンバ用領域のうちの、先頭からi番目のユニットナンバ用領域に、ユニットナンバ特定情報#mが記憶されている場合、注目ユーザブロックを構成するM+1個のユニット#1ないし#M+1のうちの、m番目のユニット#mのユニットナンバS_PADは、値iである。
以上のように、図8では、ユニット#mのユニットナンバ特定情報#mが、i番目のユニットナンバ用領域に書き込まれることによって、ユニット#mのユニットナンバS_PADが、値iであることが特定されるので、実質的(等価的)に、管理情報には、ユニット#mのユニットナンバS_PAD#iが含まれているということができる。
ここで、図8では、上述したように、注目ユーザブロックの管理情報に、1個のシーケンスナンバSEQが含まれるので、そのシーケンスナンバSEQは、注目ユーザブロックのいずれのユニットに、データが書き込まれても更新される。
すなわち、図3では、ユニットごとに、管理情報が存在し、その管理情報に、1個のシーケンスナンバSEQが含まれるので、あるユニットの管理情報に含まれるシーケンスナンバSEQは、そのユニットに、データが書き込まれるごとに更新される。
一方、図8では、ユーザブロックごとに、管理情報が存在し、その管理情報に、1個のシーケンスナンバSEQが含まれるので、あるユーザブロックの管理情報に含まれるシーケンスナンバSEQは、そのユーザブロックのいずれのユニットに、データが書き込まれても更新される(ユーザブロックに、データが書き込まれるごとに更新される)。
なお、ユーザブロックは、メモリ部24に、1個だけ設けることができ、この場合、シーケンスナンバSEQは、メモリ部24に対して、1個だけ存在するということができる。
メモリ部24が、図8の論理フォーマットを有する場合も、図3の場合と同様にして、コマンドシーケンサ部23は、メモリ部24に対するデータの書き込みの制御を行う。
すなわち、例えば、データの書き込みが行われる直前(書き込み前)に、注目ユーザブロックのM+1個のユニット#1ないし#M+1のうちの、例えば、M+1番目のユニット#M+1が、バッファユニットになっており、他の1ないしM番目のユニット#1ないし#Mが、データユニットになっていることとする。
また、データユニット#mのユニットナンバS_PADが、値mになっており、注目ユーザブロックの(管理情報に含まれる)シーケンスナンバSEQが、値Xになっていることとする。
そして、いま、例えば、リーダライタ10から無線タグ20に対して、(注目ユーザブロックの)ユニットナンバS_PADが値1のユニットへのデータの書き込みを要求するライトコマンドが、データとともに送信されてきたとする。
この場合、コマンドシーケンサ部23は、リーダライタ10からのライトコマンドに従い、そのライトコマンドとともに送信されてきたデータを、書き込みを行うべき対象のユニットである対象ユニット、すなわち、ユニットナンバS_PADが値1になっているユニット#1(ライトコマンドによって書き込みが要求されているユニットナンバS_PADのユニット)ではなく、バッファユニットになっているユニット#M+1に書き込む。
その後、コマンドシーケンサ部23は、注目ユーザブロックの管理情報を更新する。
すなわち、注目ユーザブロックの管理情報としては、上述したように、最新の管理情報(以下、最新管理情報ともいう)と、その最新の管理情報が書き込まれる直前の管理情報(以下、直前管理情報ともいう)が、メモリ部24に記憶されている。
いま、メモリ部24に、注目ユーザブロックの最新管理情報として、管理情報C#tが記憶されており、注目ユーザブロックの直前管理情報として、管理情報C#t-1が記憶されていることとする。
コマンドシーケンサ部23は、管理情報C#tを、更新元の管理情報(以下、更新元管理情報ともいう)として、バッファユニットになっているユニット#M+1のユニットナンバS_PADを、対象ユニットであるユニット#1のユニットナンバS_PAD=1と同一のユニットナンバS_PAD=1とし、新たにバッファユニットとするユニット#1のユニットナンバS_PADを、バッファユニットであることを表す値0とするように、更新元管理情報を更新する。
さらに、コマンドシーケンサ部23は、更新元管理情報に含まれるシーケンスナンバSEQを更新し、新たなエラー検出コードを算出する。
そして、以上の結果得られる更新元管理情報を、管理情報C#t+1と表すこととすると、コマンドシーケンサ部23は、管理情報C#t+1を、注目ユーザブロックの管理情報として、メモリ部24の直前管理情報である管理情報C#t-1に上書きする形で書き込む。
その結果、管理情報C#t+1が、注目ユーザブロックの最新管理情報となり、管理情報C#tが、注目ユーザブロックの直前管理情報となる。
なお、メモリ部24が、図8の論理フォーマットを有する場合、コマンドシーケンサ部23は、起動処理中に、図6のステップS11ないしS18に代えて、以下の処理を行う。
すなわち、コマンドシーケンサ部23は、最新管理情報のエラー検出コードを用いて、誤り検出を行う。
そして、最新管理情報について、誤りが検出されたなった場合には、コマンドシーケンサ部23は、最新管理情報を参照することにより、バッファユニットを認識し、バッファユニットの全ページ(図8では、1ページ)をイレースし、イレース状態とする。
一方、最新管理情報について、誤りが検出された場合には、コマンドシーケンサ部23は、直前管理情報を参照することにより、バッファユニットを認識し、バッファユニットの全ページをイレースし、イレース状態とする。
以上のように、コマンドシーケンサ部23は、バッファユニットをイレース状態にすることまでを、起動処理中に行う。
その後、コマンドシーケンサ部23は、リーダライタ10から、例えば、ライトコマンドが送信されてくると、上述したような、メモリ部24に対するデータの書き込みの制御を行う。
但し、最新管理情報について、誤りが検出された場合には、コマンドシーケンサ部23は、最新管理情報ではなく、直前管理情報を、更新元管理情報として更新を行い、その結果得られる更新元管理情報を、最新管理情報に上書きする形で書き込む。
[無線タグ20の処理]
ところで、図6では、リーダライタ10から、無線タグ20に対して、ライトコマンドが、1回だけ送信されてくることとして、無線タグ20の処理を説明したが、リーダライタ10から、無線タグ20に対しては、ライトコマンドが、1回以上送信されてくることがある。
図9は、リーダライタ10から、無線タグ20に対して、ライトコマンドが、1回以上送信されてくる場合の、図2の無線タグ20の処理を説明するフローチャートである。
なお、無線タグ20のメモリ部24の論理フォーマットは、図3に示したフォーマットであるとする。
無線タグ20では、ステップS41ないしS50において、図6のステップS11ないしS20とそれぞれ同様の処理が行われる。
そして、ステップS50において、RF部22が、リーダライタ10からのライトコマンドを受信し、コマンドシーケンサ部23に供給すると、処理は、ステップS51に進み、コマンドシーケンサ部23は、バッファユニットの全ページが、イレース状態になっているかどうかを判定する。
ステップS51において、バッファユニットの全ページが、イレース状態になっていると判定された場合、処理は、ステップS52をスキップして、ステップS53に進む。
また、ステップS51において、バッファユニットの1ページ以上が、イレース状態になっていないと判定された場合、処理は、ステップS52に進み、コマンドシーケンサ部23は、バッファユニットをイレースし、バッファユニットの全ページをイレース状態にして、処理は、ステップS53に進む。
ここで、ステップS52において、バッファユニットのイレースは、バッファユニットの全ページを対象に行っても良いし、バッファユニットのページのうちの、イレース状態になっていないページだけを対象として行って良い。
ステップS53及びS54では、図6のステップS21及びS22とそれぞれ同様の処理が行われる。
ステップS54の後、処理は、ステップS49に戻り、無線タグ20は、リーダライタ10からのコマンドを待つコマンド待ち状態となる。
そして、リーダライタ10から次のライトコマンドが送信されてくるのを待って、処理は、ステップS49からステップS50に進み、以下、同様にして、ステップS49ないしS54の処理が繰り返される。
ステップS49ないしS54の処理は、例えば、無線タグ20が、リーダライタ10から離れることによって、電源の供給を受けることができなくなるか、又は、リーダライタ10から無線タグ20に対して、所定の時間の間、コマンドが送信されてこない場合(ステップS49のコマンド待ち状態が、所定の時間だけ継続した場合)に、終了する。
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
すなわち、例えば、本実施の形態では、不揮発性メモリであるメモリ部24として、EEPROMを採用することとしたが、メモリ部24としては、EEPROM以外の、例えば、FeRAM(Ferroelectric Random Access Memory)等の不揮発性メモリを採用することが可能である。但し、分離方式の書き込み処理は、例えば、EEPROMのように、電荷蓄積時間が長い不揮発性メモリに、特に有用である。
また、本実施の形態では、1個のユニットをバッファユニットとしたが、バッファユニットとしては、複数個のユニットを採用することが可能である。