(57)【要約】フラッシュメモリ等のパーシスタントメモリにおけるエラーを検出するための技術が提供され、ここで、データ項目の値が、すでに割り当てられたメモリセグメントの一方の終端部に連続的に付加されたメモリロケーションに格納される。新しいロケーションが付加された場合、新しいロケーションのアドレスを示すポインタが、その項目の前の値のロケーションに格納される。最新のロケーションのアドレスは、ポインタが再印加されるときはいつでも決定される（２１）。ロケーションのポインタフィールドは、値が最後のロケーションのアドレスよりも大きいポインタについて検索される（２４）。このようなポインタ値が見つけ出された場合、これは、例えば、パワーがポインタ書き込みサイクルの完了の前に取り除かれたために、ポインタ値を書き込む場合にエラーが生じたことを示す。
2006500653.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのデータ項目の値が、一時的に連続して割り当てられたメモリロケーションに格納されたパーシスタントメモリセグメントの中のエラーを検出する方法であって、各新しいメモリロケーションが、第１および第２の終端部を有する前記メモリセグメントのブロックの第１の終端部に付加され、かつ、各新しいメモリロケーションを示すポインタが前記少なくとも１つのデータ項目の前の値を含む前記ブロックにおける以前のメモリロケーションに付加される方法であって、前記方法は、
（ａ）前記最後に付加されたポインタが示す前記アドレスを決定するステップと、
（ｂ）前記決定されたアドレスを前記最後の新しいメモリロケーション（ＬＵＭ）を備える前記メモリブロックのアドレスレンジと比較するステップと、
（ｃ）前記決定されたアドレスが前記アドレスレンジの外側にある場合、アクションを実行するステップと
を包含することを特徴とする、方法。
【請求項２】
前記ステップ（ａ）〜（ｃ）は、前記メモリセグメントにパワーが印加されるたびに実行されることを特徴とする、請求項１に記載の方法。
【請求項３】
前記ステップ（ａ）は、前記ポインタのすべてが示す前記アドレスを決定するステップと、前記最高位または最下位アドレスを選択するステップとを包含することを特徴とする、請求項１に記載の方法。
【請求項４】
前記ステップ（ｃ）は、前記最後に付加されたポインタのアドレスを、前記最後の新しいメモリロケーションの前記アドレスに変更するステップを包含することを特徴とする、請求項１に記載の方法。
【請求項５】
各新しいメモリロケーションは、前記ブロックの前記第１の終端部に連続して付加されることを特徴とする、請求項１に記載の方法。
【請求項６】
各ポインタは、前記ポインタが示す前記メモリロケーションの最高位または最下位アドレスを示すことを特徴とする、請求項１に記載の方法。
【請求項７】
前記メモリセグメントは、フラッシュメモリの少なくとも一部分を備えることを特徴とする、請求項１に記載の方法。
【請求項８】
各メモリロケーションは、前記少なくとも１つのデータ項目の単一値のための空間を有することを特徴とする、請求項１に記載の方法。
【請求項９】
前記メモリセグメントの各ビットは、１から０にのみ個別にスイッチング可能であり、前記アクションは、前記検出されたアドレスが前記アドレスレンジの前記最高位アドレスよりも大きい場合に実行されることを特徴とする、請求項１に記載の方法。
【請求項１０】
前記メモリセグメントの各ビットは、０から１にのみ個別にスイッチング可能であり、前記アクションは、前記検出されたアドレスが前記アドレスレンジの前記最下位アドレスよりも小さい場合に実行されることを特徴とする、請求項１に記載の方法。
【請求項１１】
前記メモリセグメントは、それぞれのフラグが各値の格納動作の終了時にセットされ、それぞれのさらなるフラグが各ポインタの付加動作の前記終了時にセットされる、少なくとも１つの書き込みカウンタを備えることを特徴とし、さらに、前記ステップ（ａ）〜（ｃ）は、奇数のフラグおよびさらなるフラグがセットされた場合にのみ実行されることを特徴とする、請求項１に記載の方法。
【請求項１２】
前記少なくとも１つの書き込みカウンタは、データ項目を備えることを特徴とする、請求項１１に記載の方法。
【請求項１３】
前記メモリセグメントは、一連の１つ以上のデータ項目値を格納する場合、それぞれのフラグが、前記一連の前記第１のポインタ付加動作の前にセットされ、それぞれのさらなるフラグが、前記一連の前記最終ポインタ付加動作の後にセットされる、少なくとも１つの書き込みカウンタを備えることを特徴とし、さらに、前記ステップ（ａ）〜（ｃ）は、奇数のフラグおよびさらなるフラグがセットされる場合にのみ実行されることを特徴とする、請求項１に記載の方法。
【請求項１４】
コンピュータを制御して、請求項１に記載の方法を実行するプログラム。
【請求項１５】
請求項１４に記載のプログラムによってプログラムされるコンピュータ。
【請求項１６】
請求項１４に記載のプログラムを備える格納媒体。
【請求項１７】
パーシスタントメモリセグメントと、少なくとも１つのデータ項目の値を、一時的に連続して割り当てられたメモリロケーションに格納する部分であって、各新しいメモリロケーションは、第１および第２の終端部を有する前記メモリセグメントのブロックの第１の終端部に付加される、部分と、各新しいメモリロケーションを示すポインタを、前記少なくとも１つのデータ項目の前の値を含む前記ブロックにおける以前のメモリロケーションに付加する部分とを備える装置であって、前記最後に付加されたポインタが示す前記アドレスを決定する部分と、前記決定されたアドレスを前記最後の新しいメモリロケーション（ＬＵＭ）を含む前記メモリブロックのアドレスレンジと比較する部分と、前記決定されたアドレスが前記アドレスレンジの外側である場合にアクションを実行する部分とを特徴とする、装置。
【請求項１８】
前記決定する部分と、前記比較する部分と、前記実行する部分とは、前記装置にパワーが印加されるたびに駆動されるように構成されることを特徴とする、請求項１７に記載の装置。
【請求項１９】
前記決定する部分は、前記ポインタのすべてが示す前記アドレスを決定し、かつ、前記最高位または最下位アドレスを選択するように構成されることを特徴とする、請求項１７に記載の装置。
【請求項２０】
前記実行する部分は、前記最後に付加されたポインタの前記アドレスを前記最後の新しいメモリロケーションの前記アドレスに変更するように構成されることを特徴とする、請求項１７に記載の装置。
【請求項２１】
各新しいメモリロケーションは、前記ブロックの前記第１の終端部に連続的に付加されることを特徴とする、請求項１７に記載の装置。
【請求項２２】
各ポインタは、前記ポインタが示す前記メモリロケーションの最高位または最下位アドレスを示すことを特徴とする、請求項１７に記載の装置。
【請求項２３】
前記メモリセグメントは、フラッシュメモリの少なくとも一部分を備えることを特徴とする、請求項１７に記載の装置。
【請求項２４】
各メモリロケーションは、前記少なくとも１つのデータ項目の単一値のための空間を有することを特徴とする、請求項１７に記載の装置。
【請求項２５】
前記メモリセグメントの各ビットは、１から０にのみ個別にスイッチング可能であり、かつ、前記実行する部分は、前記検出されたアドレスが前記アドレスレンジの前記最高位アドレスよりも大きい場合、前記アクションを実行するように構成されることを特徴とする、請求項１７に記載の装置。
【請求項２６】
前記メモリセグメントの各ビットは、０から１にのみ個別にスイッチング可能であり、前記実行する部分は、前記検出されたアドレスが前記アドレスレンジの前記最下位アドレスよりも小さい場合、前記アクションを実行するように構成されることを特徴とする、請求項１７に記載の装置。
【請求項２７】
前記メモリセグメントの中の少なくとも１つの書き込みカウンタにおいて、それぞれのフラグを各値格納動作の開始時点で、そして、それぞれのさらなるフラグを各ポインタ付加動作の終了時点でセットする部分と、セットされたフラグとさらなるフラグの数が奇数であるかどうかを評価する部分と、前記比較する部分と、前記評価する部分に応答して駆動可能になるように構成される前記実行する部分とを備えることを特徴とする、請求項１７に記載の装置。
【請求項２８】
前記少なくとも１つの書き込みカウンタは、データ項目を備えることを特徴とする、請求項２７に記載の装置。
【請求項２９】
前記メモリセグメントにおける少なくとも１つの書き込みカウンタにおいて、かつ、一連の１つ以上のデータ項目値を格納する場合、それぞれのフラグを、前記第１のポインタ付加動作の前に連続的に、そして、それぞれのさらなるフラグを、前記最終ポインタ付加動作の後に連続的にセットする部分と、前記セットされたフラグおよびさらなるフラグの数が奇数であるかどうかを評価する部分と、前記決定する部分と、前記比較する部分と、前記評価する部分に応答して、駆動するように構成される前記実行部分とを備えることを特徴とする、請求項１７に記載の装置。
【請求項３０】
スマートカードを備えることを特徴とする、請求項１７に記載の装置。
【請求項３１】
フラッシュメモリセグメントと、少なくとも１つのデータ項目の値を、一時的に連続して割り当てられたメモリロケーションに格納する手段であって、各新しいメモリロケーションは、第１および第２の終端部を有する前記メモリセグメントのブロックの第１の終端部に付加される、手段と、各新しいメモリロケーションを示すポインタを前記少なくとも１つのデータ項目の前の値を含む前記ブロックにおける以前のメモリロケーションに付加する手段と、前記最後に付加されたポインタが示す前記アドレスを決定する手段と、前記決定されたアドレスを前記最後の新しいメモリロケーションを含む前記メモリブロックのアドレスレンジと比較する手段と、前記決定されたアドレスが前記アドレスレンジの外側である場合、アクションを実行する手段とを備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パーシスタントメモリに書き込む際のエラーを検出する方法および装置に関する。本発明は、さらに、このようなエラーの結果を修正する方法および装置に関する。このような技術は、組込みシステムで用いられ得、適切な応用例は、Ｊａｖａ（登録商標）カード等のスマートカード、スマートキー、およびスマートディスク等のデジタルアクティブストレージまたはセキュリティデバイス；携帯電話用のＳＩＭおよびＵＳＩＭ；データロギングデバイス；ユーザプレファレンス、格納セッティングまたはロギングの使用を記録する小型デバイス；車載コンピュータシステム；セットトップボックス；ならびにインターネットルータを含む。このような技術は、フラッシュメモリ等の「ライトワンスイレースインバルク（ｗｒｉｔｅ−ｏｎｃｅ−ｅｒａｓｅ−ｉｎ−ｂｕｌｋ）」タイプ、および「書き込み専用（ｗｒｉｔｅ−ｏｎｌｙ）」タイプのパーシスタントまたは「不揮発性」メモリのために有用である。
【背景技術】
【０００２】
本明細書中で用いられる「パーシスタントデータ項目」または「ＰＤＩ」という用語は、時間が経つにつれて、特に、アプリケーションプログラムによって更新される場合に変化する値と関連付けられたデータ項目と定義される。この値は、さらに、更新と更新との間、特に、アプリケーションが動作していない場合、およびパワーが意図的に取り除かれた場合、アプリケーションが、例えば、停電、または電源から除去されたために偶発的にスイッチオフされた場合に、その状態を保持するために必要とされる。
【０００３】
コンピュータプログラムは、変数の値を読み出しおよび更新することによって動作する。ＲＡＭにおける変数の場合、これは、必要に応じた頻度で値が再書き込みされ得、高速で読み出しおよび書き込みされるのであまり難しくない。プログラムが実行されていない場合、その状態は、より永続的なメモリに格納されなければならない。
【０００４】
スマートカード等の小型のコンピュータプラットフォームでは、ＲＡＭが少ししかなく、パーシスタントメモリは、ＥＥＰＲＯＭまたはフラッシュメモリの形態をとることが多い。このメモリは、一旦ビットが変更されると、全セグメントが消去されるまで再び変更され得ないという特性を有する。ＥＥＰＲＯＭでは、セグメントサイズがシングルバイト（８バイト）と同じくらい小さくなり得、メモリは、実質的に、超低速ＲＡＭとして扱われ得る。フラッシュメモリでは、シリコン面積効率のためにセグメントが一般に大きく（例えば、６４ＫＢ）、消去動作が低速である。さらに、メモリは、いくらかの消去サイクル（例えば、高品質のフラッシュの場合、１００，０００回）の後で最終的に消耗してしまう。フラッシュメモリの有利な点は、より高速であり、所与のチップ面積にはるかに高密度に実装され、したがって、より多くの格納空間が存在するということであるが、効率的に用いることがＥＥＰＲＯＭよりも難しい。
【０００５】
動作し、そして、動作間のインターバルをチェックするたびに、（おそらく、カードリーダ端末から取得された）日付および時間のレコードを保持するスマートカードアプリケーションを考慮されたい。これは、一日の利用限度をキャッシュカードに適用する等のセキュリティ機能のために用いられ得る。このアプリケーションは動作するたびに、前の日付を読み出し、これをチェックし、そして、新しい日付を格納しなければならない。従って、この日付はＰＤＩである。日付が変更されるたびに同じロケーションに格納される場合、メモリの物理的限界があるために、全６４Ｋブロックが最初に消去される必要があり、これは、長時間かかり、フラッシュメモリを早く消耗させる。
【０００６】
そうではなく、新しい日付が書き込まれるたびに、日付がメモリの新しい領域に格納されなければならない。このプログラムは、フラッシュメモリを他のプログラムと共有する必要があり、従って、この１つのアプリケーションのためだけにフラッシュメモリの大きいブロックを先割り当てするのは効率的でないと想定される。換言すると、システムには複数のＰＤＩが存在し得、これらは、動作しているアプリケーションに依存して異なったレートで更新され得る。
【０００７】
ＰＤＩを格納する公知の構成は、添付の図面の図１に示される各ＰＤＩごとの値のリンクチェーンを構築する。このチェーンの第１のエレメントは、既知のアドレスにある。上述の特定のアプリケーションの場合、このチェーンの各エレメントは、日付レコードの値を格納し、このチェーンの次の項目を示すポインタための空間を有する。最終エレメントは、消去されたメモリパターン（各ビットのこの消去された状態が１の場合のこのモデルでの１６進表示のＦＦＦＦ、または各ビットのこの消去された状態が０の場合の補数モデルでの１６進表示の００００）に等しいポインタ値を有する。現在の日付を読み取るために、読み取り動作はチェーンの開始点で始められ、チェーンが値ＦＦＦＦに達するまでポインタを追跡する。新しい日付を追加するために、新しいチェーンエレメントが新しい値および空ポインタで生成される。続いて、前の最後のエレメントのポインタ部分にわたって新しいアドレスが格納される。
【０００８】
ブロックが一杯になると、各ＰＤＩごとの最も最近の値がフラッシュブロックにコピーされる必要があり、その後で、前のブロックが消去される。これは「ガーベジコレクション」と呼ばれる。ガーベジコレクションされた場合、チェーンの中の最後の値は、新しいブロックにコピーされ、新しいチェーンの開始として用いられる。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
パワーが書き込みサイクル中にフラッシュメモリから取り除かれる場合、この動作が不完全になり、パワーが再び印加されるとつじつまの合わない状態が利用される危険がある。フラッシュメモリを有する非接触スマートカードの場合、カードそれ自体は電源を有さないが、これにカードリーダが提供される場合、そのカードリーダからのパワーの受け取りに依存する。フラッシュメモリへの書き込み動作の間に、リーダからカードが除去された場合、電源は、書き込みサイクルの間に中断され得、これにより、実際に格納されたデータは、格納することが意図されたデータとは異なる。
【００１０】
例えば、典型的なフラッシュメモリでは、各ビットの消去された状態は１であり、書き込みサイクルの間、各ビットは０に変更され得るが、０から１への逆の変更は、全ページまたはセグメントを同時に消去することによってのみ達成され得る。さらに、書き込みサイクルが中断された場合、１から０に変更されるべき各ビットは、０に変更されるか、または、１であり続ける。通常、１６ビットを備えるワード全体は、フラッシュメモリと並行に書き込まれる。書き込み動作がパワー損失によって中断された場合、リクエストされた１から０への変更のいくつかまたはすべてが行われ得るが、どの変更が行われ、（行われていない変更がある場合）どの変更が行われていないかを識別することが不可能である。パワーが再び印加された場合、スマートカードは、書き込みサイクルの間のパワー損失が原因で、格納されたデータが破損したかどうかを示すことができない。
【００１１】
添付の図面の図１に示され、かつ、以下において記載されるリンクチェーンの場合、または、改善された構成を記載する英国特許出願第０２０５５７３．９号（この出願の内容は、参考のため、本明細書中に援用される）に開示される構成の場合、各データ項目の現在の値は、リンクチェーンまたはリストにおける最後のデータ項目である。最後の値を示すポインタがフラッシュメモリに書き込まれたときに停電した場合、パワーが回復したときに最後の値を取り出すことが可能であり得る。従って、そのような最後の値に依存する任意のアプリケーションは、正確に機能しないか、または、全く機能し得ない。
【課題を解決するための手段】
【００１２】
本発明の第１の局面によると、少なくとも１つのデータ項目の値が、一時的に連続して割り当てられたメモリロケーションに格納されたパーシスタントメモリセグメントの中のエラーを検出する方法が提供され、各新しいメモリロケーションが、第１および第２の終端部を有するメモリセグメントのブロックの第１の終端部に付加され、かつ、各新しいメモリロケーションを示すポインタが少なくとも１つのデータ項目の前の値を含むブロックにおける以前のメモリロケーションに付加される方法であって、方法は、（ａ）最後に付加されたポインタが示すアドレスを決定するステップと、（ｂ）決定されたアドレスを最後の新しいメモリロケーションを備えるメモリブロックのアドレスレンジと比較するステップと、（ｃ）決定されたアドレスがアドレスレンジの外側にある場合、アクションを実行するステップとを包含する。
【００１３】
ステップ（ａ）〜（ｃ）は、メモリセグメントにパワーが印加されるたびに実行されてもよい。
【００１４】
ステップ（ａ）は、ポインタのすべてが示すアドレスを決定するステップと、最高位または最下位アドレスを選択するステップとを包含してもよい。
【００１５】
ステップ（ｃ）は、最後に付加されたポインタのアドレスを、最後の新しいメモリロケーションのアドレスに変更するステップを包含してもよい。  
【００１６】
各新しいメモリロケーションは、ブロックの第１の終端部に連続して付加されてもよい。
【００１７】
各ポインタは、ポインタが示すメモリロケーションの最高位または最下位アドレスを示してもよい。  
【００１８】
メモリセグメントは、フラッシュメモリの少なくとも一部分を備えてもよい。  
【００１９】
各メモリロケーションは、少なくとも１つのデータ項目の単一値のための空間を有してもよい。
【００２０】
メモリセグメントの各ビットは、１から０にのみ個別にスイッチング可能であってもよく、アクションは、検出されたアドレスがアドレスレンジの最高位アドレスよりも大きい場合に実行されてもよい。あるいは、メモリセグメントの各ビットは、０から１にのみ個別にスイッチング可能であってもよく、アクションは、検出されたアドレスがアドレスレンジの最下位アドレスよりも小さい場合に実行されてもよい。
【００２１】
メモリセグメントは、それぞれのフラグが各値の格納動作の終了時にセットされ、それぞれのさらなるフラグが各ポインタの付加動作の終了時にセットされる、少なくとも１つの書き込みカウンタを備えてもよく、さらに、ステップ（ａ）〜（ｃ）は、奇数のフラグおよびさらなるフラグがセットされた場合にのみ実行されてもよい。少なくとも１つの書き込みカウンタは、データ項目を備えてもよい。  
【００２２】
メモリセグメントは、一連の１つ以上のデータ項目値を格納する場合、それぞれのフラグが、一連の第１のポインタ付加動作の前にセットされ、それぞれのさらなるフラグが、一連の最終ポインタ付加動作の後にセットされる、少なくとも１つの書き込みカウンタを備えてもよく、さらに、ステップ（ａ）〜（ｃ）は、奇数のフラグおよびさらなるフラグがセットされる場合にのみ実行されてもよい。
【００２３】
本発明の第２の局面によると、コンピュータを制御して、本発明の第１の局面による方法を実行するプログラムが提供される。
【００２４】
本発明の第３の局面によると、本発明の第２の局面によるプログラムによってプログラムされるコンピュータが提供される。
【００２５】
本発明の第４の局面によると、本発明の第２の局面によるプログラムを備える格納媒体が提供される。
【００２６】
本発明の第５の局面によると、パーシスタントメモリセグメントと、少なくとも１つのデータ項目の値を、一時的に連続して割り当てられたメモリロケーションに格納する部分であって、各新しいメモリロケーションは、第１および第２の終端部を有するメモリセグメントのブロックの第１の終端部に付加される、部分と、各新しいメモリロケーションを示すポインタを、少なくとも１つのデータ項目の前の値を含むブロックにおける以前のメモリロケーションに付加する部分とを備える装置が提供され、最後に付加されたポインタが示すアドレスを決定する部分と、決定されたアドレスを最後の新しいメモリロケーション（ＬＵＭ）を含むメモリブロックのアドレスレンジと比較する部分と、決定されたアドレスがアドレスレンジの外側である場合にアクションを実行する部分とが提供される。
【００２７】
決定する部分と、比較する部分と、実行する部分とは、装置にパワーが印加されるたびに駆動されるように構成されてもよい。
【００２８】
決定する部分は、ポインタのすべてが示すアドレスを決定し、かつ、最高位または最下位アドレスを選択するように構成されてもよい。
【００２９】
実行する部分は、最後に付加されたポインタのアドレスを最後の新しいメモリロケーションのアドレスに変更するように構成されてもよい。
【００３０】
各新しいメモリロケーションは、ブロックの第１の終端部に連続的に付加されてもよい。
【００３１】
各ポインタは、ポインタが示すメモリロケーションの最高位または最下位アドレスを示してもよい。
【００３２】
メモリセグメントは、フラッシュメモリの少なくとも一部分を備えてもよい。
【００３３】
各メモリロケーションは、少なくとも１つのデータ項目の単一値のための空間を有してもよい。
【００３４】
メモリセグメントの各ビットは、１から０にのみ個別にスイッチング可能であってもよく、かつ、実行する部分は、検出されたアドレスがアドレスレンジの最高位アドレスよりも大きい場合、アクションを実行するように構成されてもよい。あるいは、メモリセグメントの各ビットは、０から１にのみ個別にスイッチング可能であってもよく、実行する部分は、検出されたアドレスがアドレスレンジの最下位アドレスよりも小さい場合、アクションを実行するように構成されてもよい。
【００３５】
装置は、メモリセグメントの中の少なくとも１つの書き込みカウンタにおいて、それぞれのフラグを各値格納動作の開始時点で、そして、それぞれのさらなるフラグを各ポインタ付加動作の終了時点でセットする部分と、セットされたフラグとさらなるフラグの数が奇数であるかどうかを評価する部分と、比較する部分と、評価する部分に応答して駆動可能になるように構成される実行する部分とを備えてもよい。少なくとも１つの書き込みカウンタは、データ項目を備えてもよい。
【００３６】
装置は、メモリセグメントにおける少なくとも１つの書き込みカウンタにおいて、かつ、一連の１つ以上のデータ項目値を格納する場合、それぞれのフラグを、第１のポインタ付加動作の前に連続的に、そして、それぞれのさらなるフラグを、最終ポインタ付加動作の後に連続的にセットする部分と、セットされたフラグおよびさらなるフラグの数が奇数であるかどうかを評価する部分と、決定する部分と、比較する部分と、評価する部分に応答して、駆動するように構成される実行部分とを備えてもよい。
【００３７】
装置は、スマートカードを備えてもよい。
【００３８】
従って、ＰＤＩのリンクチェーンおよび同様の構造のポインタのエラーが確実に検出されることを可能にする構成を提供することが可能である。この技術は、さらに、このようなエラーが修正されることを可能にする。従って、例えば、フラッシュメモリに格納されたＰＤＩに依存する任意のアプリケーション等が、メモリから読み出された不正確なデータを不注意にも用いることが防止される。
【発明を実施するための最良の形態】
【００３９】
図２は、カードリーダと連係してデータを転送する「非接触」タイプのスマートカードを示す。カード１の内部には、コンピュータ２と、いくつかのページまたはセグメントを備えることが示されるフラッシュメモリ３とが組み込まれている。コンピュータ２は、作動ランダムアクセスメモリ（ＲＡＭ）５を備えた中央演算処理ユニット（ＣＰＵ）４と、カードリーダと非接触通信するための入力／出力インターフェース（Ｉ／Ｏ）６とを備える。カード１は内部電源を有しないが、その代わりに、カードリーダ（図示せず）内に提供された外部電源７に依存する。従って、コンピュータ２およびメモリ３は、カード１がカードリーダに正確に挿入された場合にのみパワー供給される。
【００４０】
図２に示されるフラッシュメモリセグメントは、パーシスタントデータ項目（ＰＤＩ）用の不揮発性メモリとして機能するように構成される。従って、パワーがない状態で格納される必要がないデータが揮発性である作動ＲＡＭを用いるのに対して、パワーがない状態で値が保存されなければならないＰＤＩは、フラッシュメモリセグメントに格納される。
【００４１】
図２に示されるフラッシュメモリセグメントは、例えば、ページが使用中であるか、または消去されたかどうか、および、将来使用する準備が整っているかどうかを示すページ識別子およびステータス８、セグメントに格納されたＰＤＩの第１の値を含むロケーションまたは「ノード」を示す各ＰＤＩのポインタを含むＰＤＩテーブル９、クリティカル書き込みカウンタ１０、および、ＰＤＩの値がすでに書き込まれたノードを格納するように構成される。セグメントは、１１で示される空き空間を有し、そして、割り当てられている現在、最後に用いられたメモリワード（ＬＵＭ）が１２に示される。
【００４２】
最初にカード１が構成された場合、コンピュータ２は、ページ識別子およびステータス８を入力し、ＰＤＩテーブル９およびクリティカル書き込みカウンタ１０のために、メモリ内に空間を確保する。ＰＤＩの第１の値がメモリ３に書き込まれた場合、項目の値のため、および次の値を示すポインタのために十分な空間が、ノード１５におけるメモリセグメントの開始点に割り当てられる。第１のＰＤＩが割り当てられたポインタは、テーブル９に挿入され、矢印１６で示されるように、ノード１５の最後のワードを示す。
【００４３】
フラッシュメモリ３は、セグメントが消去された場合に、ビットのすべてが１にセットされるタイプのものである。従って、カウンタ１０のビットのすべては、最初、１にセットされる。さらに、ＰＤＩの次の値を示すポインタのために確保されたノード１５におけるワードのビットは、すべて１にセットされ、次の値が到着した場合に上書きされるのを待つ。
【００４４】
図２に示される例において、メモリ３に格納されるべき次の値は、第１のＰＤＩの第２の値である。書き込みサイクルの開始点で、第２のＰＤＩ値を格納するために、新しいノード１７が割り当てられる。例えば、ＰＤＩのもっと後の値のノードを示すポインタを次に含むノードの最後のワードは、その最下位ビットが０にセットされる。すべてのポインタが偶数のアドレスを示すので、このワードにおけるポインタの次の書き込みと重複しない。第１のＰＤＩの第２のデータ値を含むために、ポインタのワードと前のノード１５との間に十分なメモリ空間が提供される。このノードは、例えば、メモリ空間の使用を最大化するために、ノード１５に隣接するように割り当てられ得るか、または、ギャップが残り得、例えば、第２のデータ値が奇数サイズである場合に、そのポインタは偶数のアドレスにあることを保証する。しかしながら、メモリセグメントへの書き込みは、常に、前に割り当てられたノードを含む空間の終端部に付加され、かつ、既存のノード間に挿入されることがないように制御される。
【００４５】
書き込みサイクルの次のステップでは、第１のＰＤＩの第２のデータ値は、データを格納するために利用可能なノード１７の部分に格納される。カウンタ１０の第１のビットは、０にセットされ、データ書き込み動作が首尾よく完了したことを示す。その後、次のポインタに割り当てられたノード１７の最後のワードのアドレスを示すポインタが、ワード１５のポインタフィールドに書き込まれる。カウンタ１０の第２のビットは、その後、０にセットされ、書き込みサイクルの完了を示す。
【００４６】
フラッシュメモリ３のメモリセグメントに格納されるべき次の値は、第２のＰＤＩの第１の値である。書き込みサイクルの開始点に、次に利用可能なノード１８が割り当てられ、その後に、その値がノード１８のデータ値フィールドに書き込まれる。次にポインタを含むノード１８の最後のワードを示す（すなわち、最上位アドレスの）ポインタは、ＰＤＩテーブル９の中の第２のロケーションに格納される。
【００４７】
メモリ３に格納されるべき第４の値は、第２のＰＤＩの第２の値である。後述されるように、次に利用可能なノード１９は、その最後の最下位ビット、または最上位アドレスワードを０にセットすることによって割り当てられ、データ値は、ノード１９の値フィールドに書き込まれ、カウンタ１０の第３のビットは０にセットされ、ノード１９の最後のワードを示すポインタは、ノード１８のポインタフィールド（最後または最上位アドレスワード）に書き込まれ、カウンタ１０の第４のビットはゼロにセットされる。
【００４８】
このプロセスは、メモリ３のセグメントに書き込むために、ＰＤＩのいずれかの新しい値が到着するごとに繰り返される。特に、各新しい値は、格納するために予め受け取られた値を含むノードを追跡し、（かつ、このノードに隣接し得る）ノードに書き込まれる。カウンタ１０の次のビットは、値を新しいノードに書き込んだ後にゼロにセットされ、新しいワードを示すポインタは、同じＰＤＩの前の値を含むノードのポインタフィールドに書き込まれている場合、カウンタの別のビットはゼロにセットされる。
【００４９】
英国特許出願第０２０５５７３．９号に開示される技術が用いられている場合、ポインタは、同じＰＤＩの直前の値を含むノードには書き込まれ得ないが、その代わりに、同じＰＤＩの先行する値を含むノードの「ファーフィールド（ｆａｒ  ｆｉｅｌｄ）」に書き込まれ得る。この特許出願は、さらに、各ノードの値フィールドがＰＤＩのいくつかの値を格納することができる技術を記載する。従って、新しいノードは、値フィールドのすべてが埋められている場合にのみ、そのＰＤＩのために割り当てられる。このような技術が用いられる場合、ノードに書き込まれる第１の値の後の値のために、新規のポインタが前のノードに書き込まれる必要はない。さらに、クリティカル書き込みカウンタ１０が更新される必要がない。従って、以下に記載される手順は、ノードの値フィールドが埋められている場合にのみ用いられ、そして、そのＰＤＩのために新しいノードを割り当てることが必要である。このような構成は、カウンタ１０を格納するために用いられ得、かつ、メモリ空間のより効率的な使用を提供し得る。
【００５０】
実際には、かつ、上述のように、新しいＰＤＩ値のために新しいノードが割り当てられた場合、十分なバイトが割り当てられ、その値および次のポインタを格納し、これは、ここで、新しいＬＵＭのビットでセットすることによって行われる。メモリセグメント内の各ポインタが２バイトを用い、ワードが常に偶数アドレスに格納される場合、新しいノードのポインタフィールドの中の最下位ビットがゼロにセットされ得る。これにより、任意の時点に割り当てられてたメモリセグメント内の最上位アドレスの表示が提供される。なぜなら、ＬＭＵのアドレスの上のアドレスのすべてのビットは、１の状態にリセットされた状態だからである。
【００５１】
コンピュータ２が任意のＰＤＩの現在の値を見つけ出すことを必要とする場合、コンピュータは、ＰＤＩのために一時的に、連続的に割り当てられたノードに格納されたポインタによって規定された経路を追跡する。従って、コンピュータ２は、第１の値を含むノードを示す、ＰＤＩテーブル９の中のポインタを識別し、かつ、そのノードの中のポインタが有効アドレスを示すかどうかをチェックする。有効アドレスを示す場合、コンピュータは、ポインタが示しているノードをチェックする。格納されたポインタが割り当てられたノードを表すが、ポインタを含まないことを検出した場合、そのノードに格納された値は、ＰＤＩの現在の値であることがわかり、そして、コンピュータによって用いられる。
【００５２】
ポインタがメモリセグメントの適切なワードフィールドに書き込まれている間に電源がカード１から取り除かれた場合、格納されるポインタの値は不正確である。メモリ３への書き込みは、ビットの１から０へのスイッチングを含むので、不完全な書き込みサイクルにより、ポインタの格納されたビットパターンのバイナリ値が、必要とされるよりも多くの１を有するので、目的の値よりも大きくなる。これにより、ポインタ書き込みエラーが検出および修正されることが可能になる。
【００５３】
図４は、カード１にパワーが印加されるたびに実行される方法を示す。この方法またはルーティンは、２０で開始され、２１において、コンピュータ２が現在のＬＵＭ１２のメモリセグメントを検索する。例えば、コンピュータ２は、メモリセグメントの中の最上位アドレスから開始し、次に、ビットのすべてが１というのではないものが見つけ出されるまで、各ワードをチェックして最下位アドレスに向かって動作する。コンピュータ２は、次に、ＬＵＭのアドレスをＲＡＭ５の中に格納する。
【００５４】
ステップ２２において、コンピュータ４は、クリティカル書き込みカウンタ１０が偶数のセットビットを含むかどうかをチェックする。新しいＰＤＩ値がフラッシュメモリセグメントに首尾よく書き込まれた場合はいつも、カウンタ１０の２つのビットが０にセットされる。逆に、パワーがカード１から取り除かれる前に、書き込み動作が開始されたが、完了していない場合はいつも、１ビットのみが０にセットされ、これにより、カウンタ１０は奇数のセットビットを含む。従って、カウンタ１０の中のゼロの数をカウントすることによって、可能な書き込みエラーが生じるかどうかを検出することが可能である。
【００５５】
カウンタ１０が偶数のゼロを含む場合、さらなる介入は必要でなく、図４に示されるルーティンは２３で終了する。カウントが奇数である場合、ステップ２４において、コンピュータ２は、ステップ２１においてＲＡＭ５に予め格納されたＬＵＭのアドレスよりも大きい値を有するメモリセグメントに格納されたワードの中のポインタを検索する。値ＦＦＦＦまたはＦＦＦＥを有する任意のポインタは無視される。なぜなら、このポインタは、現在のＬＵＭのものよりも大きいアドレスを示しているが、これは、割り当てられたノードをまだ示していないポインタを表すからである。そうでない場合、不正確なポインタは、現在のＬＵＭのアドレスよりも大きいアドレスを有さなくてはならない。さらに、このような任意のポインタの正確な値は、ＬＵＭのアドレスである。
【００５６】
ステップ２５において、コンピュータ２は、不正確なポインタが見つけ出されたかどうかを決定する。見つけ出されなかった場合、ステップ２６は、カウンタ１０の次のビットをゼロにセットし、ルーティンは２３で終了する。誤ったポインタ値が見つけ出された場合、ステップ２７は、ポインタ値を修正するように、ＬＵＭのアドレスへのポインタ値を修正して、そのポインタ値を修正する。その後、２３で終了する前にステップ２６が実行され、これにより、カウンタ１０は、もはやエラーがないことを示す偶数の０を含む。
【００５７】
図３は、エラーが生じ、検出され、続いて修正される特定の実施例を示す。ＰＤＩの第１の値（値データ０）が、最後のワードまたはポインタフィールドがアドレス００１４にあるＰＤＩノード３０に格納される。ノード３０の最後のワードを示すポインタは、ＰＤＩテーブル９に格納される。ＰＤＩの次の値（値データ１）が到着した場合、コンピュータ２は、テーブル９の中のＰＤＩのポインタを見つけ出し、ポインタフィールド３１をチェックして、ノード３０がＰＩＤの直前の値を含むことを発見する。次の値は、ノード３２の値フィールドに書き込まれ、アドレス１２３４は、ノード３０のポインタフィールド３１に入力される（すべてのポインタは、１６進表示される）。カウンタ１０は、上述のように更新される。
【００５８】
同じＰＤＩの次の値（値データ２）が格納されるべき場合、コンピュータ２は、ポインタの軌線を追跡し、そして、ノード３２が直前の値を含むことを決定する。メモリセグメントの中のノードのために利用可能な次の空間の位置を突き止め、ノードにアドレス２２００のポインタフィールドが割り当てられる。ノードの割り当ては、アドレス２２００の最下位ビットを０に変更することによって実行され、従って、ＦＦＦＥをポインタフィールドに残す。値データ２は、ノード３３の値フィールドに格納され、カウンタ１０の次の非ゼロビットが０にセットされる。ノード３３を示すポインタは、ノード３２のポインタフィールドに書き込まれ始めるが、例えば、パワーの除去が完了し、それにより、不完全に書き込まれたポインタ２２７４がワード３２のポインタフィールドに存在する前に、カードをカードリーダから引き外すことによってパワーが取り除かれる。特に、バイナリ値００１０００１０００００００００がノード３２のポインタフィールドに書き込まれるべきであったが、その代わりに、バイナリ地００１０００１００１１１０１００がかきこまれた。なぜなら、第３、第５、第６および第７のビットの１から０への切換が、パワーが除去される前に実行されなかったからである。
【００５９】
パワーが次にカード１に与えられた場合、図４に閉めされるルーティンが実行される。これにより、ノード３３のアドレスフィールドがＬＵＭに格納されていること、および、ノード３２のポインタフィールドに格納されたポインタのアドレスがＬＵＭのアドレス２２００よりも高い値を有することを決定する。従って、ノード３２のポインタフィールドへの正確なポインタの書き込みは、このフィールドにおける適切なビットをスイッチングして正確なアドレス２２００を表すことによって完了する。
【００６０】
従って、不正確に書き込まれたポインタを検出および修正することが可能である。フラッシュメモリ３のセグメント内で必要とされるただ１つのさらなる空間は、クリティカル書き込みカウンタ１０のための空間である。カウンタ１０は、セグメントの中の比較的少ない空間を必要とするか、または、異なったセグメントに格納され得る。従って、ポインタエラーが検出され、かつ、メモリ内の縮小された格納空間の犠牲を最小にして修正され得る。
【００６１】
上述のある実施形態では、メモリセグメントは、フラグが各値の格納動作の終了時にセットされ、そして、さらなるフラグが各ポインタ追加動作の終了時にセットされるクリティカル書き込みカウンタを備える。これは、クリティカルライトの間に、ポインタアドレスを更新し、クリティカルカウンタが奇数値を示すことを保証する。しかしながら、更新のセットがあり、１つ以上のＰＤＩにされる場合、フラグは、更新のセットにおける第１のポインタ追加動作の前にクリティカル書き込みカウンタにセットされ得、さらなるフラグは、更新のセットにおける最終ポインタ追加動作の後にのみセットされ得ることも可能である。パワーがフラグのセッティングとさらなるフラグのセッティングとの間で停電した場合、次の電源投入時に検索が行われる。このアプローチの有利な点は、クリティカル書き込みカウンタが、セットの間に２回だけ書き込まれ、従って、少なくともパワーが停電しない場合に、システムをより高速にすることである。
【００６２】
これに代わる実施形態では、クリティカル書き込みカウンタ１０は省略され得る。この場合、コンピュータ２はパワーが再供給されるとき、任意のポインタエラーが生じたかもしれず、従って、格納されたポインタ値のすべてをＬＵＭのアドレスと比較しなければならないかどうかを教示し得ない。ポインタ値がＬＵＭのアドレスよりも高い場合、エラーが検出され、かつ、上述のように修正され得る。従って、この改変された技術では、メモリ容量の低減を犠牲にしないが、コンピュータ２が任意のエラーを検索するために、より多くの時間が必要とされる。
【００６３】
ＰＤＩを格納するために１つ以上のセグメントを有するフラッシュメモリ３の場合、同じ技術が、セグメントごとに用いられ得る。特に、各セグメントは、固有のＬＵＭを有し、ＰＤＩのサブセットを格納するために用いられ得る。
【００６４】
ＰＤＩの空間を分割することによってクリティカル書き込みカウンタ１０をいくつかの部分に分け、各カウンタがそれぞれの区画に関連することも可能である。例えば、メモリのいくつかのページがある場合、それぞれのカウンタは、アクティブページごとに提供され得る。さらに、各ページが分割され得、区画ごとに別個のクリティカル書き込みカウンタを有する。各区画におけるエラーを検索および修正することは、より迅速であるが、いくつかのクリティカル書き込みカウンタによってより多くのメモリ空間が必要とされ、各カウンタは、パワーが供給され、エラーがそれぞれの区画に存在するかどうかを決定する場合、各カウンタがチェックされなければならない。
【００６５】
クリティカル書き込みカウンタは、さらに、これがセグメントに割り当てられることによってＰＤＩとして扱われ得る。従って、更新チェーンにおける最後の項目は、カウンタのアクティブブロックである。これにより、より小さい量のメモリがカウンタに最初に割り当てられることが可能になり、従って、セグメントが小数の大きいＰＤＩで埋められる場合、無駄なスペースが少なくなる。
【００６６】
クリティカル書き込みカウンタは、これが関連するセグメントに格納され得るか、または、異なったセグメントに格納され得る。上述の場合、新しいクリティカル書き込みカウンタセグメントが別のクリティカル更新の最中に割り当てられないことを保証することが重要である。そうでない場合、他の更新が用いるＬＵＭが変更される。これを回避するために、新しいクリティカル書き込みカウンタセグメントに、必要とされるよりも早く、そして、クリティカル更新が実行されていないときに少数の更新が割り当てられ得る。
【００６７】
この技術は、さらに、ビットのすべてが０であり、メモリへの書き込みがビットの値の０から１への変更を含むようにリセットされるタイプのフラッシュメモリにも適用され得る。例えば、すべてのポインタは、反転した、または相補的形態で格納され得、そして、読み出される場合に、再び反転され得る。あるいは、このようなメモリを用いる場合、格納されるべき第１の値が最上位アドレスのノードに割り当てられ得、次の値は次のより低いアドレスに割り当てられかつ格納される。各ノードにおける最下位のアドレスのワードは、ポインタフィールドとして用いられる。この場合、ポインタ値が不正確に書き込まれた場合、このポインタは、ＬＵＭのアドレスよりも低いアドレスを示す。従って、間違ったポインタが検出され、その値が修正され得る。
【００６８】
これらの技術は、さらに、例えば、ビットが１から０に書き込まれるタイプのフラッシュメモリを用いることによって、メモリをより高位からより低位のアドレスに割り当てることによって、そして、ポインタを、反転した、または相補的形態で格納することによって組み合わされてもよい。
【産業上の利用可能性】
【００６９】
本発明は、パーシスタントメモリに書き込む際にエラーを検出するための方法および装置に関する。本発明は、さらに、このようなエラーの結果を修正するための方法および装置に関する。このような技術は、組込みシステムにおいて用いられ得、適切な応用例は、Ｊａｖａ（登録商標）カード等のスマートカード；スマートキーおよびスマートディスク等のデジタルアクティブストレージまたはセキュリティデバイス；携帯電話用のＳＩＭおよびＵＳＩＭ；データログデバイス；ユーザプリファレンスを記録し、セッティングを格納するか、または使用をログ記録する小型デバイス；車載コンピュータシステム；セットトップボックス；ならびにインターネットルータを含む。このような技術は、フラッシュメモリ等の「ライトワンスイレースインバルク」タイ、および「書き込み専用」タイプのパーシスタントまたは「不揮発性」メモリのために有用である。
【図面の簡単な説明】
【００７０】
【図１】図１は、ＰＤＩ値の公知のリンクチェーンを示す図である。
【図２】図２は、本発明の実施形態を構成する装置を示す図である。
【図３】図３は、本発明の実施形態を構成する方法による図２の装置の動作を示す図である。
【図４】図４は、本方法を示すフローチャートである。
【図１】
2006500653.tif 000003
【図２】
2006500653.tif 000004
【図３】
2006500653.tif 000005
【図４】
2006500653.tif 000006
【国際調査報告】
2006500653.tif 000007
2006500653.tif 000008
2006500653.tif 000009