(57)【特許請求の範囲】
【請求項１】
不揮発性メモリに格納されたデータを書き換える際、不揮発性メモリ上のデータを揮発性メモリ（ＲＡＭ）上にコピーして更新した後チェックコードを算出し、ＲＡＭ上の更新したデータとチェックコードをまとめて不揮発性メモリ上に書き込むことによりデータ書き換えを行い、不揮発性メモリの異なる領域に同じデータを格納してデータのバックアップを行う不揮発性メモリのデータ管理方法であって、
同じデータを常に二重化してもつミラー機能と、不揮発性メモリ上のデータを書き換える前にバックアップ領域にデータをコピーするバックアップ機能とをデータの長さに応じて使い分けてデータのバックアップを行うことを特徴とする不揮発性メモリのデータ管理方法。
【請求項２】
前記ミラー機能におけるデータ修正は、異なる領域に格納された一方の領域のデータに不整合が発生したとき、他方の領域のデータをＲＡＭ上にコピーした後、該ＲＡＭ上のデータを不整合が発生した領域にコピーすることにより不整合の発生したデータを修正することを特徴とする請求項１記載の不揮発性メモリのデータ管理方法。
【請求項３】
前記データはディレクトリ情報であることを特徴とする請求項２記載の不揮発性メモリのデータ管理方法。
【請求項４】
前記バックアップ機能において不揮発性メモリのデータを書き換える際、書き換え前のデータをバックアップ領域にコピーし、ＲＡＭ上の新しいデータで不揮発性メモリのデータを更新し、更新が正常に行われたことを条件にバックアップ領域を初期化することを特徴とする請求項１記載の不揮発性メモリのデータ管理方法。
【請求項５】
前記バックアップ領域が初期化されていないとき、バックアップ領域のデータにより不揮発性メモリのデータを復元することを特徴とする請求項４記載の不揮発性メモリのデータ管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＩＣカードのような携帯可能な情報処理装置に使用される不揮発性メモリを有するＩＣモジュールにおける不揮発性メモリのデータ管理方法に関する。
【０００２】
【従来の技術】
まず、ＩＣモジュールが装填される例として、ＩＣカードの機能について説明すると、図７に示すように、リーダ／ライタ１からＩＣカード２に対してコマンド（命令）を送信し、これを受信したＩＣカードは、命令を解釈して書き込み／読み出し等の処理を実行し、処理結果をレスポンスとしてリーダ／ライタ１へ返すようになっている。
【０００３】
図８に示すように、ＩＣカード２は、ＣＰＵ１１、ＲＡＭ１２、ＲＯＭ１３、不揮発性メモリ１４を有しており、ＲＯＭ１２に記憶されているプログラムをＣＰＵ１１に読み込んでリーダ／ライタ１から送信される命令をＩ／Ｏポートを通して受信すると、命令とともに送信されたデータを読み込み、不揮発性メモリ１４内に格納されているデータを読み出して処理し、データ更新してＩ／Ｏポートを通してリーダ／ライタ１に対してレスポンスを出力する。
【０００４】
ＩＣカード内の不揮発性メモリにデータを記憶させる場合には、通常、データの整合性を確認するためのチェックコードも同様にメモリ上に記憶させる。そして、データの読み出し／書き込みの前には必ずこのチェックコードとの整合性を確認し、整合がとれなかった場合には、読み出し／書き込みを中止し、メモリ上のデータに異常が発生していることをリーダ／ライタへ知らせている。
【０００５】
【発明が解決しようとする課題】
従来、新規の書き込みやデータの一部更新などデータをメモリへ書き込む際、次の２段階に処理を分割している。
▲１▼当該データを書き込む。
▲２▼書き込んだデータのチェックコードを算出して所定の位置に書き込む。
このようにメモリへのデータの書き込みを２回に分けて行っているため、処理▲１▼と処理▲２▼の間で、供給電源が断たれる等の事象が発生した場合には、データとそのチェックコードの整合性が保たれなくなる。特に、非接触式ＩＣカードの場合にはリーダ／ライタに対して電波の領域外に外れて供給電源が断たれるケースが起こる可能性が大きい。このようなデータとチェックコードの整合性が保たれていない場合は、データが信用できないため、場合によっては読み出し／書き込みを中止する。
【０００６】
本発明は上記課題を解決するためのもので、データとチェックコードの不一致というデータ破壊の確率を低く抑えるとともに、壊れる前のデータを復元できるようにすることを目的とする。
【０００７】
【課題を解決するための手段】
本発明は、図７、図８で説明したＩＣカード等に装填されるＩＣモジュールに使用される不揮発性メモリにおけるデータ管理方法であり、元のデータに上書きしてデータを記憶する際、不揮発性メモリへの書き込み回数を減らして処理速度を向上させ、データとチェックコードの不一致というデータ破壊が起こる確率を低く抑え、さらにデータの破壊を検出した際には、壊れる前のデータを復元できるようにしたものである。
【０００８】
そのためのデータ管理方法を以下に説明する。
（ａ）不揮発性メモリ上のデータを書き換える際には、揮発性メモリ（ＲＡＭ）上に不揮発性メモリ上のデータを一旦コピーし、以下の手順で処理する。
▲１▼ＲＡＭ上のデータを更新し、チェックコードを算出する。さらに、算出したチェックコードもデータとともにＲＡＭ上に格納する。
▲２▼ＲＡＭ上の更新したデータとチェックコードをまとめて不揮発性メモリ上に書き込み、データを１回の書き込み処理で更新する。
この方法によれば、データの書き込み処理が１回になるため不揮発性メモリ上のデータの更新時間は従来に比して半分になり、データ破壊の確率を低く抑えることができる。
（ｂ）不揮発性メモリの異なる領域に同じデータを格納してデータをバックアップする。データの持つ意味に応じて次のミラー機能、バックアップ機能の２通りのバックアップ方法を使い分ける。例えば、ミラー機能は常に同じデータを２つもつため長いデータに使用するとメモリ容量を多く必要とするので、比較的短いデータに適用し、バックアップ機能は長いデータに適用する。
（ｂー１）ミラー機能（同じデータを常に二重化する）
▲１▼データの整合性が確認できなかった場合、バックアップデータを利用して不整合の発生しているデータを修正する。
▲２▼データの整合性が確認できなかった場合、バックアップデータを参照する。
▲３▼上記▲１▼または▲２▼が発生している場合、データの書き換えに際しては「不整合の発生しているデータ領域→整合性のとれているデータ領域」の順で書き換えを行い、まず壊れているデータから書き換え、壊れていないデータはなるべく  書き換えずに読み出せることを優先する。
（ｂー２）バックアップ機能（メモリ上の特定作業領域を利用する）
（イ）データ書き込み方法
▲１▼不揮発性メモリ上のデータを書き換える前に不揮発性メモリの作業領域（バックアップ領域）にデータ（古いデータ）をコピーする。
▲２▼ＲＡＭ上の新しいデータをＲＡＭから不揮発性メモリ（書き込みデータ領域）にコピーしてデータを書き換える。
▲３▼不揮発性メモリの作業領域を初期化して古いデータを消去する。
（ロ）データ復元方法
▲１▼不揮発性メモリの作業領域が初期化されていない（古いデータが残っている）場合、（イ）のデータ書き込みが完了していないため、作業領域の古いデータを利用して復元する。
▲２▼不揮発性メモリの作業領域が初期化されている場合は何もしない。
（ｃ）上記（ｂ）に示したミラー機能、バックアップ機能は、それぞれの機能の有効／無効をメモリ上の設定によって使い分けられるようにする。具体的には、メモリ上に有効／無効を示すフラグ領域を設け、処理に先立ってこのフラグを参照して有効／無効を判断する。これは、ミラー機能の場合にはメモリを多く必要とし、バックアップ機能の場合は書き換え回数が多くなるので、必要に応じてこの機能を使ったり、使わなかったりできるようにするためである。
【０００９】
【発明の実施の形態】
以下、本発明の実施の形態について説明する。
図１は不揮発性メモリにおける基本的なＥＦ（Elementary File ）のデータ構造を示す図、図２は不揮発性メモリの領域構造を説明する図である。
ＩＣカード内のデータは図１に示すようなＥＦとして不揮発性メモリ上に格納される。図１に示すディレクトリ情報は、データの記憶位置（アドレス）を示すポインタＰやファイル識別子等の集まりを表し、この情報の正当性を保つブロック・チェック・コード（ＢＣＣ１）とで構成される。データは、ＩＣカードを利用したシステムがＩＣカード内に格納しておきたい場所に格納され、格納されたデータはブロック・チェック・コード（ＢＣＣ２）で正当性を保っている。
【００１０】
通常、ＩＣカードは、ＢＣＣ２に不整合が生じた場合は、上位システム（図７のリーダ／ライタ）側に「データに間違いがあるかもしれない。」という警告とともにデータを返送し、ＢＣＣ１に不整合が生じた場合は、ポインタの値も保障できないため「データが壊れている」を意味するエラーを返送する。
【００１１】
そこで、ＩＣカードの持つメモリ領域を図２に示すような構造とする。このとき、図１のディレクトリ情報を図２のPrimary 領域とSecondary 領域の２箇所に書き込み、ミラー機能を実現する。つまり、Primary 領域とSecondary 領域の２箇所に同じディレクトリ情報を格納してバックアップできるようにしておく。ディレクトリ情報は比較的短いため、このように２箇所の領域を使っても多くのメモリ容量を必要とすることはない。
【００１２】
さらに、図１のデータを図２の書き込みデータ領域に格納し、データを書き換えるときは、それに先立ってデータをバックアップ領域にコピーした後、ＲＡＭ上のデータで上書きすることにより、バックアップ機能を実現する。
【００１３】
次に、図３によりミラー機能における処理フローを説明する。この処理は、ディレクトリ情報にアクセスした際に実行される。
まず、Primary 領域のＥＦを検索し（ステップＳ１）、ＥＦがあるか否か判断する（ステップＳ２）。そして、ＥＦを発見すると、Primary にＢＣＣエラーがあるか否か判断する（ステップＳ３）。ＢＣＣエラーがなくディレクトリ情報に正当性がある場合には、それをＲＡＭ上にコピーする（ステップＳ４）。そして、ミラー機能を確認し（ステップＳ５）、ミラー機能が有効の場合、Primary の情報からSecondary のアドレスを算出し（ステップＳ６）、次いでSecondary にＢＣＣエラーがあるか否か判断する（ステップＳ７）。Secondary にＢＣＣエラーがある場合、ＲＡＭからSecondary にデータをコピーしてデータを復元する（ステップＳ８）。ステップＳ５においてミラー機能が無効の場合、ステップＳ７においてSecondary にＢＣＣエラーが無い場合、リターンし以降ＲＡＭを参照することになる。
ステップＳ３において、Primary にＢＣＣエラーが有る場合、Primary のＢＣＣエラーフラグをセットし（ステップＳ９）、ステップＳ２において、Primary のＥＦが発見できなかった場合、Primary のＢＣＣエラーフラグをクリアし（ステップＳ１０）、ミラー機能を確認する（ステップＳ１１）。ミラー機能が有効の場合、Secondary のＥＦを検索し（ステップＳ１２）、ＥＦがあるか否か判断する（ステップＳ１３）。Secondary にＢＣＣエラーが無い場合、Secondary のディレクトリ情報をＲＡＭにコピーして（ステップＳ１５）、Secondary の情報からPrimary のアドレスを算出し、ＲＡＭからPrimary にデータをコピーしてデータを復元する（ステップＳ１７）。ステップＳ１１においてミラー機能が無効の場合、ステップＳ１３においてＥＦが発見できなかった場合、ステップＳ１４においてSecondary にＢＣＣエラーが有る場合、Primary にＢＣＣエラーが有るか否か判断し（ステップＳ１８）、ＢＣＣエラーが無い場合（ステップＳ１０でフラグクリア）はＥＦが存在しないことになり、エラーがある場合はディレクトリ情報が破壊されたことになる。
【００１４】
図４はミラー機能の処理フローを示す図である。この処理は、ＲＡＭ上に更新された新しいデータがあり、これをメモリに書き込む際に行われる。
まず、ミラー機能を確認し（ステップＳ２１）、有効の場合はPrimary のＬＲＣ（Longitudinal redundancy check ）エラーがあるか否か判断する（ステップＳ２２）。エラーがなくPrimary のデータが正しい場合は、ＲＡＭ上のデータをSecondary 領域に書き込んで更新する（ステップＳ２３）。そして、Secondary 領域への書き込みエラーが有るか否か判断し（ステップＳ２４）、書き込みエラーがない場合、Secondary に正しいデータが格納されたので、Primary 領域も同じＲＡＭ上のデータで更新する（ステップＳ２５）。また、ステップＳ２１でミラー機能が無効の場合も、ＲＡＭ上のデータでPrimary 領域を更新する。さらに、Primary 領域への書き込みエラーが有るか否か判断し（ステップＳ２６）、無ければ正常終了する（ステップＳ２７）。
ステップＳ２２において、Primary にＬＲＣエラーがある場合、Primary のデータが壊れているのでＲＡＭ上のデータでPrimary 領域を更新し（ステップＳ２８）、Primary 領域への書き込みエラーが有るか否か判断する（ステップＳ２９）。書き込みエラーがなければ、Primary に正しいデータが格納されたので、Secondary 領域も同じＲＡＭ上のデータで更新する（ステップＳ３０）。そしてSecondary 領域への書き込みエラーがあるか否か判断し（ステップＳ３１）、無ければ正常終了する。また、ステップＳ２４、ステップＳ２６、ステップＳ２９、ステップＳ３１のいずれかで書き込みエラーがあった場合は異常終了となる（ステップＳ３２）。
【００１５】
図５はバックアップ機能におけるデータ書き込み方法の処理フローを示す図である。この処理は、バックアップするデータの不揮発性メモリ上のアドレスと長さは引数として与えられる。
まず、バックアップ機能を確認し（ステップＳ４１）、有効である場合、保存するデータの先頭アドレスと長さをＲＡＭにセットする（ステップＳ４２）。次いで保存するデータをＲＡＭへコピーし（ステップＳ４３）、ＲＡＭへコピーしたデータのＬＲＣを求める（ステップＳ４４）。次いで、バックアップデータをＲＡＭから不揮発性メモリのバックアップ領域へ書き込み（ステップＳ４５）、書き込みエラーがあるか否か判断する（ステップＳ４６）。書き込みエラーが無い場合、また、ステップＳ４１でバックアップ機能が無効の場合、書き込みデータ領域のデータをＲＡＭ上のデータで更新する（ステップＳ４７）。このとき書き込みエラーがあるか否か判断し（ステップＳ４８）、無ければバックアップ機能を確認し（ステップＳ４９）、バックアップ機能が有効であればバックアップ領域を初期化し（ステップＳ５０）、また、ステップＳ４９でバックアップ機能が無効であれば、正常終了となる（ステップＳ５１）。ステップＳ４６、ステップＳ４８で書き込みエラーがあった場合、異常終了となる（ステップＳ５２）。
【００１６】
図６はバックアップ機能におけるデータ復元方法の処理フローを説明する図である。
まず、バックアップ機能を確認し（ステップＳ６１）、有効の場合、バックアップ領域が初期化状態か否か判断する（ステップＳ６２）。初期化状態でない場合、不揮発性メモリのデータ書き換えが完了していないので、バックアップデータで復帰する必要がある。そこで、バックアップ領域に残っているデータにＬＲＣエラーがあるか否か判断する（ステップＳ６３）。ＬＲＣエラーがない場合、このバックアップデータは正当であり、これをＲＡＭにセットし（ステップＳ６４）、バックアップデータのＬＲＣを算出する（ステップＳ６５）。次いで、ＲＡＭ上のバックアップデータで不揮発性メモリのデータを書き換える（ステップＳ６６）。このとき書き込みエラーがあるか否か判断し（ステップＳ６７）、書き込みエラーが無ければ、不揮発性メモリのデータ領域のデータが復帰したので、バックアップ領域を初期化する。ステップＳ６１でバックアップ機能が無効のとき、ステップＳ６２でバックアップ領域が初期化状態のとき、ステップＳ６３でバックアップ領域にＬＲＣエラーがあるとき、ステップＳ６７で書き込みエラーがあるとき、いずれも処理は終了する。
【００１７】
【発明の効果】
以上のように本発明によれば、不揮発性メモリ上のデータを書き換える際には、ＲＡＭ上に不揮発性メモリ上のデータを一旦コピーし、ＲＡＭ上のデータを更新し、チェックコードを算出した後、まとめて不揮発性メモリ上に書き込むようにしたので、データを１回の書き込み処理で更新することができ、不揮発性メモリ上のデータの更新時間は従来に比して半分になり、データ破壊の確率を低く抑えることができる。
また、同じデータを常に二重化するミラー機能、メモリ上の特定作業領域を利用するバックアップ機能を備え、これらの機能を適宜使いわけることにより、壊れる前のデータを復元することができる。
【図面の簡単な説明】
【図１】不揮発性メモリにおけるＥＦのデータ構造を説明する図である。
【図２】不揮発性メモリの領域を説明する図である。
【図３】ミラー機能の処理フローを説明する図である。
【図４】ミラー機能の処理フローを説明する図である。
【図５】バックアップ機能のデータ書き込み方法を説明する図である。
【図６】バックアップ機能のデータ復元方法を説明する図である。
【図７】リーダ／ライタとＩＣカードの通信を説明する図である。
【図８】ＩＣカードの構成を説明する図である。
【符号の説明】
１…リーダ／ライタ、２…ＩＣカード、１１…ＣＰＵ、１２…ＲＡＭ、１３…ＲＯＭ、１４…不揮発性メモリ、Ｐ…ポインタ。
【図１】
0004596602.tif 000002
【図２】
0004596602.tif 000003
【図３】
0004596602.tif 000004
【図４】
0004596602.tif 000005
【図５】
0004596602.tif 000006
【図６】
0004596602.tif 000007
【図７】
0004596602.tif 000008
【図８】
0004596602.tif 000009