(57)【特許請求の範囲】
【請求項１】
所定のブロック単位で情報が記録される記録媒体を用いた情報処理装置の情報処理方法において、
前記記録媒体は、
複数のブロックから構成され、
前記ブロック単位でデータを記憶するデータ領域と、
前記データ領域の各ブロックに割当てられた複数のブロック番号を記憶するポインタ領域と、
更新前のデータが記憶されている前記データ領域の対象ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の対照ブロックポインタ、更新後のデータが記憶される前記データ領域の更新ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の更新ブロックポインタ、および記憶内容の新しさに関する最新情報を記憶する第１の領域と
を有し、
前記情報処理装置による、
前記第１の領域に記憶されている全ての前記更新ブロックポインタにそれぞれ対応する前記ポインタ領域が記憶する全てのブロック番号にそれぞれ対応する前記データ領域の前記更新ブロックのデータを一括して消去させる第１の消去ステップと、
一括してデータが消去された、前記データ領域の全ての前記更新ブロックの少なくとも一部に更新後のデータを書込ませる書込みステップと、
前記更新後のデータが書き込まれたデータ領域のブロックのブロック番号を、前記ポインタ領域のブロックに記憶させる第１の記憶ステップと、
データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号を、前記第１の領域に対象ブロックポインタとして記憶させる第２の記憶ステップと
を含み、
前記書込みステップの処理は、書込みコマンドに応じて実行され、
前記第１の消去ステップの処理は、前記書込みコマンドの有無に拘わらず、前記書込みステップの処理に先行した所定タイミングで実行される
情報処理方法。
【請求項２】
前記記録媒体は、さらに、
更新前のデータが記憶されている前記データ領域の対象ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の対照ブロックポインタ、更新後のデータが記憶される前記データ領域の更新ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の更新ブロックポインタ、および記憶内容の新しさに関する最新情報を記憶する第２の領域を
有し、
前記情報処理装置による、
前記第１の消去ステップは、前記最新情報に基づいて選択された前記第１または第２の領域の一方に記憶されている全ての前記更新ブロックポインタにそれぞれ対応する前記ポインタ領域が記憶する全てのブロック番号にそれぞれ対応する前記データ領域の前記更新ブロックのデータを一括して消去させ、
前記第２の記憶ステップは、データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号を、前記第１または第２の領域の他方に記憶させ、
前記第２の記憶ステップの後、前記第１または第２の領域の前記一方に記憶されている前記対象ブロックポインタ、前記更新ブロックポインタ、および前記最新情報を消去させる第２の消去ステップをさらに含む
請求項１に記載の情報処理方法。
【請求項３】
所定のブロック単位で情報が記録される記録媒体に対して情報を記録する情報処理装置において、
前記記録媒体は、
複数のブロックから構成され、
前記ブロック単位でデータを記憶するデータ領域と、
前記データ領域の各ブロックに割当てられた複数のブロック番号を記憶するポインタ領域と、
更新前のデータが記憶されている前記データ領域の対象ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の対照ブロックポインタ、更新後のデータが記憶される前記データ領域の更新ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の更新ブロックポインタ、および記憶内容の新しさに関する最新情報を記憶する第１の領域と
を有し、
前記第１の領域に記憶されている全ての前記更新ブロックポインタにそれぞれ対応する前記ポインタ領域が記憶する全てのブロック番号にそれぞれ対応する前記データ領域の前記更新ブロックのデータを一括して消去させる第１の消去手段と、
一括してデータが消去された、前記データ領域の全ての前記更新ブロックの少なくとも一部に更新後のデータを書込ませる書込み手段と、
前記更新後のデータが書き込まれたデータ領域のブロックのブロック番号を、前記ポインタ領域のブロックに記憶させる第１の記憶手段と、
データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号を、前記第１の領域に対象ブロックポインタとして記憶させる第２の記憶手段と
を備え、
前記書込み手段は、書込みコマンドに応じて動作し、
前記第１の消去手段は、前記書込みコマンドの有無に拘わらず、前記書込み手段の動作に先行した所定タイミングで動作する
情報処理装置。
【請求項４】
所定のブロック単位で情報が記録される記録媒体を用いた情報処理装置の制御用のプログラムであって、
前記記録媒体は、
複数のブロックから構成され、
前記ブロック単位でデータを記憶するデータ領域と、
前記データ領域の各ブロックに割当てられた複数のブロック番号を記憶するポインタ領域と、
更新前のデータが記憶されている前記データ領域の対象ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の対照ブロックポインタ、更新後のデータが記憶される前記データ領域の更新ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の更新ブロックポインタ、および記憶内容の新しさに関する最新情報を記憶する第１の領域と
を有し、
前記第１の領域に記憶されている全ての前記更新ブロックポインタにそれぞれ対応する前記ポインタ領域が記憶する全てのブロック番号にそれぞれ対応する前記データ領域の前記更新ブロックのデータを一括して消去させる第１の消去ステップと、
一括してデータが消去された、前記データ領域の全ての前記更新ブロックの少なくとも一部に更新後のデータを書込ませる書込みステップと、
前記更新後のデータが書き込まれたデータ領域のブロックのブロック番号を、前記ポインタ領域のブロックに記憶させる第１の記憶ステップと、
データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号を、前記第１の領域に対象ブロックポインタとして記憶させる第２の記憶ステップと
を含む処理を情報処理装置のコンピュータに実行させ、
前記書込みステップの処理は、書込みコマンドに応じて実行され、
前記第１の消去ステップの処理は、前記書込みコマンドの有無に拘わらず、前記書込みステップの処理に先行した所定タイミングで実行される
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理方法、情報処理装置、およびプログラムに関し、特に、例えば、EEPROM(electrically erasable programmable ROM)のように、記録領域に既に記録されているデータに上書きすることができず、既に記録されているデータを消去してから新たなデータを記録しなければならない記録媒体に対してデータ記録する場合に用いて好適な情報処理方法、情報処理装置、およびプログラムに関する。
【背景技術】
【０００２】
現在、FeliCa（商標）に代表される非接触通信システムが広く実用化されている。
【０００３】
既存の非接触通信システムにおいては、リーダ／ライタ（以下、Ｒ／Ｗと略記する）が、コントローラからの制御に従って、ＩＣカードとデータを非接触で通信する。
【０００４】
このＩＣカードは、記録媒体を内蔵しており、例えば、非接触通信システムが電子マネーシステムに利用される場合においては、プリペイドマネーの残高や購買履歴などの情報が記録され、駅改札システムに利用される場合においては、定期券情報や乗降履歴情報が記録される。
【０００５】
ＩＣカードに内蔵される記録媒体としては、不揮発性メモリのEEPROMが適用されることが多い。EEPROMは、その特性として、データを書き込む場合、記録領域に既に記録されているデータに上書きすることができず、既に記録されているデータを消去してから新たなデータを記録しなければならない。
【０００６】
ところで、ＩＣカードには、自らはバッテリを有していないバッテリレス型のＩＣカードがあり、このようなバッテリレス型のＩＣカードは、Ｒ／Ｗから放射される電磁波を利用した電磁誘導により駆動電力を取得できるようになされている。
【０００７】
しかしながら、ＩＣカードとＲ／Ｗとの間でデータを非接触で通信する場合、ＩＣカードが内蔵するメモリにアクセスしている途中で、電磁波の受信状態が不良になると十分な駆動電力を取得することができなくなり、メモリにおけるデータの整合性に欠陥が生じてしまうことが発生し得る。以下、メモリにおけるデータの整合性に欠陥が生じた状態を、メモリコラプション（Memory Corruption）と称する。
【０００８】
また、非接触通信に限らず、ＩＣカードとＲ／Ｗとを接触させてデータの送受信を行う場合においても、ユーザが、ＩＣカードを、Ｒ／Ｗに対して自由に抜き差しすることができるときには、メモリにアクセスしている途中で、ＩＣカードがＲ／Ｗから抜かれると、やはり、メモリコラプションが生じてしまうことが起こり得た。
【０００９】
そこで従来から、メモリコラプションに対する様々な対処方法が提案されている。
【００１０】
例えば、本出願人は、ＩＣカードに、前回の通信結果のデータと前々回の通信結果のデータを記録しておき、古い方のデータ（前々回のデータ）を、今回の通信結果のデータで更新するようにし、更新の処理を良好に行うことができなかった場合（古いデータが破壊されてしまった場合）でも、前回の有効なデータが残るようにした方法を提案している（特許文献１参照）。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開平１１−２５００３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
特許文献１の方法によれば、古い方のデータを更新中に例えば電源が遮断されたとしても、少なくとも前々回のデータまたは前回のデータの一方を安定して読み出すことができる。
【００１３】
しかしながら、特許文献１の方法には、データの書込み処理において、その所要時間をより短縮できる余地が残されていた。
【００１４】
本発明は、このような状況に鑑みてなされたものであり、データを書き込む場合、記録領域に既に記録されているデータに上書きすることができず、既に記録されているデータを消去してから新たなデータを記録しなければならないEEPROMなどの記録媒体に対し、データの書込み処理に要する時間を短縮できるようにするものである。
【課題を解決するための手段】
【００１５】
本発明の一側面である情報処理方法は、所定のブロック単位で情報が記録される記録媒体を用いた情報処理装置の情報処理方法において、前記記録媒体は、複数のブロックから構成され、前記ブロック単位でデータを記憶するデータ領域と、前記データ領域の各ブロックに割当てられた複数のブロック番号を記憶するポインタ領域と、更新前のデータが記憶されている前記データ領域の対象ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の対照ブロックポインタ、更新後のデータが記憶される前記データ領域の更新ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の更新ブロックポインタ、および記憶内容の新しさに関する最新情報を記憶する第１の領域とを有し、前記情報処理装置による、前記第１の領域に記憶されている全ての前記更新ブロックポインタにそれぞれ対応する前記ポインタ領域が記憶する全てのブロック番号にそれぞれ対応する前記データ領域の前記更新ブロックのデータを一括して消去させる第１の消去ステップと、一括してデータが消去された、前記データ領域の全ての前記更新ブロックの少なくとも一部に更新後のデータを書込ませる書込みステップと、前記更新後のデータが書き込まれたデータ領域のブロックのブロック番号を、前記ポインタ領域のブロックに記憶させる第１の記憶ステップと、データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号を、前記第１の領域に対象ブロックポインタとして記憶させる第２の記憶ステップとを含み、前記書込みステップの処理は、書込みコマンドに応じて実行され、前記第１の消去ステップの処理は、前記書込みコマンドの有無に拘わらず、前記書込みステップの処理に先行した所定タイミングで実行される。
【００１６】
前記記録媒体は、さらに、更新前のデータが記憶されている前記データ領域の対象ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の対照ブロックポインタ、更新後のデータが記憶される前記データ領域の更新ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の更新ブロックポインタ、および記憶内容の新しさに関する最新情報を記憶する第２の領域を有し、前記情報処理装置による、前記第１の消去ステップは、前記最新情報に基づいて選択された前記第１または第２の領域の一方に記憶されている全ての前記更新ブロックポインタにそれぞれ対応する前記ポインタ領域が記憶する全てのブロック番号にそれぞれ対応する前記データ領域の前記更新ブロックのデータを一括して消去させ、前記第２の記憶ステップは、データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号を、前記第１または第２の領域の他方に記憶させ、前記第２の記憶ステップの後、前記第１または第２の領域の前記一方に記憶されている前記対象ブロックポインタ、前記更新ブロックポインタ、および前記最新情報を消去させる第２の消去ステップをさらに含むことができる。
【００１９】
本発明の一側面である情報処理装置は、所定のブロック単位で情報が記録される記録媒体に対して情報を記録する情報処理装置において、前記記録媒体は、複数のブロックから構成され、前記ブロック単位でデータを記憶するデータ領域と、前記データ領域の各ブロックに割当てられた複数のブロック番号を記憶するポインタ領域と、更新前のデータが記憶されている前記データ領域の対象ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の対照ブロックポインタ、更新後のデータが記憶される前記データ領域の更新ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の更新ブロックポインタ、および記憶内容の新しさに関する最新情報を記憶する第１の領域とを有し、前記第１の領域に記憶されている全ての前記更新ブロックポインタにそれぞれ対応する前記ポインタ領域が記憶する全てのブロック番号にそれぞれ対応する前記データ領域の前記更新ブロックのデータを一括して消去させる第１の消去手段と、一括してデータが消去された、前記データ領域の全ての前記更新ブロックの少なくとも一部に更新後のデータを書込ませる書込み手段と、前記更新後のデータが書き込まれたデータ領域のブロックのブロック番号を、前記ポインタ領域のブロックに記憶させる第１の記憶手段と、データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号を、前記第１の領域に対象ブロックポインタとして記憶させる第２の記憶手段とを備え、前記書込み手段は、書込みコマンドに応じて動作し、前記第１の消去手段は、前記書込みコマンドの有無に拘わらず、前記書込み手段の動作に先行した所定タイミングで動作する。
【００２０】
本発明の一側面であるプログラムは、所定のブロック単位で情報が記録される記録媒体を用いた情報処理装置の制御用のプログラムであって、前記記録媒体は、複数のブロックから構成され、前記ブロック単位でデータを記憶するデータ領域と、前記データ領域の各ブロックに割当てられた複数のブロック番号を記憶するポインタ領域と、更新前のデータが記憶されている前記データ領域の対象ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の対照ブロックポインタ、更新後のデータが記憶される前記データ領域の更新ブロックを指示する前記ポインタ領域のブロック番号を示す１または複数の更新ブロックポインタ、および記憶内容の新しさに関する最新情報を記憶する第１の領域とを有し、前記第１の領域に記憶されている全ての前記更新ブロックポインタにそれぞれ対応する前記ポインタ領域が記憶する全てのブロック番号にそれぞれ対応する前記データ領域の前記更新ブロックのデータを一括して消去させる第１の消去ステップと、一括してデータが消去された、前記データ領域の全ての前記更新ブロックの少なくとも一部に更新後のデータを書込ませる書込みステップと、前記更新後のデータが書き込まれたデータ領域のブロックのブロック番号を、前記ポインタ領域のブロックに記憶させる第１の記憶ステップと、データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号を、前記第１の領域に対象ブロックポインタとして記憶させる第２の記憶ステップとを含み、前記書込みステップの処理は、書込みコマンドに応じて実行され、前記第１の消去ステップの処理は、前記書込みコマンドの有無に拘わらず、前記書込みステップの処理に先行した所定タイミングで実行される処理を情報処理装置のコンピュータに実行させる。
【００２１】
本発明の一側面においては、第１の領域に記憶されている全ての更新ブロックポインタにそれぞれ対応するポインタ領域が記憶する全てのブロック番号にそれぞれ対応するデータ領域の前記更新ブロックのデータが一括して消去され、一括してデータが消去された、前記データ領域の全ての前記更新ブロックの少なくとも一部に更新後のデータが書込まれ、前記更新後のデータが書き込まれたデータ領域のブロックのブロック番号が、前記ポインタ領域のブロックに記憶され、データ領域のブロック番号を記憶させたポインタ領域の前記ブロックのブロック番号が、前記第１の領域に対象ブロックポインタとして記憶される。
【発明の効果】
【００２２】
本発明の一側面によれば、メモリコラプションに対処することができる。
【００２３】
また、本発明の一側面によれば、メモリコラプションに対処しつつ、データの書込み処理に要する時間を短縮することが可能となる。
【図面の簡単な説明】
【００２４】
【図１】本発明を適用した非接触通信システムの構成例を示すブロック図である。
【図２】図１のリーダ／ライタの構成例を示すブロック図である。
【図３】図１のＩＣカードの構成例を示すブロック図である。
【図４】メモリコラプションに対する対処方法の基本原理を説明する図である。
【図５】シングルポインタ方式を説明する図である。
【図６】シングルポインタ方式を説明する図である。
【図７】ダブルポインタ方式を説明する図である。
【図８】ダブルポインタ方式を説明する図である。
【図９】ダブルポインタ方式に対応する読み出し処理を説明するフローチャートである。
【図１０】ダブルポインタ方式に対応する書込み処理を説明するフローチャートである。
【発明を実施するための形態】
【００２５】
以下、発明を実施するための最良の形態（以下、実施の形態と称する）について、図面を参照しながら詳細に説明する。
【００２６】
＜１．実施の形態＞
［非接触通信システムの構成例］
図１は、本発明の実施の形態であるＩＣカードを含む非接触通信システムの構成例を示している。
【００２７】
この非接触通信システム１０は、コントローラ１１、Ｒ／Ｗ（リーダ／ライタ）１２、およびＩＣカード１３から構成される。Ｒ／Ｗ１２は、コントローラ１１からの制御に従い、ＩＣカード１３との間で、電磁波を利用した非接触通信を行う。
【００２８】
すなわち、コントローラ１１がＲ／Ｗ１２に対してＩＣカード１３との通信を指示するコマンドを送信すると、Ｒ／Ｗ１２が、所定のコマンドをＩＣカード１３に送信する。当該所定のコマンドを受信したＩＣカード１３は、そのコマンドに対応する処理を行い、処理結果を示す応答データをＲ／Ｗ１２に送信するようになされている。
【００２９】
［Ｒ／Ｗ１２の構成例］
図２は、図１のＲ／Ｗ１２の構成例を示している。
【００３０】
Ｒ/Ｗ１２は、ＩＣ２１、フラッシュメモリ２２、変調部２３、発振部２４、復調部２５、およびアンテナ２６から構成される。
【００３１】
ＩＣ２１は、DPU(Data Processing Unit)３１、SPU(Signal Processing Unit)３２、SCC３３、およびメモリ部３４がバス３５を介して相互に接続されて構成される。
【００３２】
また、バス３５には、所定のデータを記憶するフラッシュメモリ２２も接続されている。
【００３３】
DPU３１は、ＩＣカード１３に送信するコマンドをSPU３２に出力するとともに、ＩＣカード１３から受信した応答データをSPU３２から取得する。
【００３４】
SPU３２は、ＩＣカード１３に送信するコマンドに対して所定の変調符号化処理（例えば、BPSK（Binary Phase Shift Keying）変調符号化処理など）を行った後、変調部２３に出力するとともに、ＩＣカード１３により送信されてきた応答データを復調部２５から取得し、そのデータに対して変調復号処理（BPSK変調の復号処理など）を行う。
【００３５】
変調部２３は、発振部２４より供給された所定の周波数（例えば１３．５６ＭＨｚ）の搬送波を、SPU３２より供給されたデータで、ASK（Amplitude Shift Keying）変調し、生成された変調波を、アンテナ２７を介して、電磁波としてＩＣカード１３に出力する。このとき、変調部２３は、変調度を１未満にして、ASK変調を行う。すなわち、データがローレベルのときにおいても、変調波の最大振幅がゼロにならないようにする。
【００３６】
復調部２５は、アンテナ２７を介して受信した変調波（ASK変調波）を復調し、復調されたデータをSPU３２に出力する。
【００３７】
［ＩＣカード１３の構成例］
図３は、図１のＩＣカード１３の構成例を示している。
【００３８】
ＩＣカード１３は、ＩＣ５１、コンデンサ５２、およびアンテナ５３から構成される。
【００３９】
ＩＣ５１は、Ｒ／Ｗ１２により送信された変調波を、アンテナ５３を介して受信する。コンデンサ５２は、アンテナ５３とともにＬＣ回路を構成し、所定の周波数（キャリア周波数）の電磁波に同調（共振）するようになされている。
【００４０】
ＩＣ５１は、ＲＦインタフェース部６１、BPSK復調部、PLL(Phase Locked Loop)部６３、演算部６４、ROM６５、EEPROM(Electrically Erasable and Programmable ROM)６６、RAM６７、およびBPSK変調部６８から構成される。
【００４１】
ＲＦインタフェース部６１は、さらに、ASK復調部８１、電圧レギュレータ８２、発振部８３、およびASK変調部８４に細分化されている。
【００４２】
ＲＦインタフェース部６１は、ASK復調部８１がアンテナ５３を介して受信した変調波（ASK変調波）を検波して復調し、復調後のデータをBPSK復調部６２およびPLL部６３に出力する。また、ＲＦインタフェース部６２は、電圧レギュレータ８２によってASK復調部８１が検波した信号を安定化し、その結果得られる直流電力をＩＣ５１の各部に駆動電力として供給する。さらに、ＲＦインタフェース部６１は、発振部８３でデータのクロック周波数と同一の周波数の信号を発振し、その信号をPLL部６３に出力する。
【００４３】
そして、ＲＦインタフェース部６１のASK変調部８４は、演算部６４より供給されたデータに対応して、ＩＣカード１３の電源としてのアンテナ５３の負荷を変動させる（例えば、データに対応して所定のスイッチング素子をオン／オフさせ、スイッチング素子がオン状態であるときだけ所定の負荷をアンテナ５３に並列に接続させる）ことにより、アンテナ５３を介して受信している変調波をASK変調し、アンテナ５３を介してＲ／Ｗ１２に送信する。
【００４４】
PLL部６３は、ASK復調部８１より供給されたデータより、そのデータに同期したクロック信号を生成し、そのクロック信号をBPSK復調部６２およびBPSK変調部６８に出力する。BPSK復調部６２は、ASK復調部８１で復調されたデータがBPSK変調されている場合、PLL部６３より供給されたクロック信号に従って、そのデータの復調（マンチェスタコードのデコード）を行い、復調したデータを演算部６４に出力する。
【００４５】
演算部６４は、シーケンス部９１、暗号／復号部９２、およびパリティ演算部９３から成り、BPSK復調部６２より供給されたデータが暗号化されている場合、そのデータを暗号／復号部９２で復号化した後、その復号結果のデータをシーケンサ９１で処理する。BPSK復調部６２より供給されたデータが暗号化されていない場合、BPSK復調部６２より供給されたデータは、暗号／復号部９２を介さず、シーケンサ９１に直接供給される。
【００４６】
シーケンサ９１は、そこに供給されるコマンドとしてのデータに対応する処理を行う。すなわち、例えば、シーケンサ９１は、EEPROM６６に対するデータの書込みや読み出しなどの処理を行う。さらに、シーケンサ９１は、コマンドとしてのデータに対応する処理を行った後、その処理に対応する応答データ（Ｒ／Ｗ１２に送信するデータ）を生成してBPSK変調部６８に出力する。
【００４７】
パリティ演算部９３は、EEPROM６６に記憶されるデータや、EEPROM６６に記憶されているデータから、パリティとして、リードソロモン符号を算出する。
【００４８】
BPSK変調部６８は、演算部６４より供給されたデータをBPSK変調し、変調後のデータをＲＦインタフェース部６１のASK変調部８４に出力する。
【００４９】
ROM６５は、シーケンサ９１が行うべき処理プログラムその他の必要なデータを記憶している。RAM６７は、シーケンサ９１が処理を行うとき、処理の途中のデータなどを、一時的に記憶する。EEPROM６６は、不揮発性のメモリであり、ＩＣカード１３がＲ／Ｗ１２との通信を終了し、電力供給が停止した後も、記憶しているデータを消失することなく保持するようになされている。
【００５０】
［メモリコラプションに対する対処方法］
次に、ＩＣカード１３のシーケンサ９１による、EEPROM６６に対するデータの読み書き処理について説明するが、その前に、その前段階の準備として、メモリに記憶されている情報が破壊されてしまうことを意味するメモリコラプション(Memory Corruption)に対する対処方法について説明する。
【００５１】
まず、メモリコラプションに対する対処方法の基本原理について説明する。
【００５２】
例えば、メモリ（EEPROM６６に相当）に対して、情報の読み書きが所定のブロック単位で行われるとし、あるブロックＢ１に記憶されたデータを更新する（ブロックＢ１に記憶されているデータを、他のデータに書き換える）ことを考える。
【００５３】
この場合、ブロックＢ１自体に、新たなデータを書き込むと、ブロックＢ１に既に記憶されているデータに上書きすることになり、この書込みの最中に、ＩＣカードへの電力の供給が不足したりした場合、新たなデータは完全には書き込まれないことになす。さらに、ブロックＢ１に記憶されていたデータは破壊されることになり、メモリコラプションが生じてしまう。
【００５４】
このような事態の発生を防止するためには、ブロックＢ１に書き込むべき新たなデータを、そのブロックＢ１とは異なるブロックＢ２に書き込むようにすればよい。これにより、ブロックＢ２への書込みの最中にメモリコラプションが生じた場合には、新たなデータの書込みは完全に行われず、その有効性は保証されないものの、少なくとも、ブロックＢ１に記憶されていたデータの破壊は防止することができる。そして、ブロックＢ２への書込みが終了した後、ブロックＢ１に記憶されているデータを消去する。
【００５５】
なお、さらに新たなデータが供給されたときには、そのデータは、ブロックＢ２とは異なるブロックである、例えばブロックＢ１に書き込まれる。このように、新たなデータが供給された場合には、前回書き込まれたデータが記憶されているブロック以外のブロックに、その新たなデータを書き込むようにする。これにより、少なくとも、新たなデータの書込みによって、前回書き込まれたデータが破壊されないようにし、これにより、ＩＣカードが最悪の場合でも、使用不可にならないようにする。
【００５６】
次に、図４を参照して、以上のような基本原理を適用したメモリの読み書き方法について説明する。
【００５７】
図４においては説明の便宜上、１ブロックが、１バイト（８ビット）の最新性情報、８バイトのデータ、および２バイトの有効性情報が、その先頭から順次配置された１１バイトで構成されているものとする。ただし、１ブロックのビット数、さらには、最新性情報、データ、および有効性情報に割り当てるビット数は、上述したものに特に限定されるものではない。
【００５８】
最新性情報は、そのブロックの記憶内容の新しさを示すもので、例えば、絶対的な日付および時刻や、シーケンシャルな番号その他を用いることができる。すなわち、絶対的な日付および時刻を用いる場合には、データが記憶された日付および時刻を最新性情報として記憶するようにすれば、その最新性情報により、データの記憶がなされた最新のブロックを検出することができる。
【００５９】
また、シーケンシャルな番号を用いる場合には、データの書込みが行われるたびに、例えばインクリメントされる番号を最新性情報として記憶するようにすれば、その値の最も大きいブロックが、データの書込みがなされた最新のものということになる。
【００６０】
なお、ここでは、少なくとも２つのブロックのうちのいずれが新しいかを認識できれば充分であり、従って、最新性情報は、少なくとも３つの状態を表すことができればよい。すなわち、例えば、いま、３つの状態を表すことのできる最新性情報として、０，１，２の３値を用いることにすると、２つのブロックのうちのいずれかに書込みが行われる毎に、０，１，２，０，・・・を、その書込みが行われたブロックの最新性情報として書き込むようにすればよい。
【００６１】
この場合、２つのブロックの最新性情報が０と１ならば１のブロックの方が新しく、１と２ならば２のブロックの方が新しく、２と０ならば０のブロックの方が新しいということになる。このように、最新性情報として、０，１，２の３値を用いる場合には、そのビット数は２ビットで済む。その他、例えば、最新性情報としては、１ビットのフラグを３個用い、ブロックの書込みが行われる毎に、ビットをたてるフラグを順次変化させるようにしてもよい。
【００６２】
以下、最新性情報として、上述した０，１，２の３値を用いることにする。
【００６３】
有効性情報は、そのブロックの最新性情報およびデータの書込みが正常に終了したかどうかを示す、いわば、最新性情報およびデータの有効性（有効であるのか無効であるのか）を示すもので、例えば、ＲＳ（リードソロモン）符号などを用いることができる。
【００６４】
なお、有効性情報は、ＲＳ符号などの誤り訂正符号に限定されるものではない。すなわち、有効性情報は、上述のように最新性情報およびデータが有効であるのか、または無効であるのかを表すことができればよい。従って、有効性情報は、例えば、最新性情報およびデータを書込みながら計算されるパリティであっても、また、例えば、最新性情報およびデータが正常に書き込まれた後に付加される１ビットのフラグなどであってもよい。
【００６５】
図４では、メモリが、第１および第２の領域としての２つのブロックを有しており、同図Ａは、第１の領域の８バイトのデータとして０１，０２，０３，０４，０５，０６，０７，０８（各値はそれぞれ１６進数とする）が既に記憶されており、第２の領域は、全てのデータが消去されている様子を示している。
【００６６】
この状態において、新たに書き込むべきデータ１１乃至１８が供給されると、まず、第１および第２の領域としての２つのブロックの有効性が、それぞれの有効性情報に基づいて判定される。なお、ここでは、第１の領域としてのブロックのみが有効であると判定される。
【００６７】
新たなデータの書込みを行う場合、上述したように、前回書き込まれたデータを破壊しないようにするために、現状でデータが記録されていないブロックに、新たなデータの書込みを行う。従って、同図Ｂに示すように、新たなデータ１１乃至１８は、第２の領域としてのブロックに書き込まれる。データ１１乃至１８の書込みの終了後は、まず、その書込みが行われたブロックの最新性情報を更新する。すなわち、それまで最新のブロックであった、第１の領域としてのブロックの最新性情報が０１であったので、いま書込みが行われた第２の領域としてのブロックの最新性情報として、第１の領域としてのブロックの最新性情報０１に１を加算した値０２が書き込まれ、さらに、最新性情報０２の有効性を表す有効性情報の書込みが行われる。
【００６８】
そして、第２の領域としてのブロックへの書込みが全て終了した後、同図Ｃに示すように、第１の領域としてのブロックに記録されている全てのデータが消去される。
【００６９】
ところで、図４の第１および第２の領域としての２つのブロックは、外部からは、同一の論理的なブロックである論理ブロックとして認識されるようになされている。すなわち、第１および第２の領域としてのブロックは、物理的に存在するブロックである物理ブロックであり、各物理ブロックには、その識別のために、ユニークな番号である物理ブロック番号が割り当てられている。そして、第１および第２の領域としての物理ブロックの物理ブロック番号には、いずれにも、論理ブロックを識別するための論理ブロック番号として、同一の番号が対応付けられており、これにより、第１および第２の領域としての物理ブロックは、外部からは１つの論理ブロックとして認識されるようになされている。
【００７０】
つまり、図４において、第１および第２の領域としての物理ブロックの物理ブロック番号は異なるが、いずれにも、同一の論理ブロック番号が割り当てられており、外部からは、そのような論理ブロック番号を有する論理ブロックにアクセスの要求がなされる。そして、メモリ側では、論理ブロックへのアクセスの要求があると、それに対応する物理ブロック番号のブロック、すなわち、第１および第２の領域に対してデータの読み出し処理、またはデータの書込み処理が行われる。
【００７１】
なお、以下では、物理ブロック番号および論理ブロック番号のいずれも１バイトで表されるものとする。
【００７２】
次に、上述の場合においては、１の物理ブロックのデータの書込みの終了後に、その物理ブロックの最新性情報と有効性情報が更新されるため、関連する複数ブロック分のデータを、複数の物理ブロックに書き込む場合においては、新旧混在したデータが生じることがある。
【００７３】
すなわち、外部から見た場合において、複数の論理ブロックに、複数ブロック分のデータを書き込んでいる最中にメモリコラプションが生じると、メモリコラプションが生じる前に書込みが完了した論理ブロックには、新しいデータが存在することになるが、メモリコラプションが生じた最中に書込みを行っている論理ブロック以降には、古いデータが存在することになる。
【００７４】
関連する複数ブロック分のデータが一括で意味のあるものであり、従って、それ全体で有用なものである場合においては、上述のように、その中に、新しいものと古いものとが混在すると、その整合性がとれなくなる。すなわち、関連する複数ブロック分のデータが、例えば、前述したように、乗車した駅と時刻、降車した駅と時刻、乗降車した駅間の運賃などである場合において、乗車した駅については新しいデータが書き込まれ、乗車した時刻については古いデータのままでは、その整合性がとれず、意味のないものとなる。
【００７５】
従って、複数の論理ブロックに、関連する複数ブロック分のデータが書き込まれる場合において、その複数ブロック分のデータの書込みが終了するまでにメモリコラプションが生じたときには、外部からは、論理ブロックにその関連する複数ブロック分の古いデータが存在するように認識させる必要がある。
【００７６】
[シングルポインタ方式の説明]
そこで、メモリを、例えば、図５に示すように構成する。すなわち、メモリを、データを記憶するデータ領域としての物理ブロックと、データ領域を構成する物理ブロックの物理ブロック番号を記憶する第１および第２の領域としての物理ブロックとで構成する。
【００７７】
なお、図５においても、図４における場合と同様に、１個の物理ブロック（同図における横１列）は、１１バイトで構成されている。
【００７８】
データ領域を構成する各物理ブロックは、１１バイト単位でデータを記憶するようになされており、同図の場合、データ領域は、物理ブロック番号＃００乃至＃０７それぞれが割り当てられた８個の物理ブロックで構成されている（＃は、物理ブロック番号であることを表す）。
【００７９】
また、同図の場合、第１の領域の物理ブロック番号には＃ＦＥが割り当てられており、第２の領域の物理ブロック番号には＃ＦＦが割り当てられている。
【００８０】
なお、同図のように構成されたメモリは、外部からは４個の論理ブロックが認識されるようになされており、その４個の論理ブロックそれぞれには、論理ブロック番号として％００乃至％０３が割り当てられている。なお、同図の場合、論理ブロック番号％００乃至％０３には、物理ブロック番号＃００乃至＃０３が対応付けられている。
【００８１】
同図に示された第１および第２の領域としての物理ブロックは、図４の場合と同様、その先頭の１バイトが最新性情報に、終わりの２バイトが有効性情報に、それぞれ割り当てられている。ただし、最新性情報と有効性情報との間の８バイトには、データ領域の物理ブロックの物理ブロック番号、すなわち、データ領域を構成する物理ブロックへのポインタが配置される。
【００８２】
データ領域を構成する物理ブロックへのポインタが配置される８バイトのうち、前半の４バイトには、データ領域の対象ブロックの物理ブロック番号が配置され、後半の４バイトには、データ領域の更新ブロックの物理ブロック番号が配置される。
【００８３】
ここで、対象ブロックとは、情報を書き込む場合に、本来、その書込みの対象となるべき物理ブロックを意味する。すなわち、例えば、上述した基本原理においては、ブロックＢ１に記憶されたデータを新しいデータに書き換える場合、その新しいデータをブロック１に書き込まず、ブロックＢ２に書き込むが、この場合において、本来、新しいデータを書き込むべきブロックＢ１が対象ブロックに相当する。
【００８４】
また、更新ブロックとは、ある物理ブロックに情報を書込み、その記憶内容を更新するときに用いられる更新用の物理ブロックを意味する。すなわち、例えば、上述した基本原理においては、ブロックＢ１に記憶されたデータを新しいデータに書き換える場合、その新しいデータをブロックＢ１に書き込まず、ブロックＢ２に書き込むが、この場合において、新しいデータを書き込むブロックＢ２が更新ブロックに相当する。
【００８５】
第１および第２の領域における最新性情報と有効性情報との間の８バイトのうちの前半の４バイトに配置される４個の物理ブロック番号は、論理ブロック番号と対応付けられるようになされている。すなわち、例えば、その１乃至４バイト目に配置される物理ブロック番号は、それぞれ論理ブロック番号％００乃至％０３に対応付けられている。
【００８６】
図５に示されたように構成されるメモリにおいては、関連する４ブロック分のデータが物理ブロック＃００（物理ブロック番号が＃００の物理ブロック）乃至＃０３に記憶されている。そして、その物理ブロック番号＃００乃至＃０３が、第１の領域における最新性情報と有効性情報との間の８バイトのうちの前半の４バイト（以下、適宜、データ領域の対象ブロックへのポインタの欄と称する）に、その順番で配置されている。
【００８７】
従って、例えば、第１の領域における、データ領域の対象ブロックへのポインタの欄に注目した場合、論理ブロック番号％００乃至％０３には物理ブロック番号＃００乃至０３が対応付けられている。
【００８８】
ここで、第１の領域に注目した場合においては、論理ブロック％００（論理ブロック番号が％００の論理ブロック）乃至％０３に対応付けられた物理ブロック＃００乃至＃０３のうちのいずれかが、アクセスの対象となるべきブロック、すなわち、対象ブロックとなる。
【００８９】
更新ブロックには、その時点で対象ブロックではないデータ領域の物理ブロック、すなわち、空き領域となっている物理ブロックがなり得る。従って、図５において、第１の領域に注目した場合には、物理ブロック＃０４乃至＃０７が更新ブロックとなり得るので、その第１の領域における最新性情報と有効性情報との間の８バイトのうちの後半の４バイト（以下、適宜、データ領域の更新ブロックへのポインタの欄と称する）には、それらの更新ブロックの物理ブロック番号＃０４乃至＃０７が配置されている。
【００９０】
ここで、例えば、第１または第２の領域のうちの第１の領域のみが有効であるとして、外部から、論理ブロック番号％００と％０２に対応する論理ブロックそれぞれに、関連する２ブロック分のデータの書込みの要求があったとする。
【００９１】
この場合、有効である第１の領域のうちの、データ領域の対象ブロックへのポインタの欄を参照することにより、論理ブロック番号％００と％０２に対応する物理ブロック番号として＃００と＃０２が認識される。そして、物理ブロック＃００および＃０２が、関連する２ブロック分のデータそれぞれを書き込むべき対象ブロックとして認識される。
【００９２】
さらに、第１の領域のうちの、データ領域の更新ブロックへのポインタの欄を参照することで、全ての更新ブロックの物理ブロック番号が認識される。いまの場合、物理ブロック番号＃０４，＃０５，＃０６，＃０７が認識される。そして、更新ブロックとして認識された全ての物理ブロック番号にそれぞれ対応する物理ブロック（いまの場合、物理ブロック＃０４，＃０５，＃０６，＃０７）が一括して消去される。なお、複数の物理ブロックを一括して消去するための要する時間は、１個の物理ブロックを消去するための要する時間と同等である。
【００９３】
この後、対象ブロックの数（いまの場合、２）と同数の更新ブロックの物理ブロック番号が、例えば、データ領域の更新ブロックへのポインタの欄の左から配置されているものから順番に認識され、本来ならば、対象ブロックである物理ブロック＃００または＃０２に書き込むべき２ブロック分のデータが、図６に示すように、更新ブロックである物理ブロック＃０４または＃０５それぞれに書き込まれる。
【００９４】
このように、全ての更新ブロックとされた物理ブロックを一括して消去することにより、物理ブロックにデータを書込み毎に、その都度、物理ブロックのデータを消去する場合に比較して、処理時間を短縮することができる。
【００９５】
ここで、図６は、論理ブロック番号％００と％０２に対応する物理ブロック番号＃００と＃０２に書き込むべき２つのデータが、それぞれ４０，４１，・・・，４Ａと５０，５１，・・・，５Ａであったとして、これらが、更新ブロックである物理ブロック＃０４と＃０５それぞれに書き込まれた状態を示している。
【００９６】
物理ブロック＃０４と＃０５それぞれにデータ書き込まれた後、更新ブロックであった物理ブロックのブロック番号＃０４と＃０５とが、これまで無効であった第２の領域におけるデータ領域の対象ブロックへのポインタの欄に書き込まれる。すなわち、第１の領域におけるデータ領域の対象ブロックへのポインタの欄の記載＃００，＃０１，＃０２，＃０３が第２の領域にコピーされ、このうち、対象ブロックの物理ブロック番号＃００と＃０２が、同図に示すように、実際にデータが書き込まれた更新ブロックの物理ブロック番号＃０４と＃０５にそれぞれ書き換えられる。
【００９７】
この結果、第２の領域に注目した場合、論理ブロック番号％００が物理ブロック番号＃０４に対応付けられ、論理ブロック番号％０２が物理ブロック番号＃０２に対応付けられたことがわかる。
【００９８】
また、データを書き込むべきであった物理ブロック＃００と＃０２は更新ブロックとされ、その物理ブロック番号＃００と＃０２が、第２の領域におけるデータ領域の更新ブロックへのポインタの欄に書き込まれる。すなわち、第１の領域におけるデータ領域の更新ブロックへのポインタの欄の記載＃０４，＃０５，＃０６，＃０７が、第２の領域にコピーされ、このうち、データが書き込まれた物理ブロックの物理ブロック番号＃０４と＃０５が、同図に示すように、対象ブロックの物理ブロック番号＃００と＃０２にそれぞれ書き換えられる。
【００９９】
この結果、第２の領域に注目した場合、物理ブロック＃００および＃０２が新たに更新ブロックとされたことがわかる。
【０１００】
以上のようにして、第２の領域の、データ領域の対象ブロックへのポインタと、データ領域の更新ブロックへのポインタが更新された後、その第２の領域における最新性情報と有効性情報とが順次書き込まれ（書き換えられ）、その後、第１の領域のデータが全て消去される。
【０１０１】
従って、この場合、第２の領域について、データ領域の対象ブロックへのポインタの欄の書込みが終了しないと、有効である旨の有効性情報は書き込まれない。すなわち、上述の場合においては、２つの論理ブロック％００と％０２へのデータの書込みが両方とも終了しなければ、第２の領域には、有効である旨の有効性情報は書き込まれない。
【０１０２】
その結果、２つの論理ブロック％００と％０２へのデータの書込みが行われている間にメモリコラプションが生じた場合には、第１の領域のみが有効な状態となったままになり、論理ブロック％００と％０２からは、有効である第１の領域を参照することで、その論理ブロック％００と％０２にそれぞれ対応付けられている物理ブロック＃００と＃０２に記憶されている古いデータが読み出されることになる。
【０１０３】
一方、２つの論理ブロック％００と％０２へのデータの書込みが終了し、第２の領域における最新性情報と有効性情報の更新が行われ、第１の領域のデータが全て消去された場合には、論理ブロック％００と％０２からは、唯一有効である第２の領域を参照することで、その論理ブロック％００と％０２にそれぞれ対応付けられている物理ブロック＃０４と＃０５に記憶されている新しいデータが読み出されることになる。
【０１０４】
従って、この場合、論理ブロック％００と％０２に記憶される、複数のデータとしての２つデータが関連性を有するものであるときには、メモリコラプションが生じても、個々のデータの整合性とともに、その２つのデータの間の整合性を維持することが可能となる。
【０１０５】
なお、図５および図６を参照して上述したメモリに対する読み書き方式は、データ領域への１段階のポインタを利用したものなので、以下、適宜、シングルポインタ方式と称する。
【０１０６】
ところで、図５および図６に示されたシングルポインタ方式では、データ領域の対象ブロックへのポインタの欄として、４つの物理ブロック番号を記載できるようになされている。また、データ領域の更新ブロックへのポインタの欄も、データ領域の対象ブロックへのポインタの欄と同様に、４つの物理ブロック番号を記載できるようになされている。これにより、最大４ブロック分のデータの整合性を維持することができる。
【０１０７】
しかしながら、逆に言えば、図５および図６に示されたシングルポインタ方式では、４ブロックよりも多いブロック分の整合性の維持を図ることは困難である。
【０１０８】
すなわち、図５および図６に示されたシングルポインタ方式では、データの整合性を維持することができるブロックの数が、データ領域の対象ブロックへのポインタのブロックの数に制限されてしまう。
【０１０９】
[ダブルポインタ方式の説明]
そこで、データの整合性を維持することができるブロック数の制限を解除するため、メモリの構成を、例えば図７に示すように拡張する。
【０１１０】
すなわち、ここでは、メモリを、データを記憶するデータ領域としての物理ブロック＃００乃至＃１７と、データ領域を構成する物理ブロックへのポインタとしての、そのブロック番号を記憶するポインタ領域としての物理ブロック＃１８乃至＃１Ｄと、ポインタ領域を構成する物理ブロックへのポインタとしての、そのブロック番号を記憶する第１および第２の領域としての物理ブロック＃１Ｅおよび＃１Ｆとで構成する。
【０１１１】
なお、図７では、図示の都合上、１つの物理ブロックを８バイトで構成している。
【０１１２】
データ領域を構成する各物理ブロックは、８バイト単位でデータを記憶するようになされており、図７においては、データ領域は、物理ブロック番号として＃００乃至＃１７それぞれが割り当てられた２４個の物理ブロックで構成されている。
【０１１３】
なお、外部からは、１６個の論理ブロックが認識されるようになされており、その１６個の論理ブロックそれぞれには、論理ブロック番号として％００乃至％０Ｆが割り当てられている。
【０１１４】
ただし、説明の都合上、データ領域を構成する物理ブロックの数（２４個）と同数だけ論理ブロックが存在するものとし、外部から論理ブロックとして認識される物理ブロック以外の８個の物理ブロックそれぞれに、論理ブロック番号として％１０乃至％１７を仮に割り当てておく。図７の例では、論理ブロック番号％００乃至％１７と、物理ブロック番号＃００乃至＃１７とがそれぞれ対応付けられている。
【０１１５】
ポインタ領域（ブロック番号領域）を構成する各物理ブロックは、８バイト単位でデータ領域を構成する物理ブロックへのポインタとして、その物理ブロック番号を記憶する。図７の場合、ポインタ領域は、物理ブロック番号として＃１８乃至＃１Ｄそれぞれが割り当てられた６個の物理ブロックで構成されている。ここでは、ポインタ領域を構成する各物理ブロックは、８バイト単位で物理ブロック番号を記憶するようになされており、物理ブロック番号は１バイトで表されるので、１個の物理ブロックには、８個の物理ブロック番号が記憶される。
【０１１６】
ポインタ領域の各物理ブロックに配置される８個の物理ブロック番号は、論理ブロック番号と対応付けられる。すなわち、その１乃至８バイト目に配置される物理ブロック番号は、ある論理ブロック番号（後述するように、％００，％０８、または％１０）を基準として０乃至７だけオフセットした論理ブロック番号に対応付けられる。
【０１１７】
第１および第２の領域としてのブロックは、その先頭の１バイトが最新性情報に割り当てられ、終わりの１バイトが有効性情報に割り当てられている。そして、最新性情報と有効性情報との間の６バイトには、ポインタ領域の物理ブロックへのポインタとしての、その物理ブロック番号が配置されている。
【０１１８】
第１および第２の領域における最新性情報と有効性情報との間の６バイトのうち、前半の３バイト（以下、適宜、ポインタ領域の対象ブロックへのポインタの欄と称する）には、ポインタ領域の対象ブロックの物理ブロック番号が配置され、その後半の３バイト（以下、適宜、ポインタ領域の更新ブロックへのポインタの欄と称する）には、ポインタ領域の更新ブロックの物理ブロック番号が配置される。
【０１１９】
第１および第２の領域におけるポインタ領域の対象ブロックへのポインタの欄に配置される３つの物理ブロック番号に対応するポインタ領域の物理ブロックが記憶している物理ブロック番号は、論理ブロック番号と対応付けられている。すなわち、例えば、その１乃至３バイト目に配置される物理ブロック番号に対応するポインタ領域の物理ブロックが記憶している物理ブロック番号は、それぞれ論理ブロック番号％００乃至％０７、％０８乃至％０Ｆ、または％１０乃至％１７に対応付けられている。
【０１２０】
具体的には、図７の場合、第１の領域においては、ポインタ領域の対象ブロックへのポインタの欄における１バイト目の物理ブロック番号＃１８が指しているポインタ領域の物理ブロック＃１８の１乃至８バイト目に配置された物理ブロック番号＃００乃至＃０７は、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄における１バイト目に対応する論理ブロック番号％００乃至％０７にそれぞれ対応付けられる。
【０１２１】
また、ポインタ領域の対象ブロックへのポインタの欄における２バイト目の物理ブロック番号＃１９が指しているポインタ領域の物理ブロック＃１９の１乃至８バイト目に配置された物理ブロック番号＃０８乃至＃０Ｆは、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄における２バイト目に対応付けられた論理ブロック番号％０８乃至％０Ｆにそれぞれ対応付けられる。
【０１２２】
同様に、ポインタ領域の対象ブロックへのポインタの欄における３バイト目の物理ブロック番号＃１Ａが指すポインタ領域の物理ブロック＃１Ａの１乃至８バイト目に配置された物理ブロック番号＃１０乃至＃１７は、論理ブロック番号％１０乃至％１７にそれぞれ対応付けられる。
【０１２３】
以上のように構成されるメモリにおいて、例えば、第１の領域に注目した場合には、ポインタ領域の対象ブロックへのポインタの欄に記述された物理ブロック番号に対応する物理ブロックが、アクセス対象となるべきポインタ領域の対象ブロックとなる。
【０１２４】
従って、図７の場合、ポインタ領域の物理ブロック＃１８乃至＃１Ａがポインタ領域の対象ブロックとなっており、残りの物理ブロック＃１Ｂ乃至＃１Ｄが、ポインタ領域の更新のための更新ブロックとなっている。これにより、その物理ブロック番号＃１Ｂ乃至＃１Ｄが、第１の領域におけるポインタ領域の更新ブロックへのポインタの欄に記述されている。
【０１２５】
さらに、ポインタ領域の対象ブロックに記述された物理ブロック番号に対応する、データ領域の物理ブロックのうち、例えば、論理ブロック％００乃至％０Ｆに対応するものがデータ領域の対象ブロックとされている。いまの場合、論理ブロック％００乃至％０Ｆに対応する物理ブロック＃００乃至＃０Ｆがデータ領域の対象ブロックとなり、データ領域の残りの物理ブロック（論理ブロック％１０乃至％１７に対応する物理ブロック）＃１０乃至＃１７が、データ領域の更新のための更新ブロックとなっている。
【０１２６】
ここで、上述したように、ポインタ領域の更新ブロックは、その物理ブロック番号が、第１または第２の領域の、ポインタ領域の更新ブロックへのポインタの欄に記述されているので、その欄を参照することで認識することができる。一方、データ領域の更新ブロックは、論理ブロック％１０乃至％１７に対応する物理ブロックであるから、ポインタ領域の対象ブロックへのポインタの欄の３バイト目に記述されている物理ブロック番号に対応するポインタ領域の物理ブロックを参照することで、そこに記述されている物理ブロック番号から認識することができる。
【０１２７】
いま、第１または第２の領域のうち、第１の領域のみが有効であると仮定し、外部から、例えば、論理ブロック番号％００と％０２に対応する物理ブロックそれぞれに、関連する２ブロック分のデータの書込みの要求があったとする。
【０１２８】
この場合、有効である第１の領域の、ポインタ領域の対象ブロックへのポインタの欄を参照し、さらに、そこに記述されている物理ブロック番号に対応する物理ブロックを参照することで、関連する２ブロック分のデータを書き込むべきデータ領域の物理ブロックである対象ブロックが認識される。この後、データ領域の更新ブロックが認識される。
【０１２９】
具体的には、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄の１バイト目を参照することで、論理ブロック％００と％０２に対応するデータ領域の物理ブロックの物理ブロック番号が記述された、ポインタ領域の物理ブロック＃１８を認識することができる。そして、その物理ブロック＃１８の１バイト目と３バイト目を参照することで、論理ブロック％００と％０２に対応するデータ領域の物理ブロック（対象ブロック）の物理ブロック番号＃００と＃０２をそれぞれ認識することができる。
【０１３０】
さらに、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄の３バイト目を参照することで、データ領域の更新ブロックとなる論理ブロック％１０乃至％１７に対応する物理ブロックの物理ブロック番号が記述された、ポインタ領域の物理ブロック＃１Ａを認識することができる。
【０１３１】
そして、その物理ブロック＃１Ａを参照することで、データ領域の更新ブロックとなっている全ての物理ブロックの物理ブロック番号＃１０乃至＃１７を認識することができ、更新ブロックとされた全ての物理ブロック＃１０乃至＃１７が一括して消去される。なお、複数の物理ブロックを一括して消去するための要する時間は、１個の物理ブロックを消去するための要する時間と同等である。
【０１３２】
この後、一括消去されたデータ領域の全ての更新ブロックのうち、データの書込み対象である、データ領域の対象ブロックの数と同数の物理ブロック番号が、物理ブロック＃１Ａの、例えば左から順次参照されて、データを書き込む更新ブロックとして認識され。いまの場合、物理ブロック番号＃１０と＃１１に対応する、データ領域の物理ブロック＃１０および＃１１がデータを書き込む更新ブロックとされる。
【０１３３】
そして、本来ならば、論理ブロック％００と％０２に対応する、データ領域の対象ブロックである物理ブロック＃００と＃０２に書き込むべき２つのデータが、図８に示すように、データ領域の更新ブロックである物理ブロック＃１０と＃１１に書き込まれる。
【０１３４】
すなわち、図８は、論理ブロック番号％００と％０２に対応する物理ブロック番号＃００と＃０２に書き込むべき２つのデータが、００，００，００，００，００，００，００，００と０２，０２，０２，０２，０２，０２，０２，０２であったとして、それらが、データ領域の更新ブロックである物理ブロック＃１０と＃１１それぞれに書き込まれた状態を示している。
【０１３５】
以上のようにして、データ領域の更新ブロックである物理ブロック＃１０と＃１１にデータを書き込んだ後、その物理ブロック番号＃１０と＃１１が、ポインタ領域の更新ブロックに書き込まれるとともに、本来ならばデータが書き込まれたはずであったデータ領域の物理ブロック（対象ブロック）の物理ブロック番号＃００および＃０２が、ポインタ領域の、他の更新ブロックに書き込まれる。
【０１３６】
すなわち、まず、第１の領域の、ポインタ領域の更新ブロックへのポインタの欄を参照することで、ポインタ領域の更新ブロックが認識される。なお、ここでは、ポインタ領域の更新ブロックとして、ポインタ領域の対象ブロックのうち、上述のようなデータ領域への書込みに伴って変更（更新）する必要のある対象ブロックの数と同数の物理ブロックが、ポインタ領域の更新ブロックへのポインタの欄を、例えば左から順次参照することで認識される。
【０１３７】
従って、いまの場合、本来、データが書き込まれるべき物理ブロック（データ領域の対象ブロック）の物理ブロック番号＃００と＃０２が記憶されている、ポインタ領域の物理ブロック＃１８、および実際にデータが書き込まれた物理ブロックの物理ブロック番号＃１０と＃１１が記憶されている、ポインタ領域の物理ブロック＃１Ａの２個の物理ブロックを変更する必要があるので、第１の領域の、ポインタ領域の更新ブロックへのポインタの欄が左から２バイト分だけ参照され、物理ブロック＃１Ｂと＃１Ｃが更新ブロックとして認識される。
【０１３８】
そして、認識されたポインタ領域の更新ブロック＃１Ｂまたは＃１Ｃのうち、一方の更新ブロック＃１Ｂには、データ領域の対象ブロックの物理ブロック番号＃００と＃０２が記憶されている、ポインタ領域の物理ブロック＃１８の記憶内容がコピーされ、そのうちの、データ領域の対象ブロックの物理ブロック番号＃００と＃０２が、実際にデータが書き込まれたデータ領域の更新ブロックの物理ブロック番号＃１０と＃１１に書き換えられる。
【０１３９】
また、認識されたポインタ領域の更新ブロック＃１Ｂまたは＃１Ｃのうち、他方の更新ブロック＃１Ｃには、実際にデータが書き込まれた物理ブロックの物理ブロック番号＃１０と＃１１が記憶されている、ポインタ領域の物理ブロック＃１Ａの記憶内容がコピーされ、その物理ブロック番号＃１０と＃１１が、本来、データが書き込まれるべき物理ブロックの物理ブロック番号（データ領域の対象ブロック）＃００と＃０２に書き換えられる。
【０１４０】
この後、物理ブロック番号が更新されたポインタ領域の更新ブロックであった物理ブロックのブロック番号＃１Ｂと＃１Ｃが、有効でなかった第２の領域におけるポインタ領域の対象ブロックへのポインタの欄に書き込まれる。すなわち、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄が、第２の領域にコピーされ、そのうちの、論理アドレス％００乃至％０７に対応する１バイト目が、ポインタ領域の物理ブロックの物理ブロック番号＃１Ｂに書き換えられるとともに、論理アドレス％１０乃至％１７に対応する３バイト目が、ポインタ領域の物理ブロックの物理ブロック番号＃１Ｃに書き換えられる。
【０１４１】
この結果、第２の領域に注目すると、物理ブロック＃１Ｂ，＃１９、および＃１Ｃが、ポインタ領域の対象ブロックとなり、これにより、データ領域の更新ブロックであった物理ブロック＃１０と＃１１が、データ領域の対象ブロックであった物理ブロック＃００と＃０２が対応付けられていた論理ブロック番号％００と％０２に新たに対応付けられる。さらに、データ領域の対象ブロックであった物理ブロック＃００と＃０２は、論理ブロック％１０と％１１に対応付けられて更新ブロックとされる。
【０１４２】
すなわち、第２の領域の、ポインタ領域の対象ブロックへのポインタの欄の１バイト目を参照すると、論理ブロック％００と％０２に対応するデータ領域の物理ブロックの物理ブロック番号が記述された、ポインタ領域の物理ブロックは、物理ブロック＃１Ｂということになる。さらに、その物理ブロック＃１Ｂの１バイト目と３バイト目を参照すると、論理ブロック％００と％０２に対応するデータ領域の物理ブロックは、それぞれ物理ブロック＃１０と＃１１ということになる。
【０１４３】
また、第２の領域の、ポインタ領域の対象ブロックへのポインタの欄の３バイト目を参照すると、論理ブロック％１０と％１１に対応するデータ領域の物理ブロックの物理ブロック番号が記述された、ポインタ領域の物理ブロックは、物理ブロック＃１Ｃということになり、さらに、その物理ブロック＃１Ｃの１バイト目と２バイト目を参照すると、論理ブロック％１０と％１１に対応するデータ領域の物理ブロック、つまりデータ領域の更新ブロックは、物理ブロック＃００と＃０２ということになる。
【０１４４】
さらに、ポインタ領域のうちの、本来、データが書き込まれるべき物理ブロックの物理ブロック番号＃００と＃０２が記憶されていた物理ブロックの物理ブロック番号＃１８、および実際にデータが書き込まれた物理ブロックの物理ブロック番号＃１０と＃１１が記憶されていた物理ブロックの物理ブロック番号＃１Ａが、有効でなかった第２の領域におけるポインタ領域の更新ブロックへのポインタの欄に書き込まれる。
【０１４５】
すなわち、第１の領域におけるポインタ領域の更新ブロックへのポインタの欄が、第２の領域にコピーされ、そのうちの、記憶内容の更新がされたポインタ領域の物理ブロックの物理ブロック番号＃１Ｂまたは＃１Ｃが、図８に示すように、論理アドレス％００乃至％０７に対応していた物理ブロック番号が記憶された物理ブロック番号＃１８、または論理アドレス％１０乃至％１７に対応していた物理ブロック番号が記憶された物理ブロック番号＃１Ａに、それぞれ書き換えられる。
【０１４６】
この結果、第２の領域に注目した場合には、物理ブロック＃１８，＃１Ａ、および＃１Ｄが、ポインタ領域の更新ブロックとなる。
【０１４７】
以上のようにして、第２の領域を更新した後は、シングルポインタ方式における場合と同様に、その第２の領域における最新性情報と有効性情報とが順次書き込まれる。
【０１４８】
そして、その第２の領域における最新性情報と有効性情報とが書き込まれた後に、第１の領域のデータが消去される。
【０１４９】
従って、この場合、データ領域、さらにはポインタ領域の書込みが終了しないと、有効である旨の有効性情報は書き込まれない。すなわち、上述の場合においては、２つの論理ブロック％００と％０２へのデータの書込みが終了しなければ、第２の領域には、有効である旨の有効性情報は書き込まれない。
【０１５０】
その結果、２つの論理ブロック％００と％０２へのデータの書込みが行われている間にメモリコラプションが生じた場合には、第１の領域のみが有効な状態となったままになり、論理ブロック％００と％０２からは、有効である第１の領域を参照することで、その論理ブロック％００と％０２にそれぞれ対応付けられている物理ブロック＃００と＃０２に記憶されている古いデータが読み出されることになる。
【０１５１】
一方、２つの論理ブロック％００と％０２へのデータの書込みが終了し、第２の領域における最新性情報と有効性情報の更新が行われた場合には、論理ブロック％００と％０２からは、有効であって、且つ、最新である第２の領域を参照することで、その論理ブロック％００と％０２にそれぞれ対応付けられている物理ブロック＃１０と＃１１に記憶されている新しいデータが読み出されることになる。
【０１５２】
従って、この場合、論理ブロック％００と％０２に記憶される、複数のデータとしての２つデータが関連性を有するものであるときには、メモリコラプションが生じても、シングルポインタ方式における場合と同様に、その２つのデータの間の整合性を維持することが可能となる。
【０１５３】
さらに、第１および第２の領域におけるポインタ領域の対象ブロックへのポインタの欄には、ポインタ領域の物理ブロックの３ブロック分の物理ブロック番号を記憶させることができる。また、ポインタ領域の１個の物理ブロックには、データ領域の物理ブロックの８ブロック分の物理ブロック番号を記憶させることができる。
【０１５４】
したがって、最大で、データ領域の２４（＝３×８）個の物理ブロックを管理することができ、そのうちの最大で半分の１２ブロックをデータ領域の更新ブロックとすることができる。すなわち、シングルポインタ方式よりも多いブロック数のデータの整合性を維持することができる。
【０１５５】
なお、図７および図８では、２４ブロックのうちの８ブロックを更新ブロックとしてあり、８ブロック分のデータの整合性を維持することができる。
【０１５６】
図７および図８を参照して上述したメモリに対する読み書き方式は、データ領域への、いわば２段階のポインタを利用したものであるので、以下、適宜、ダブルポインタ方式と称する。
【０１５７】
次に、ダブルポインタ方式によるデータの読み書き処理について、図９および図１０を参照してさらに説明する。
【０１５８】
[ダブルポインタ方式の読み出し処理]
図９は、読み出し処理を説明するフローチャートである。
【０１５９】
ステップＳ６１において、第１および第２の領域の有効性情報を参照することで、その有効性が判定される。ここで、第１の領域としてのブロックのみが有効であると判定された場合、処理はステップＳ６２に進められる。反対に、第２の領域としてのブロックのみが有効であると判定された場合、処理はステップＳ６５に進められる。なお、第１および第２の領域としてのブロックの両方が無効であると判定された場合、ＩＣカード２のハードウェアとしての寿命（致命的エラー）であるので、読み出しは行われずに処理は終了される（エラー処理が行われる）。
【０１６０】
第１の領域としてのブロックのみが有効であって、処理がステップＳ６２に進むと、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄を参照することで、読み出すべきデータの論理ブロック番号に対応する物理ブロック番号が記憶されている、ポインタ領域の物理ブロックの物理ブロック番号（ポインタ）が認識される。
【０１６１】
例えば、図７で説明したようにメモリが構成される場合において、読み出すべきデータの論理ブロック番号が％００乃至％０７のときには、ポインタ領域の対象ブロックへのポインタの欄の１バイト目に記憶されている物理ブロック番号＃１８が認識される。また例えば、読み出すべきデータの論理ブロック番号が％０８乃至％０Ｆのときには、ポインタ領域の対象ブロックへのポインタの欄の２バイト目に記憶されている物理ブロック番号＃１９が認識される。
【０１６２】
ステップＳ６３においては、ステップＳ６２で認識された物理ブロック番号に対応するポインタ領域の物理ブロックを参照することで、読み出すべきデータの論理ブロック番号に対応する物理ブロック番号が認識される。
【０１６３】
すなわち、読み出すべきデータの論理ブロック番号が、ある基準値（図７の場合においては、％００または％０８）から０乃至７だけオフセットした値である場合には、ステップＳ６２で認識された物理ブロック番号に対応する物理ブロックの左から、そのオフセット分だけずれた位置に記憶された物理ブロック番号が、読み出すべきデータの論理ブロック番号に対応する物理ブロック番号として認識される。
【０１６４】
ステップＳ６４においては、ステップＳ６３で認識された物理ブロック番号に対応する物理ブロックからデータが読み出されて、この読み出し処理が終了される。
【０１６５】
一方、第２の領域としてのブロックのみが有効であって、処理がステップＳ６５に進むと、第２の領域におけるポインタ領域の対象ブロックへのポインタの欄を参照することで、読み２出すべきデータの論理ブロック番号に対応する物理ブロック番号が記憶されている、ポインタ領域の物理ブロックの物理ブロック番号（ポインタ）が認識される。
【０１６６】
例えば、図８で説明したようにメモリが構成される場合において、読み出すべきデータの論理ブロック番号が％００乃至％０７のときには、ポインタ領域の対象ブロックへのポインタの欄の１バイト目に記憶されている物理ブロック番号＃１Ｂが認識される。また例えば、読み出すべきデータの論理ブロック番号が％０８乃至％０Ｆのときには、ポインタ領域の対象ブロックへのポインタの欄の２バイト目に記憶されている物理ブロック番号＃１９が認識される。
【０１６７】
ステップＳ６６においては、ステップＳ６５で認識された物理ブロック番号に対応するポインタ領域の物理ブロックを参照することで、読み出すべきデータの論理ブロック番号に対応する物理ブロック番号が認識される。
【０１６８】
すなわち、読み出すべきデータの論理ブロック番号が、ある基準値（図８の場合においては、％００または％０８）から０乃至７だけオフセットした値である場合には、ステップＳ６５で認識された物理ブロック番号に対応する物理ブロックの左から、そのオフセット分だけずれた位置に記憶された物理ブロック番号が、読み出すべきデータの論理ブロック番号に対応する物理ブロック番号として認識される。
【０１６９】
ステップＳ６７においては、ステップＳ６６で認識された物理ブロック番号に対応する物理ブロックからデータが読み出されて、この読み出し処理が終了される。
【０１７０】
[ダブルポインタ方式の書込み処理]
次に、図１０は、書込み処理を説明するフローチャートである。
【０１７１】
ステップＳ３１において、第１および第２の領域の有効性情報を参照することで、その有効性が判定される。ここで、第１の領域としてのブロックのみが有効であると判定された場合、処理はステップＳ３２に進められる。反対に、第２の領域としてのブロックのみが有効であると判定された場合、処理はステップＳ４０に進められる。なお、第１および第２の領域としてのブロックの両方が無効であると判定された場合、ＩＣカード２のハードウェアとしての寿命（致命的エラー）であるので、書込みは行われずに処理は終了される（エラー処理が行われる）。
【０１７２】
第１の領域のみが有効であって、処理がステップＳ３２に進むと、有効ではない第２の領域のデータが消去されているか否かが判定される。消去されていないと判定された場合、処理はステップＳ５０に進められ、有効ではない第２の領域のデータが消去された後、処理がステップＳ３３に進められる。反対に、消去されていると判定された場合、ステップＳ５０はスキップされて、処理はステップＳ３３に進められる。
【０１７３】
ステップＳ３３においては、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄が参照され、更新ブロックとすることができるデータ領域の物理ブロックの物理ブロック番号が記憶されたポインタ領域の物理ブロックの物理ブロック番号が認識される。すなわち、例えば、図７に示したようにメモリが構成される場合においては、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄の３バイト目に記憶された物理ブロック番号＃１Ａが認識される。
【０１７４】
ステップＳ３４では、ステップＳ３３で認識された物理ブロック番号に対応する物理ブロック（図７の場合、物理ブロック＃１Ａ）に記憶された、データ領域の全ての更新ブロックの物理ブロック番号が参照されて、データ領域の更新ブロックとして認識される。
【０１７５】
図７の場合、物理ブロック＃１Ａに記録されている、物理ブロック番号＃１Ａ，＃１１，＃１２，＃１３，＃１４，＃１５，＃１６，＃１７がデータ領域の更新ブロックとして認識される。
【０１７６】
ステップＳ３５において、データ領域の更新ブロックとして認識された全ての物理ブロックにそれぞれ記録されているデータが一括して消去される。ここで、データを一括して消去することにより、物理ブロックにデータを書込み毎に、その都度、物理ブロックのデータを消去する場合に比較して、処理時間を短縮することができる。
【０１７７】
この後、ステップＳ３６において、外部などから供給された、書き込むべきデータが、データが一括消去された後のデータ領域の更新ブロックに書き込まれる。
【０１７８】
なお、外部から、複数の論理ブロックに書き込むデータが供給された場合には、ステップＳ３４で認識された物理ブロックに対し、例えば、左から右方向に順次データを書き込むようにする。
【０１７９】
この後、処理はステップＳ３７に進められ、データの書込みの対象とした論理ブロックの論理ブロック番号が対応付けられていた物理ブロック番号を記憶していた物理ブロックが、その一部が更新された状態でポインタ領域の更新ブロックにコピーされる。
【０１８０】
すなわち、例えば、図７および図８で説明した場合においては、データの書込みの対象とした論理ブロックの論理ブロック番号％００，％０２が対応付けられていた物理ブロック番号＃００，＃０２を記憶していた物理ブロック＃１８が、記憶している物理ブロック番号＃００，＃０２がそれぞれ＃１０，＃１１に更新された状態で、ポインタ領域の更新ブロック＃１Ｂにコピーされる。
【０１８１】
さらに、ステップＳ３７では、データ領域の更新ブロックへのポインタ（データ領域の更新ブロックの物理ブロック番号）を記憶している物理ブロックが、その一部が更新された状態でポインタ領域の更新ブロックにコピーされる。
【０１８２】
すなわち、例えば、図７および図８で説明した場合においては、データ領域の更新ブロックの物理ブロック番号＃１０乃至＃１７を記憶している物理ブロック＃１Ａが、記憶している物理ブロック番号＃１０，＃１１がそれぞれ＃００，＃０２に更新された状態で、ポインタ領域の更新ブロック＃１Ｃにコピーされる。
【０１８３】
そして、ステップＳ３８に進み、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄、およびポインタ領域の更新ブロックへのポインタの欄が更新され、さらに、その最新性情報および有効性情報を更新したものが、第２の領域にコピーされる。
【０１８４】
すなわち、例えば、図７および図８の場合を例にすれば、第１の領域におけるポインタ領域の対象ブロックへのポインタの欄については、外部から供給されたデータを書き込む論理ブロックに対応付けられていたデータ領域の物理ブロック＃００，＃０２へのポインタのポインタとなっている１バイト目に記憶されていた物理ブロック番号＃１８が、実際にデータを書き込んだデータ領域の物理ブロック＃１０，＃１１へのポインタのポインタである物理ブロック番号＃１Ｂに更新される。
【０１８５】
また、実際にデータを書き込んだデータ領域の物理ブロック＃１０，＃１１へのポインタのポインタとなっていた物理ブロック番号＃１Ａが、データを書き込む論理ブロックに対応付けられていたデータ領域の物理ブロック＃００，＃０２へのポインタのポインタとなった物理ブロック番号＃１Ｃに更新される。
【０１８６】
さらに、第１の領域におけるポインタ領域の更新ブロックへのポインタの欄については、物理ブロック番号の更新されたポインタ領域の物理ブロック（更新ブロックであった物理ブロック）の物理ブロック番号＃１Ｂ，＃１Ｃが、ポインタ領域の更新ブロックとなった物理ブロックの物理ブロック番号＃１８，＃１Ａにそれぞれ更新される。
【０１８７】
またさらに、第１の領域における最新性情報および有効性情報が更新され、以上の更新結果が、第２の領域に書き込まれる。
【０１８８】
この後、処理はステップＳ３９に進み、第１の領域の全てのデータが消去されて、書込み処理が終了される。
【０１８９】
一方、ステップＳ３１において、第２の領域が有効と判断された場合は、ステップＳ４０乃至Ｓ４７，Ｓ５２において、第１または第２の領域についての処理が、逆に第２または第１の領域についてそれぞれ行われることを除けば、ステップＳ３２乃至Ｓ３９，Ｓ５０における場合とそれぞれ同様の処理が行われて、書込み処理が終了される。
【０１９０】
なお、上述した処理のうち、ステップＳ３１乃至Ｓ３５，Ｓ５０の処理、およびステップＳ３１，Ｓ４０乃至Ｓ４３，Ｓ５２の処理（以下、コマンド非依存の処理と称する）については、書込みコマンドの有無に拘わらず、予め実行しておくことが可能である。
【０１９１】
そこで、例えば、Ｒ／Ｗ１２からポーリングを受けた直後にコマンド非依存の処理を実行しておけば、実際に書込みコマンドが指示された場合、書込み処理に要する処理時間を短縮することができる。
【０１９２】
ところで、メモリコラプションが発生している場合、ステップＳ３１では、第１の領域と第２の領域の両方が有効と判定され、この場合、処理はステップＳ４８に進められる。
【０１９３】
ステップＳ４８においては、第１の領域と第２の領域との最新性が判定される。ここで、第１の領域の方が第２の領域より新しいと判定された場合、処理はステップＳ４９に進められ、第２の領域よりも新しい第１の領域としてのブロックに、第２の領域の中のポインタ領域へのポインタが上書きされる。さらに、第１の領域の最新性情報および有効性情報が更新される。この後、処理はステップＳ５０に進められて、それ以降、上述した場合と同様の処理が行われる。
【０１９４】
反対に、第２の領域の方が第１の領域より新しいと判定された場合、処理はステップＳ８９に進められ、第１の領域よりも新しい第２の領域としてのブロックに、第１の領域の中のポインタ領域へのポインタが上書きされる。さらに、第２の領域の最新性情報および有効性情報が更新される。この後、処理はステップＳ５２に進められて、それ以降、上述した場合と同様の処理が行われる。
【０１９５】
以上説明した書込み処理によれば、今度においてデータを書き込む可能性があるデータ領域の全ての更新ブロックを、一括して消去するようにしたので、更新ブロックにデータを書き込む都度、消去する場合に比較して、消去に要する処理時間を短くすることができる。よって、書込み処理に要する一連の処理時間を短縮することができる。
【０１９６】
また、書込み処理のうち、コマンド非依存の処理を事前に実行するようにすれば、実際に書込みコマンドが指示されてから書込み処理を終了するまでに要する処理時間を短縮することができる。
【０１９７】
以上、本発明を非接触通信システムに適用した場合について説明したが、本発明は、EEPROMに代表されるような、データを書き込む場合、データ領域を、その書込みに先立って消去する必要のある記録媒体にデータを書き込むあらゆる装置に適用することができる。
【０１９８】
また、本発明は、特に、例えば、上述の非接触通信システムや、また、接触型であっても、ユーザがＩＣカードの抜き差しを自由に行うことができるシステムなどの、いわば、データの送受信が不安定な状態で行われるシステムについて、有用である。
【０１９９】
なお、本実施の形態では、有効判定ブロックまたはポインタ領域に、ポインタ領域またはデータ領域の、いわば空き領域としての、ポインタ領域の更新ブロックの物理ブロック番号、またはデータ領域の更新ブロックの物理ブロック番号をそれぞれ記憶させるようにした。しかしながら、これらの更新ブロックの物理ブロック番号は、必ずしも記憶させる必要はない。ただし、更新ブロックの物理ブロック番号を記憶させておかない場合には、データの書込みの際に、更新ブロックとなる物理ブロックを、EEPROM６６の記憶内容をサーチすることにより検出する必要があるため、処理の高速化などの観点からは、更新ブロックの物理ブロック番号を記憶させておくようにするのが望ましい。
【０２００】
また、本実施の形態では、EEPROM６６の所定の位置に、有効判定ブロックを記憶させる領域、ポインタ領域、およびデータ領域を割り当てるようにしたが、これらの領域を割り当てる位置は、特に限定されるものではない。さらに、これらの領域は、EEPROM６６に連続した範囲の領域として確保する必要もない。すなわち、有効判定ブロックを記憶させる領域、ポインタ領域、またはデータ領域それぞれは、EEPROM上の不連続な位置に確保することが可能である。
【０２０１】
さらに、本実施の形態では、EEPROM６６に、前回の記憶内容のみを保持しておくようにしたが、その他、例えば、前回と前々回の記憶内容を保持しておくようにすることなども可能である。ただし、この場合、より多くの記憶容量が必要となる。
【０２０２】
ところで、上述した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。
【０２０３】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであってもよいし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであってもよい。
【０２０４】
また、プログラムは、１台のコンピュータにより処理されるものであってもよいし、複数のコンピュータによって分散処理されるものであってもよい。さらに、プログラムは、遠方のコンピュータに転送されて実行されるものであってもよい。
【０２０５】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【０２０６】
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【符号の説明】
【０２０７】
１０  非接触通信システム，  １１  コントローラ，  １２  リーダ／ライタ，  １３  ＩＣカード，  ６４  演算部，  ９１  シーケンサ，  ９２  暗号／復号部，  ９３  パリティ演算部，  ６６  EEPROM
【図１】
0005633125.tif 000002
【図２】
0005633125.tif 000003
【図３】
0005633125.tif 000004
【図４】
0005633125.tif 000005
【図５】
0005633125.tif 000006
【図６】
0005633125.tif 000007
【図７】
0005633125.tif 000008
【図８】
0005633125.tif 000009
【図９】
0005633125.tif 000010
【図１０】
0005633125.tif 000011