(57)【特許請求の範囲】
【請求項１】
必要なデータを保存するデータ書き込み用領域と、データ書き換え時に一旦データを格納するデータ退避領域とを備え、上記データ書き込み用領域および上記データ退避領域は、ブロックデータ内の最終バイトに、該ブロックデータへのデータの書き込み終了時に更新される終了フラグを格納する終了フラグ領域と、ブロックデータ内の中間部に、該ブロックデータにおける上記中間部までのアドレスのデータについてＣＲＣ値を算出し、求めた上記ＣＲＣ値を格納するデータ誤り検知用領域とをそれぞれ有することを特徴とする不揮発性メモリ。
【請求項２】
請求項１記載の不揮発性メモリにおいて、データを更新する場合に、上記データ書き込み用領域に保存されているデータをＲＡＭに書き込み、上記ＲＡＭ内でデータの更新を行い、更新された上記中間部までのアドレスのデータについて上記ＣＲＣ値を算出し、求めた上記ＣＲＣ値を上記ＲＡＭ内で上記データ誤り検知用領域に格納し、上記ＲＡＭ内の更新したデータを上記データ退避領域に書き込み、上記データ退避領域の上記終了フラグ領域にデータ書き込み終了を示す上記終了フラグを書き込み、上記データ書き込み用領域内のデータを消去し、上記ＲＡＭ内のデータを上記データ書き込み用領域に書き込み、上記データ書き込み用領域の上記終了フラグ領域にデータ書き込み終了を示す上記終了フラグを書き込み、上記データ退避領域内のデータを消去することを特徴とする不揮発性メモリのデータ更新方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、不揮発性メモリ及びそのデータ更新方法に関する。さらに詳述すると、本発明は、不揮発性メモリ内のデータを保護できる不揮発性メモリ及びそのデータ更新方法に関する。
【０００２】
【従来の技術】
近年、フラッシュメモリの記憶容量は目覚しく拡張し、また書き換え回数の耐久も桁違いに大きく伸びてきている。その結果、フラッシュメモリは、以前の主用途であった比較的書き換え頻度の小さいプログラムコードを保存するための役割のみならず、書き換え頻度の極めて大きいデータを保存するための不揮発性メモリとしても使用されている。
【０００３】
ここで、フラッシュメモリ上のデータの更新に際しては、フラッシュメモリの特性上、ビットデータを「０」から「１」へ更新する場合には、更新するデータが所属するブロック内の全データを一旦消去（対象のビットデータを論理的に「１」にする動作のことを言う）しなければならず、ブロック中の一部データだけをピンポイントで消去することはできない。したがって、フラッシュメモリのデータ更新処理は、次の手順で行われている（図２参照）。
【０００４】
先ず、更新すべきデータが含まれるブロック内の全データが消去される前に、揮発性メモリであるＲＡＭ（Random Access Memory）等にマッピングされたワークエリアを用意し、そこに消去される範囲のデータをコピーして一時退避する（ステップ１０１）。そして、当該ワークエリア上で更新すべきデータの更新作業を行う（ステップ１０２）。一方、フラッシュメモリの該当ブロックを消去する（ステップ１０３）。そして、ワークエリア上の更新後データを、フラッシュメモリの消去された該当ブロックに書き込み（ステップ１０４）、データの更新が完了する。
【０００５】
ここで、フラッシュメモリの消去作業は、ブロック内の全データを一旦消去しなければならないこともあり、他の処理と比して長時間（例えば秒単位）を要する場合が多い。フラッシュメモリのブロックサイズは数１０バイトから数１０Ｋバイトと製品の種類により様々であるが、ものによっては消去動作を開始してから終了するまで最大１５秒程度要するものもある。
【０００６】
【発明が解決しようとする課題】
しかしながら、上述したフラッシュメモリのデータ更新方法では、フラッシュメモリの消去作業から更新後データの書き込みが終わるまでの間は必要なデータ内容がＲＡＭのみに記憶されているので、この間に不測の電源断が発生した場合に、フラッシュメモリの制御が途中で中断されるとともに、揮発性メモリであるＲＡＭ上のデータが失われてしまい、重要データの回復不可能な喪失という深刻な事態を生ずる虞がある。
【０００７】
このような事態を生ずると、次回電源立ち上げ時にフラッシュメモリに書き込まれているデータが不良である場合があり、最悪の場合には当該フラッシュメモリを使用する装置が正常に動作しないことが有り得る。
【０００８】
これを解決するために、電源がダウンしてきたことを検出する回路と、電源が完全にダウンした場合に補助的に電源を復帰させるためのバックアップ電源などを装備することも行われているが、対象製品のコストが上がってしまい、場合によっては当該対象製品の形状をも変更せざるを得ないため好ましくない。
【０００９】
そこで本発明は、不揮発性メモリ内のデータを確実に保護することができる不揮発性メモリ及びそのデータ更新方法を提供することを目的とする。
【００１０】
【課題を解決するための手段】
かかる目的を達成するため、請求項１記載の不揮発性メモリは、必要なデータを保存するデータ書き込み用領域と、データ書き換え時に一旦データを格納するデータ退避領域とを備え、データ書き込み用領域およびデータ退避領域は、ブロックデータ内の最終バイトに、該ブロックデータへのデータの書き込み終了時に更新される終了フラグを格納する終了フラグ領域と、ブロックデータ内の中間部に、該ブロックデータにおける中間部までのアドレスのデータについてＣＲＣ値を算出し、求めたＣＲＣ値を格納するデータ誤り検知用領域とをそれぞれ有するようにしている。また、請求項２記載の不揮発性メモリのデータ更新方法は、請求項１記載の不揮発性メモリにおいて、データを更新する場合に、データ書き込み用領域に保存されているデータをＲＡＭに書き込み、ＲＡＭ内でデータの更新を行い、更新された中間部までのアドレスのデータについてＣＲＣ値を算出し、求めたＣＲＣ値をＲＡＭ内でデータ誤り検知用領域に格納し、ＲＡＭ内の更新したデータをデータ退避領域に書き込み、データ退避領域の終了フラグ領域にデータ書き込み終了を示す終了フラグを書き込み、データ書き込み用領域内のデータを消去し、ＲＡＭ内のデータをデータ書き込み用領域に書き込み、データ書き込み用領域の終了フラグ領域にデータ書き込み終了を示す終了フラグを書き込み、データ退避領域内のデータを消去するようにしている。
【００１１】
したがって、不揮発性メモリの２箇所に記憶領域を有していて少なくとも一方にはデータが残っているようにしているので、片方の記憶領域のデータ消去中に停電が起きて当該記憶領域やＲＡＭのデータが消えてしまっても他方の記憶領域にはデータが残る。よって、次回電源立ち上げ時に他方の記憶領域のデータを利用して装置を作動させることができる。
【００１２】
また、停電のタイミングによっては、データ書き込み用領域とデータ退避領域との両方にデータが存在することが有り得る。この場合、各記憶領域のデータ誤り検知用領域及び終了フラグ領域を調べて、各記憶領域のデータの妥当性を判断する。そして、データ退避領域のデータの方が正しいと判断された場合は、そのデータをデータ書き込み用領域に書き込む。また、データ書き込み用領域のデータの方が正しいと判断された場合は、そのデータは保持したままデータ退避領域のデータを消去する。よって、停電後の電源立ち上げ時のデータ妥当性の判別精度の高さと判断時間の短縮を両立することができる。
【００１３】
【発明の実施の形態】
以下、本発明の構成を図面に示す実施形態に基づいて詳細に説明する。
【００１４】
図１に本発明の不揮発性メモリ１及びそのデータ更新方法の実施の一形態を示す。この不揮発性メモリ１、例えばフラッシュメモリは、必要なデータを保存するデータ書き込み用領域２と、データ書き換え時に一旦データを格納するデータ退避領域３とを備え、データ書き込み用領域２とデータ退避領域３とには、データの書き込み終了を示す終了フラグ領域４と、ブロックデータ内の中間部にデータ誤り検知用領域５とをそれぞれ有するようにしている。また、データを更新する場合に、データ書き込み用領域２に保存されているデータ（ただし、終了フラグ領域４を除く）をＲＡＭ６に書き込み、ＲＡＭ６内でデータの更新を行い、この更新に基づきＲＡＭ６内でデータ誤り検知用領域５を更新し、ＲＡＭ６内の更新したデータをデータ退避領域３に書き込み、データ退避領域３の終了フラグ領域４を更新し、データ書き込み用領域２内のデータを消去し、ＲＡＭ６内のデータをデータ書き込み用領域２に書き込み、データ書き込み用領域２の終了フラグ領域４を更新し、データ退避領域３内のデータを消去するようにしている。このため、不揮発性メモリ１の２箇所に記憶領域２，３を有していて少なくとも一方にはデータが残っているようにしているので、片方の記憶領域のデータ消去中に停電が起きて当該記憶領域やＲＡＭ６のデータが消えてしまっても他方の記憶領域にはデータが残る。よって、次回電源立ち上げ時に他方の記憶領域のデータを利用して装置を作動させることができる。
【００１５】
このデータ更新方法は、例えばプログラムとして記述され、当該プログラムは、不揮発性メモリ１に接続して不揮発性メモリ１に対しデータの書き込みまたは読み出し処理を行うマイクロコンピュータ（図示せず）によって実行される。これにより、不揮発性メモリ１の制御装置が実現される。
【００１６】
この不揮発性メモリ１では、データ書き込み用領域２とデータ退避領域３の各ブロックについてのＢＣＣ（Block Check Character）を求めるようにしている。ＢＣＣとしては例えば既知のＣＲＣ（Cyclic Redundancy Check）を利用する。このＣＲＣ値はデータ誤り検知用領域５に書き込まれるようにしている。本実施形態では、データ誤り検知用領域５は各記憶領域２，３のブロック内のアドレスの中央に設けられている。そして、ＣＲＣ値は、データ誤り検知用領域５よりも前のアドレスのデータについて算出するものとしている。このため、データ書き込み用領域２やデータ退避領域３の全データについて算出するよりもデータ数を１／２にできるので、計算時間を大幅に短縮することができる。
【００１７】
上述した不揮発性メモリ１を使用するときは、通常の動作状態ではデータ書き込み用領域２に書き込まれたデータを読み出す。例えばカードリーダに使用する場合は、データ書き込み用領域２に磁気ヘッド情報や通過センサの電圧閾値やシリアル番号などの情報を書き込んでおき、カードリーダの使用時にこれらのデータが読み出される。このとき、データ退避領域３は全て消去済みにされている。不揮発性メモリ１におけるデータの消去とは、全ビットを１にすることを意味する。
【００１８】
また、不揮発性メモリ１のデータを更新するときは、まずデータ書き込み用領域２に保存されているデータ（ただし、終了フラグ領域４を除く）をＲＡＭ６に書き込む（ステップ１）。そして、ＲＡＭ６内でデータの更新を行う（ステップ２）。この更新は更新すべき部分だけ行えば良い。
【００１９】
この更新後のデータを使用して、ＲＡＭ６内でデータ誤り検知用領域５を更新する（ステップ３）。つまり、データ誤り検知用領域５より前のアドレスのデータ（data'1〜data'n）についてのＣＲＣ値を計算して、その結果をデータ誤り検知用領域５に書き込む。そして、ＲＡＭ６内の更新したデータをデータ退避領域３に書き込む（ステップ４）。
【００２０】
さらに、データ退避領域３の終了フラグ領域４を更新する（ステップ５）。具体的には終了フラグ領域４に「１」を書き込む。そして、データ書き込み用領域２内のデータを消去する（ステップ６）。すなわち、全バイトをＦＦｈに書き換えることにより全ビットを１にする。
【００２１】
次いで、ＲＡＭ６内のデータをデータ書き込み用領域２に書き込む（ステップ７）。あるいは、ＲＡＭ６内のデータを書き込むのではなく、データ退避領域３内のデータを書き込むようにしても良い（ステップ７’）。
【００２２】
そして、データ書き込み用領域２の終了フラグ領域４を更新する（ステップ８）。具体的には終了フラグ領域４に「１」を書き込む。さらに、データ退避領域３内のデータを消去する（ステップ９）。すなわち、全バイトをＦＦｈに書き換えることにより全ビットを１にする。
【００２３】
上述した手順によりデータ更新を行うと、途中で停電が発生した場合でもデータ書き込み用領域２およびデータ退避領域３のいずれかに更新後のデータ、あるいは少なくとも更新前のデータが正常な状態で残されるようになる。よって、停電後の電源立ち上げ時でも、更新後または更新前のデータにより装置が動作するようになり、異常動作を起こしてしまうことを防止できる。
【００２４】
また、停電の起きるタイミングによっては、データ書き込み用領域２およびデータ退避領域３の両方にデータが残る場合がある。そこで、電源立ち上げ時に各領域のデータ誤り検知用領域５と終了フラグ領域４を調べて、データの妥当性を判断するようにする。
【００２５】
例えば電源立ち上げ時にデータ書き込み用領域２およびデータ退避領域３の一方の領域のブロックのデータ誤り検知用領域５と終了フラグ領域４を調べる。そして、データ誤り検知用領域５のＣＲＣ値の計算結果は正しいが終了フラグが１でない場合は、データ誤り検知用領域５より前のアドレスのデータは正常に書き込めたが、その後のデータを書き込んでいる最中に停電したため、書き込みが完了しなかったものと考えられる。このため、この場合はもう一方の領域の方が正しいと判断する。
【００２６】
また、終了フラグは１であるが、データ誤り検知用領域５のＣＲＣ値の計算結果は正しくな場合は、そのブロックを消去中に停電が発生して、領域内のデータの消去が完全には終了していなかったため、たまたま終了フラグが１であったものと考えられる。このため、この場合はもう一方の領域の方が正しいと判断する。
【００２７】
さらに、この手法によりデータ書き込み用領域２が正しいと判断された場合には、（１）更新後のデータが書き込まれている、（２）データ退避領域３に更新後のデータを書き込み中に停電が発生したためデータ書き込み用領域２には更新前のデータが残っている、という２つのケースが有り得る。そして、（２）の場合は、更新後のデータでは無いものの、この不揮発性メモリ１を搭載したカードリーダ等の装置の動作は確保されるので、装置の異常動作という事態の発生を防止できる。
【００２８】
なお、上述の実施形態は本発明の好適な実施の一例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々変形実施可能である。例えば本実施形態ではデータ誤り検知用領域５は各記憶領域２，３のブロック内のアドレスの中央に設けて各ブロック内の半数のデータについてＣＲＣ値を求めるようにしているが、これには限られない。ＣＲＣの計算範囲を変更することで、電源立ち上げ時のデータの妥当性判別精度とＣＲＣ計算時間とのバランスを調整することができる。すなわち、ＣＲＣの計算範囲を広くすればデータの妥当性判別精度を高めることができる反面、計算時間は長くなる。また、ＣＲＣの計算範囲を狭くすればデータの妥当性判別精度は下がるが、計算時間は短くなる。
【００２９】
ここで、不揮発性メモリ１にデータを書き込み完了した時点で終了フラグを終了フラグ領域４に書き込むだけでＣＲＣ計算を行わないようにすると、構成は最もシンプルで処理は速い。しかし、これでは電源立ち上げ時のデータ妥当性判別が低い。これは、例えば終了フラグが１であったとしても、それは当該領域の消去中に停電が発生して完全にデータ消去を行えずにたまたま１になっている可能性があるからである。
【００３０】
一方、ブロック内の全てのデータに対してＣＲＣ値を算出してブロックデータの一部として不揮発性メモリ１に書き込むだけで終了フラグを使用しないようにすると、電源立ち上げ時のデータ妥当性判別には有効であるが、ＣＲＣ計算に長時間を要してしまい不揮発性メモリ１にデータを書き込む前処理に時間がかかり有効性に欠ける。
【００３１】
本実施形態の発明によれば、これら２種類の方法を取り入れて両者の長所を生かして弱点を補うものである。すなわち、ＣＲＣ計算の対象データを減らすと共に終了フラグを採用して、処理の高速化とデータ妥当性判別の両立を図るものである。
【００３２】
また、本実施形態では不揮発性メモリ１としてフラッシュメモリを採用しているが、これには限られず、例えば他の書き換え可能な不揮発性メモリ１であるＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）やＦＲＡＭ(強誘電性メモリ)等を用いるものとしても良い。
【００３３】
さらに、本実施形態ではデータ書き込み用領域２とデータ退避領域３の各ブロックについてのＢＣＣとしてＣＲＣを採用しているが、これには限られず他の方法でも良い。
【００３４】
【発明の効果】
以上の説明から明らかなように、請求項１記載の不揮発性メモリおよび請求項２記載の不揮発性メモリのデータ更新方法によれば、不揮発性メモリの２箇所に記憶領域を有していて少なくとも一方にはデータが残っているようにしているので、片方の記憶領域のデータ消去中に停電が起きて当該記憶領域やＲＡＭのデータが消えてしまっても他方の記憶領域にはデータが残る。よって、次回電源立ち上げ時に他方の記憶領域のデータを利用して装置を作動させることができる。したがって、重要データの回復不可能な喪失および装置の異常動作の発生という最悪の事態を回避することができる。
【００３５】
また、停電のタイミングによっては、データ書き込み用領域とデータ退避領域との両方にデータが存在することが有り得る。この場合、各記憶領域のデータ誤り検知用領域及び終了フラグ領域を調べて、各記憶領域のデータの妥当性を判断する。よって、停電後の電源立ち上げ時のデータ妥当性の判別精度の高さと判断時間の短縮を両立することができる。
【図面の簡単な説明】
【図１】本発明の不揮発性メモリのデータ更新方法における処理の一例を示す概念図である。
【図２】従来の不揮発性メモリのデータ更新方法における処理の一例を示すフローチャートである。
【符号の説明】
１  不揮発性メモリ
２  データ書き込み用領域
３  データ退避領域
４  終了フラグ領域
５  データ誤り検知用領域
６  ＲＡＭ
【図１】
0003981268.tif 000002
【図２】
0003981268.tif 000003