(58)【調査した分野】(Int.Cl.,DB名)
前記不揮発性メモリは、既存データと新データとの間でのビットOR又はビットAND結合を、前記既存データを既に含む前記第2のメモリ領域に前記新データを書き込む場合に暗黙的に実行する、請求項1に記載の方法。
前記メモリブロックは、前記第2のメモリ領域に対する誤り訂正データを記憶する第4のメモリ領域を更に含み、前記メモリブロックを消去する状況では、前記第2のメモリ領域の誤り訂正データは決定されず、前記第4のメモリ領域に書き込まれず、それにより、実際のユーザデータ及び対応する誤り訂正データを前記第2のメモリ領域及び前記第4のメモリ領域に書き込むべきときまで、前記第2のメモリ領域及び前記第4のメモリ領域の両方を書き込み可能状態に保つ、請求項1に記載の方法。
前記第1のメモリ領域及び前記対応する誤り訂正データは、完全に消去される場合、基礎をなす誤り訂正コードの有効コードワードを形成しない、請求項1に記載の方法。
前記所定のデータパターン及び完全に消去されたデータの前記誤り訂正データは一緒に、基礎をなす誤り訂正コードの有効コードワードを形成する、請求項1に記載の方法。
前記第1のメモリ領域は第1のメモリワードであり、前記第2のメモリ領域は、前記第1のメモリ領域に対して既知のアドレス関係を有する第2のメモリワードである、請求項1に記載の方法。
前記第1のメモリ領域が更なる所定のデータパターンを含むか否かを確認することを更に含み、前記更なる所定のデータパターンは、少なくとも前記第1のメモリ領域に決定される前記結果として生成される誤り訂正データに影響せず、
前記第2のメモリ領域の前記データステータスを評価する動作は更に、前記第1のメモリ領域内での前記更なる所定のデータパターンの存在に基づいて実行され、それにより、前記データステータスに少なくとも3つの異なる値を区別することができる、請求項1に記載の方法。
前記第1のメモリ領域が前記所定のデータパターンをまだ含まず、前記第2のメモリ領域内に存在する可能性があるデータの無効化が望まれる場合、前記所定のデータパターンを前記第1のメモリ領域に書き込み、それにより、前記第2のメモリ領域内の前記存在する可能性があるデータを無効化する、書き込むことを更に含む、請求項1に記載の方法。
プログラムを記憶する非一時的なコンピュータ可読媒体であって、前記プログラムは、請求項1に記載の方法がコンピュータによって実行される場合、前記コンピュータに前記方法を実行させる、非一時的なコンピュータ可読媒体。
【発明を実施するための形態】
【0010】
以下に、幾つかの実施例について特にフラッシュメモリを参照して説明する。しかし、説明及び図はフラッシュメモリに限定されるものとして理解されるべきではなく、代わりに、他のタイプの不揮発性メモリにも適用される。フラッシュメモリの一属性は通常、単一のビットはプログラムのみ可能であり、ビットを少なくとも個々では消去することができないことである。これは、プログラミングにより、「0」から「1」にビット単位で変更することはできるが、通常、既に存在する「1」を「0」に変更することはできないことを意味する。フラッシュメモリでは通常、1つの比較的大きなブロックのデータ全体が同時に消去される。この制約に起因して、変更する必要があるデータを、現在使用されているブロックから既に消去されたブロックに配置換えする必要があり得、データを消去済みブロックに書き込む際、データは所望のように変更される。誤り訂正コードが利用される場合、結果として生成される誤り訂正データも通常、データ変更と共に変更される(特に、実際のデータでの変更は1ビットのみであっても、誤り訂正データは大きく変更され得る)。誤り訂正データが、データ及び対応する誤り訂正データが記憶されるメモリワードのメモリアドレスを考慮に入れることもある。この場合、誤り訂正データは通常、データを第1のメモリブロックから第2の消去済みメモリブロックにコピーする場合、変更される。
【0011】
換言すれば、「1」から「0」への変更は、ワード全体が消去される場合のみ可能である。フラッシュメモリでは、消去は通常、「多くの」ワードを含む「セクタ」又はブロックにわたってのみ可能である。なお、「プログラム済み」状態及び「消去」状態への論理「1」及び「0」の定義は、逆であることもあり、すなわち、フラッシュメモリによっては、「1」から「0」に変更することはできるが、「0」から「1」に戻ることができないものもある。
【0012】
さらに、安全要件に起因して、フラッシュメモリでのECCの特定の実施は以下の態様を使用する。アドレスを誤り訂正データに符号化し得、したがって、ECC=f(アドレス,データ)である。
【0013】
別の安全要件は、消去済みワード(全て0)又はプログラム済みワード(全て1)がecc有効であってはならないことを定義し得る。
【0014】
これにより、少なくとも2つの特定の問題が生じ、これらの問題は、提案される方法、フラッシュメモリコントローラ、及び非一時的なコンピュータ可読媒体によって対処される。
1.フラッシュメモリにおいて存在するワード「上」に有効ECCワードをプログラムし、再び有効ECCワードを取得すること(「1」は消去することができない)。
2.消去済みワードがECC有効ではなく、したがって、使用することができないフラッシュメモリの2つの別個の内容を有するマーカを使用すること。
【0015】
図1は、全て1のデータワード(0xFF・・・F)をメモリワードに書き込むことによるメモリワードの無効化を概略的に示す。しかし、この方法は、全て1のデータワードがECC有効であるか、又はECC有効であり得るという仮定に依存する。さらに、誤り訂正データはまた、個々のビットを消去することができないというフラッシュメモリ制約に起因して、全ての1のワードである必要がある。換言すれば、既存データの誤り訂正データが、特定のビット位置に「1」を有したが、全て1のデータワードの誤り訂正データが、同じビット位置で「0」を必要とする場合、通常、影響を受ける1ビットのみを消去することは可能ではない。このため、
図1Aの状況では、誤り訂正コードに関する以下の仮定がなされる。
ECC=(11・・・1)=f((11・・・1))=f(0xFF・・・F)
【0016】
図1Aの状況でなされた別の仮定は、アドレスが誤り訂正コードによって考慮されないというものである。
【0017】
これらの仮定又は付随条件を用いて、
図1Aは以下のように説明することができる。状態1において、フラッシュメモリのメモリワードは、任意のデータ、ここでは(01000110001)を含む。記憶された対応する誤り訂正データは、
ECC=(1100)=f(データ)=f(01000110001)
である。
【0018】
なお、データ又は誤り訂正データのいずれか又は両方は、様々な理由によりビットエラーを含み得る(データ書き込み時のエラー、記憶時間中に生じるビットエラー、放射線又は温度に起因するエラー等)。ビットエラーの数が、利用される誤り訂正コードの距離(例えば、ハミング距離)の半分未満である限り、ビットエラーは通常、首尾良く訂正することができる。
【0019】
ここで、データはもはや有効ではなく、無効化する必要があり得る。このために、状態は状態1から状態2に変更される。データ状態のこの変更は、全ての1のデータをメモリワードに書き込むことによって実行される。同時に、誤り訂正データも全て1のデータに変更される。データ及び誤り訂正データへのこれらの変更は、ビットを消去する(すなわち、「1」から「0」に変更される)必要がなく、生じる変更が、許されている「0」から「1」への変更のみであるため、可能である。したがって、
図1Aは、アドレスビットが誤り訂正コードによって使用されないため上手くいく無効化を示す。この無効化は、0xFF・・・FFが有効コードワードであることが許されているメモリの場合に可能である。
【0020】
しかし、
図1Aでの全て1のプログラミングがワードの前の内容を破壊することを念頭に置かれたい。このため、そのような全て1のプログラミングは限られた用途(例えば、無効化)しか有さない。さらに、この場合、誤り訂正コードはアドレス符号化を利用することができない。
図1Bに概略的に示されるように、仮にアドレス符号化が使用される場合には、少なくとも幾つかのアドレスで、全て1のワード(データと誤り訂正データとの組み合わせ)は、アドレス符号化に起因して、有効なコードワードではないことがある。
図1Bから見て分かるように、アドレスビットの使用に起因して、誤り訂正データ内の前の「1」を、無効化後に「0」である(
図1Bにおいて矢印で示される)必要があるが、これはフラッシュメモリでのビット単位のプログラミングを用いては不可能であるため、無効化は上手くいかない。
【0021】
代替又は追加として、他の安全要件により、全て1のワードは有効コードワードにならないことがある。例えば、アドレスが使用されない場合、有効コードワードとして0xFF・・・FFを使用することは、安全目標に起因して許されないことがある。
【0022】
別の選択肢は情報の消去であるが、フラッシュメモリでは、これはより大きな「粒度」、例えば、ワード線又はセクタでのみ可能であり得る。ワード線又はセクタレベルでのデータ消去は、他の情報を失うリスクの増大をもたらし得(例えば、データを別のワード線/セクタにコピーする場合)、これはセキュリティ及び/又は安全を理由として望ましくないことがある。さらに、データの消去には時間がかかり得る。さらに、リセットを実行する必要があることがあり、これは、フラッシュメモリの動作を中断させ、その結果、接続されたホストシステム(例えば、マイクロコントローラ)の動作を中断するおそれがある。
【0023】
図2Aは、メモリワードのデータステータスの変更を概略的に示し、特別なパターンが、メモリワード全体にマーカとしてプログラムされる。
図2Bは、メモリワードの同様の変更を示し、特別なパターンが、メモリワードの部分でのマーカとしてプログラムされる。専用パターンが、以下の属性を用いて計算される。
−専用パターン(所定のデータパターン)はECC有効であり、
−元のデータを維持する必要がある位置に「0」を有し、
−メモリワードへのパターンの追加は、既存のECCチェックビットを変更せず(すなわち、ecc(パターン)=0)(例えば、線形ecc符号で可能)、
−このパターンは、データ範囲で全て0であるか、又はパターンによって使用されないデータビットの部分を使用する既存のword_old「上」にプログラムすることができる。
【0024】
図2A又は
図2Bによる方法は、既に有効ECCワードが利用可能な(word_old)メモリ位置に有効ECCワード(パターン)をプログラミングすることに基づく。これは「オーバープログラミング」と呼ばれる。
【0025】
フラッシュメモリ属性(プログラミング中、論理「1」セルは消去されない)に起因して、結果は、
word_new=word_old OR パターン
であり、式中、ORはビットORである。
【0026】
あらゆるアドレスでecc(パターン)=0であるため、プログラミングはあらゆるアドレスで可能である。
【0027】
既存データword_oldは、データに全て0を含み得る。誤り訂正データeccビットは通常、アドレスがデータと共に符号化されない場合、全て=「0」ではない。これは
図2Aに概略的に示される。アドレスの使用に起因して、通常、全てのECCチェックビットが「0」になるわけではない。むしろ、データ内の0x00・・・00は通常、特定のeccビット=「1」になる。幾つかの少数の選択されたアドレスでは、全てのECCチェックビットが「0」であることが生じ得る。
【0028】
代替では、
図2Bに概略的に示されるように、既存データは、特定のビット範囲内に任意のデータを含むこともできる。
図2Bでは、このビット範囲は、メモリワードの5つの最上位ビット(MSB)に対応する。メモリワードの残りの6ビット(6つの最下位ビット、LSB)は、状態1中に使用されない空きビット位置である。
【0029】
所定のデータパターン(専用パターン)は、
−完全なメモリワード上にある(元データが全て0である場合)−>
図2A参照、又は
−word_oldデータビットによって使用されていない残余ビット範囲(「0」)のビット位置上のみにある−>
図2B参照。
【0030】
プログラミングは、旧データ/パターンの分割が全てのワードで同じである限り、そしてパターンが、Gen_Mat×パターン=0(=ECCビット)を可能にするのに十分な数のビットを含む場合、メモリ範囲全体にわたって可能であり、ここで、Gen_Matは誤り訂正コードの生成行列である。必要なビット数は、コード及び行列の特徴(ハミング距離、線形独立行列列の数等)に依存する。
【0031】
図1Aと比較すると、
図2A及び/又は
図2Bの方法はより柔軟な解決策を提供する。特に
図2Bの場合、旧データは保持され、なお読み出すことが可能である。全て1のパターンが許されない安全ECCと、
図2A及び
図2Bによる方法を併用することが可能である。
【0032】
ここで、第1のデータステータスを所定データパターンの不在に割り当て、第2のデータステータスを、メモリワード等のメモリ領域内の所定のデータパターンの存在に割り当てることができる。例えば、
図2Bでは、所定のデータパターン又は「マーカ」の不在は、5つのMSB内のデータが有効であることとして解釈し得、所定のデータパターンの存在は、5つのMSB内のデータがもはや有効ではないこととして解釈し得る。代替の実施態様では、逆の変換を使用し得る:所定のデータパターンの不在は無効データを示し、所定のデータパターンの存在は有効データを示す。
【0033】
既存データの「無効化」に所定のデータパターンのオーバープログラミングを使用することも可能である。例えば、第1のデータ状態(「マーカ状態1」)は、
データ=<既存データ,0,ecc_checkbits>
であり得る。
【0034】
第2のデータ状態(「マーカ状態2」)は、
データ=<既存データ,所定のパターン,ecc_checkbits>
であり得る。
【0035】
ecc_checkbitsの形態の誤り訂正データは、既存データ(及び場合によってはアドレス)に基づく。誤り訂正データecc_checkbitsは、所定のパターンによって変更されない。この意味では、所定のパターンを使用することにより、他のメモリ領域(「第2のメモリ領域」)に何かをプログラムすることが許されているか否か、又は有効データが既に存在するか否かを区別せず、他のメモリ領域(すなわち、「第2のメモリ領域」)に有効又は無効データが存在するか否かを区別する。
【0036】
一例として、上述した属性を有する2つ以上の所定のデータパターンを使用し得る。例えば、2つの所定のデータパターンを使用する場合、以下のデータステータスシーケンスを示すことが可能である:「書き込み可能」→「有効データ」→「無効データ」。データステータス「書き込み可能」は、メモリワード内に任意の所定のデータパターンがないことによって示される。ユーザデータはここで、メモリワードの部分(例えば、
図2Bの例では5つのMSB)に書き込むことができる。同時に、第1の所定のデータパターンが、残りのビット範囲(例えば、
図2Bでの6つのLSB)に書き込まれ、その存在は、メモリワードがここでデータステータス「有効データ」であることを示す。データが無効になると、データステータスは、第1の所定のデータパターンに第2の所定のデータパターン(更なる所定のデータパターン)を上書きすることにより、「無効データ」に変更することができる。なお、第2の所定のデータパターンは通常、第1の所定のデータパターンが「1」を有するビット位置に「1」を有さなければならず、その理由は、「1」から元の「0」への1ビットのリセットが可能ではないというフラッシュメモリの制約による。したがって、第2の所定のデータパターンは、条件:
第2のパターン=第1のパターンOR additional_bit(s)
を満たし、ここで、additional_bit(s)≠(00・・・00)であり、すなわち、可変additional_bit(s)は全て0のベクトルに等しくない。換言すれば、第2のパターンは、第1のパターンが「0」を有するビット位置に少なくとも1つの追加の「1」を有することを除き、第1のパターンと同一である。代替として、データ、第1のパターン、及び第2のパターンに専用のビット範囲を受信することができる。したがって、メモリにアクセスすることは、第1のメモリ領域が所定のデータパターン及び更なる所定のデータパターンのうちの一方を含むか否かを確認するステップ又は動作を含み得る。所定のデータパターン(第1の所定のデータパターン)のように、更なる(又は第2の)所定のデータパターンも、少なくとも第1のメモリ領域に決定される、結果として生成される誤り訂正データに影響しない。第2のメモリ領域のデータステータスを評価する動作は、第1のメモリ領域内での(第1の)所定のデータパターン及び更なる所定のデータパターンの存在又は不在に基づいて実行し得る。このようにして、データステータスに少なくとも3つの異なる値を区別することができる。
【0037】
別の任意選択的な拡張は、「マルチレベルマーカ」であり、これについての応用例をこれより提供する。顧客ソフトウェアによって開始される第1のプログラミング動作中、例えば、32ビットのユーザデータをメモリに書き込む。32ビットユーザデータは、誤り訂正データ(ECCチェックビット)で完了し、有効コードワードを形成する。まとめると、これは、第1のプログラミング(顧客)→32ビットユーザデータ→ECCチェックビットとして表現し得る。
【0038】
その後、第2のプログラミング動作が顧客ソフトウェアによって開始される。したがって、追加の32ビットのユーザデータが書き込まれる。更なる32−22ビットは、ECCチェックビットへの新しい(32+32)ビットの寄与がゼロであるように計算される。したがって、チェックビットの変更は必要ない。
【0039】
顧客ソフトウェアによる第3のプログラミング動作中、更に別の更なる32ビットセットのユーザデータを不揮発性メモリに書き込む必要がある。これは、第2のプログラミング動作と同様にして行い得る。この方式を第4、第5、第6、・・・のプログラミング動作に続ける(合計データビットの最大数に達するまで)ことも可能である。
【0040】
一般に、提案される拡張によれば、さらにyビットのデータビットがなお空いている(すなわち、通常「0」)場合、xデータビットをコードワードにプログラムすることが可能であり、これらは、ECCチェックビットを変更する必要がないように、アドレス、前のデータ内容、及び新データに基づいて計算される。このために、パリティチェック行列Hのy列は線形に独立する(→y=22)か、又はより多数の列が必要である(サブスペース)。
【0041】
メモリ内のワードを参照する場合、「ワード」という用語は、本明細書ではここで定義されるように使用される。
ワード:
=nデータビット+cビットのeccチェックビット
=有効ECCコードワードをもたらすプログラム可能な最小単位
【0042】
現実的な例:n=256、c=22
これらの値を用いると、256ビットは、例えば、4×(32+32)ビットに細分することができ、これにより、元のECCチェックビットが変更されない限り、1ワードにおいて最高で4回のプログラミング動作を実行することが可能になる。
【0043】
フラッシュメモリは、本明細書での示唆から大きな恩恵を受け得るが、本明細書での示唆は、他のタイプのメモリ、特に不揮発性メモリに関連して実施することも可能である。単方向ビット単位変更可能性等の幾つかのフラッシュ固有の制限は、一般的な不揮発性メモリには当てはまらないことがあるがそれでも、フラッシュメモリ以外のメモリ技術も、本明細書で示唆されるものから恩恵を受け得る。例えば、マルチプログラミングが可能なことにより、ワード全体を再プログラムする必要なく、メモリワード全体の部分のみをプログラムすることが可能になる。これにより、個々のメモリセルが再プログラミングされる頻度が減り、したがって、受けるストレスが低減し得る。実際に、各プログラミング動作又は消去動作は、メモリセルの幾らかの物理的ストレスを伴う。別の利点は、ビット値を変更する必要があるメモリワードの部分のみが再プログラムされる場合、再プログラムする必要があるメモリセルの数を低減することができるため、消費電力を低減し得ることである。
【0044】
図3は、わゆる「2部分マーカ」が使用される方法を概略的に示す。
【0045】
図3は、フラッシュメモリでの2状態マーカ(2部分マーカ)の一実施態様及び/又は使用を概略的に示す。この技法は、ECC無効であるため、消去済み状態を使用することができないフラッシュメモリで特に使用することができる。
【0046】
マーカ、すなわち所定のデータパターンは2つの部分を含む。図示の実施態様例では、各部分はフラッシュメモリの1つのメモリワードをカバーする。したがって、第1の部分(「マーカ部分1」)は、フラッシュメモリのアドレス「x」でのメモリワードに対応する。第2の部分(「マーカ部分2」)は、次のアドレス「x+1」でのメモリワードに対応する。第1の部分は常に、ecc有効ワードとして読み出すことができる。状態1では、第1の部分は、有効eccビットを有する全て0としてプログラムされる。アドレス「x+1」での第2の部分は、状態1で消去され、読み出してはならない。消去済み状態が、事前変換及び/又はユーザ要件に従って、フラッシュメモリによってはECC無効であり得ることを想起する。
【0047】
状態1から状態2になる際、追加の特別なパターンが第1の部分にプログラムされる。この特別なパターンは、ecc(パターン)=Gen_Mat×パターン=0であるため、eccビットを変更しない。さらに、追加の任意選択的な特徴として、特別なパターンはアドレスに依存せず、したがって、任意のアドレスで使用することができる。同時に、第2の部分には、所望データが初めてプログラムされる。所望のデータはいわゆるマーカデータ(例えば、記号論理情報)であり得る。換言すれば、第2の部分には任意のデータをプログラムして、任意の顧客関連情報(例えば、ソフトウェアバージョンについての論理記号情報)を記憶することができる。第2の部分は、ECC有効ワードとして状態2において読み出すことができる。
【0048】
図3に概略的に示される技法により、顧客は、最初にECC有効「0」であり、後に任意のデータ内容で第2の状態に変更することができるマーカを実装することができる。
【0049】
特殊なタイプのフラッシュメモリは「Pフラッシュ」(プログラムフラッシュ)として既知である。例えば、自動車マイクロコントローラで使用されるフラッシュメモリの場合、フラッシュは2つの部分に分割し得る:コードメモリ及びデータメモリ。コードメモリは、マイクロコントローラのCPUのコードをオンチップで記憶するために使用される。CPUは、コードメモリから読み出されたコードを実行する−この読み出しパスは場合によっては、安全要件に従って非常によく保護し、誤りの訂正及び訂正不可能な誤りの検出を高レベルで可能にする必要がある。フラッシュメモリ、特にPフラッシュでの安全ECCが、メモリ(Pフラッシュ)の消去済み範囲がECC有効ではないように行われることが望ましいことがある。例えば、相手先商標製品の製造会社(OEM)又は自動車供給業者等の顧客は、対応する顧客要求を定義し得る。この仮定の下では、消去済みワードの読み出しは、ECCのエラーフラグを生じさせる:非訂正可能な誤りが発生する。その結果、ソフトウェアプログラムの実行が中断されるおそれがある。この安全対策は、フラッシュメモリの割り振られた部分(「割り振られた」はここでは、ソフトウェアプログラムによって実際に使用されることを意味する)内の消去済み範囲の発生が、メモリ破損又はメモリ内容の他の予測不可能な変更を示し得るため、存在理由を有し得る。大概、命令ポインタはデータが存在しないメモリアドレスに飛ぶ。この場合、ソフトウェアプログラムはフラッシュメモリ内のデータの正確性に頼ることができず、そのため、深刻な問題が生じる前に、ソフトウェアプログラムの実行を終了することが賢明であり得る。
【0050】
しかし、Pフラッシュソフトウェアローダ、スタートアップ中のブートマネージャ、及びアプリケーションコード等の特別なソフトウェア又はプログラムは、特定のPフラッシュ「範囲」が実際に消去されたことをチェックする必要があり得る。このために、Pフラッシュに書き込まれたコード/データの状態を識別するマーカが必要であり得る。以下の説明は、「2部分」マーカ解決策を強調した幾つかの可能な解決策を示す。
【0051】
2部分からなる(又は2部分を含む)マーカの使用が提案される。2部分(部分1及び部分2)の特徴、機能、及び/又は目的を以下に説明することができる。
部分1:
常にECC有効であり、
常にソフトウェアによる読み取りが可能であり、
マーカの2つの状態を区別するためだけに使用される
部分2:
マーカが更新されない限り、消去済み状態であり、
部分1が第2の状態に変更されない限り、ソフトウェアによって読み出されない。
【0052】
図3に示されるように、状態1の第1の部分(マーカ部分1)は、ECCオン(すなわち、誤り訂正がアクティブな)状態で「全て0」としてプログラムされる。アドレス符号化に起因して、幾つかのチェックビットは「0」ではない。換言すれば、eccチェックビットのうちの少なくとも幾つかは、アドレスに依存する。実際のメモリワード内の「全て0」ベクトルと対応する誤り訂正データとの組み合わせが、有効コードワードを定義する。上述したように、1ビット位置又は少数ビット位置でのランダムビットエラーの発生は通常、除外することができないが、誤り訂正データに基づく比較的強力な誤り訂正能力に起因して、そのようなビットエラーは、大半の場合、訂正することができる。
【0053】
同時に、第2の部分(マーカ部分2)は、状態1ではなお消去済み状態である。したがって、全てのビットは、eccチェックビットを含め、「0」である。これは有効eccコードワードを形成しないため、読み出されてはならない。対応するメモリアドレス「x+1」を読み取ろうとすると、通常、eccエラー(ECCのエラーフラグ)が生じる。第1の部分と第2の部分とのアドレス関係は既知である:第1及び第2の部分は連続アドレス「x」及び「x+1」に記憶される。第1の部分のアドレスと第2の部分のアドレスとの間のページオフセット、ブロックオフセット、又はセクタオフセット等の他のアドレス関係も可能である。アドレス関係は既知であるため、まず、第1の部分が予期され得る可能な(全ての)アドレス、例えば、全ての偶数アドレス0、2、4、6、・・・をクエリすることが可能である。通常、これらのアドレスは、ecc有効コードワード又は少なくともecc訂正可能なワードを含むため、安全に読み出すことができる。第1の部分が全て0のベクトルである場合、アドレス「x」及び「x+1」でのメモリワード対が2部分マーカを形成し、上記2部分マーカの現在データステータスが「状態1」であると結論付けることができる。これは、第2の部分のメモリワードがなお、完全に消去されており、このため、読み出されてはならないことを意味する。他方、完全に消去されたメモリ範囲は「書き込み可能」であり、したがって、かなり多様的であり、任意の(略あらゆる)データの記憶に使用することができる。
【0054】
アドレス「x」及び「x+1」でのメモリワード対を含むメモリ領域のデータステータスを状態1から状態2に変更する場合、特別なデータパターンがマーカ部分1にプログラムされる。マーカ部分2はここで初めて(最後のセクタ単位の消去以来)、所望のマーカデータ(例えば、記号論理情報)がプログラムされる。
【0055】
状態2では、マーカは「0」ではなく、情報を含む。ecc(特別なパターン)=0であるため、マーカ部分1の誤り訂正データは変更されない。特別なデータパターンはマーカ部分1にプログラムされる。アドレス「x」での第1のメモリワードのデータ内容は重要ではなく、状態1と状態2とを区別するためだけに使用される。特別なデータパターン及びそれに対応する誤り訂正データは、通常のアプリケーションコードによって読み出すことができる有効コードワードを形成する。
【0056】
状態2でのマーカ部分2に関して、特定のデータ(例えば、記号論理内容)はここで、アドレス「x+1」においてメモリワードにプログラムされる。特定のデータ及びそれに対応する誤り訂正データ(通常、実際のデータビットの隣の追加のビットにおいてフラッシュメモリにも記憶される)は、通常のアプリケーションコードによって読み出すことができる有効コードワードを形成する。
【0057】
2部分マーカは、常にECC有効(少なくともマーカ部分1)であり、したがって、安全eccがオンの状態であっても常に読み出し可能であるという望ましい属性を有する。このため、プログラマにとってトラップになることが多いいかなる回避策も提供する必要がなく、すなわち、「トラップなし、回避策なし」である。さらに、チェックのために読み出し動作を実行するだけでよいため、比較的高速である。シーケンス動作が必要ない。マーカ部分2に関して、プログラムされると、任意の論理データを含み得る。
【0058】
特別なデータパターンは、マーカの部分1に必要である。したがって、上記特別なデータパターンは、この特定の目的に確保された値である。これは、マーカのメモリアドレスが既知である場合(大抵既知である)、通常のデータのようにも見え得る。この特別なデータパターンは、例えば、フラッシュメモリコントローラの製造業者によって選択されて提供される。特別なデータパターンは通常、全てのアドレスに使用することができる。これにより、1つのデータパターンしかプログラム/比較のためにコードに記憶する必要がないため、使用が容易になる。
【0059】
ここで、特別なデータパターン(所定のデータパターン)についての幾らかの背景情報を提供する。
ECC=チェックビット
ECC=f_ecc(DATA+ADDR)=f_ecc(DATA)+f_ecc(ADDR)
【0060】
したがって、誤り訂正コードは線形である。
【0061】
マーカ状態1:
DATA=0・・・0:
=>ECC=f_ecc(0・・・0)+f_ecc(ADDR)=f_ecc(ADDR)
【0062】
これは、チェックビット(ECC)がアドレスによって完全に決定されることを意味する。
【0063】
マーカ状態2:
DATAは0・・・0に等しくなく、f_ecc(DATA)=0である:
=>ECC=f_ecc(01・・・10)+f_ecc(ADDR)=f_ecc(ADDR)
【0064】
これは、チェックビット(ECC)がここでも、アドレスによって完全に決定されることを意味する。
【0065】
結論:特別なDATAパターンを全てのアドレスに使用することができる。
【0066】
フラッシュメモリ又はフラッシュメモリコントローラが、提案されるマーカ技法を使用する場合、ユーザマニュアル、データシート、又はアプリケショーンメモは通常、誤り訂正コードの使用に関する幾らかの説明を提供すべきである。例えば、どのコードワードが有効であり、どれが無効であるかについての情報をユーザマニュアル又はデータシートにおいて提供し得る。さらに、通常、ECCにより、アドレスがデータワードと一緒に保護されるか否か、又は別の方法が利用されるか否かについての情報を提供すべきである。ユーザマニュアル又はデータシートは通常、全て0及び/又は全て1が有効なコードワードであるか否かについてもユーザに通知する。
【0067】
図4は、第1のメモリ領域及び第2のメモリ領域を含むメモリ領域を概略的に示す。第1のメモリ領域及び第2のメモリ領域は、メモリ領域のサブ領域である。メモリ領域は、第3のメモリ領域及び第4のメモリ領域も含む。再び第1及び第2のメモリ領域を参照すると、第1のメモリ領域は、アドレスADRにおける第1のメモリワード(例えば、16ビットワード、32ビットワード、又は64ビットワード)に対応する。第2のメモリ領域は、第1のメモリワードに直接続くアドレスADR+1における第2のメモリワードに対応する。第1及び第2のメモリ領域は、ユニットとして見なされ、第1のメモリ領域は、メモリ領域に関するデータ状態情報の記憶に使用される。第2のメモリ領域は、実際のデータの記憶に使用される。
【0068】
第3のメモリ領域は、第1のメモリ領域に対する誤り訂正データを記憶するように構成される。第4のメモリ領域は、第2のメモリ領域に対する誤り訂正データを記憶するように構成される。
【0069】
図5は
図4と同様である。しかし、メモリ領域は1つのメモリワードおよびその誤り訂正データのみに広がる。メモリワードは2つの部分、すなわち、第1のメモリ部分及び第2のメモリ部分に分割される。例えば、メモリワードが16ビット幅である場合、メモリワードの8つの最上位ビット(MSB)が、第1のメモリ領域に確保し得、メモリワードの8つの最下位ビット(LSB)は、第2のメモリ領域に確保し得る。第1のメモリ領域と第2のメモリ領域との間での他の分割も可能である。第1のメモリ領域及び第2のメモリ領域がインタレースされることさえあり得る(例えば、偶数ビット:第1のメモリ領域、奇数ビット:第2のメモリ領域)。
図5のメモリ領域は、誤り訂正データへの第3のメモリ領域も含む。
【0070】
図6は、フラッシュメモリにアクセスする方法の概略流れ図を示す。方法は、フラッシュメモリの第1のメモリ領域を読み出すステップ602を含む。第1のメモリ領域は、2つの異なる実施態様で
図4及び
図5に概略的に示される。ステップ604において、第1のメモリ領域が所定のデータパターンを含むか否かが確認される。所定のデータパターンは、少なくとも第1のメモリ領域に対して決定される、結果として生成される誤り訂正データに影響しない。対応する誤り訂正データは、第3のメモリ領域に記憶し得る(
図4及び
図5参照)。次に、ステップ606において、第1のメモリ領域内の所定のデータパターンの有無に基づいて、フラッシュメモリの第2のメモリ領域のデータステータスを評価し得る。
【0071】
方法は、データステータスが、第2のメモリ領域内に有効データが存在することを示す場合、第2のメモリ領域を読み出すステップを更に含み得る。このようにして、第2のメモリ領域を読み出すことは、条件付きでのみ実行され、それにより、第2のメモリ領域への読み出しアクセスを制御することができる。特に、第2のメモリ領域への読み出しアクセスは、対応する誤り訂正データのメモリ領域と共に、第2のメモリ領域が完全に消去されており(すなわち、書き込み可能)、且つ完全に消去された状態が有効ECCコードワードではない場合、回避することができる。換言すれば、完全に消去された第2のメモリ領域への不法読み出しアクセスは、メモリ領域のデータステータスの先の特定を実行することによって回避することができる。
【0072】
さらに、データステータスにより、第2のメモリ領域が書き込み可能であることが示される場合、データを第2のメモリ領域に書き込むことを提供し得る。同じ状況で、所定のデータパターンは、第1のメモリ領域に書き込まれて、第2のメモリ領域での有効データの存在を示すようにデータステータスを変更する。第1のメモリ領域によって示されるデータステータスが、第2のメモリ領域に含まれる実際のデータに一致しないことを回避するために、両書き込み動作は通常、分離不可能である。
【0073】
メモリの個々のメモリセルは、単方向様式でのみ個々に再プログラム可能である。この文脈では、「単方向様式」は、例えば、「0」から「1」への遷移は可能であるが、「1」から「0」への遷移は不可能なことを意味する。フラッシュメモリは、単一レベルセル(SLC)又はマルチレベルセル(MLC)に基づき得る。マルチレベルセルの場合、例えば、「0」から「1」を経て「2」を経て「3」に至る(すなわち、00から01、そして10、そして11への)遷移が、プログラムのために可能であり得るが、「3」から「2」、そして「1」、そして「0」への遷移は不可能であることがある。「個々」という言葉は、メモリセルの個々(通常、1ビット、又はMLCの場合にはnビット)のプログラミングのみがこの制約を受け、ブロック単位又はチップ単位の消去(「逆方向」での再プログラミング)は実際に可能であり得ることを指す。既に「終了ステータス」(例えば、「1」)に達したメモリセル内の既存データは、所定のパターンによってそれ以上変更されない(それ以上の変更が単に、フラッシュメモリでの個々のビットプログラミングで可能ではないため)。
【0074】
フラッシュメモリは、既存データと新データとの間で、上記新データを、既存データを既に含む第2のメモリ領域に書き込む場合、ビットOR結合を暗黙的に実行し得、すなわち、
結果として生成されるメモリ内容=既存データ OR 新データ
である。
【0075】
方法は、第1のメモリ領域、第2のメモリ領域、及び第3のメモリ領域を含むメモリブロックを消去して、メモリブロックを書き込み可能状態にリセットし、消去済み第1のメモリ領域、消去済み第2のメモリ領域、及び消去済み第3のメモリ領域を取得するステップを更に含み得る。メモリブロックの代わりに、データは、別のレベルで消去することもでき、例えば、メモリセクタ、メモリページ、又はメモリチップ全体の消去も可能である。次に、消去済み第1のメモリ領域に基づいて、第1のメモリ領域の誤り訂正データを決定し得る。場合によっては、誤り訂正データは、第1のメモリ領域のアドレスに依存し得る。方法は、第1のメモリ領域の誤り訂正データを消去済み第3のメモリ領域に書き込むことも含む。
【0076】
前段落で説明したものに付け加えて、メモリブロックは、第2のメモリ領域に対する誤り訂正データを記憶する第4のメモリ領域を更に含み得る。メモリブロックを消去する状況では、第2のメモリ領域の誤り訂正データは決定されず、第4のメモリ領域に書き込まれず、それにより、実際のユーザデータ及び対応する誤り訂正データを第2のメモリ領域及び第4のメモリ領域に書き込むべきときまで、第2のメモリ領域及び第4のメモリ領域の両方を書き込み可能状態に保つ。
【0077】
所定のデータパターン及び完全に消去された誤り訂正データは、基礎をなす誤り訂正コードの有効コードワードを形成する。換言すれば、ビットベクトル(パターン,0,・・・,0)は、誤り訂正コードのコードワードであり得る。
【0078】
第1のメモリ領域は第1のメモリワードであり得、第2のメモリ領域は、第1のメモリ領域に対して既知のアドレス関係を有する第2のメモリワードであり得る。代替の態様によれば、第1のメモリ領域は、メモリワードが第1のメモリ領域及び第2のメモリ領域に分割されるようなメモリワードの第1の部分であり得、第2のメモリ領域はメモリワードの第2の部分であり得る。しかし、この第2の事例では、第1のメモリ領域及び第2のメモリ領域は同じ誤り訂正データを共有する。これは、少なくとも一般的な様式で、任意の様式で第2のメモリ領域のデータ内容を変更することが可能ではないことを意味し、その理由は、これが、誤り訂正データに影響を有し得、すなわち、誤り訂正データを変更する必要があるためである。幾つかの少数の事例では、「0」から「1」へのビット遷移のみが行われるため、誤り訂正データのそのような変更が可能であり得る。しかし、一般的な場合、誤り訂正データは、要求される様式で変更することができない。考慮に入れる必要がある制限についてのより詳細な説明に関しては、
図2A及び対応する説明を参照する。
【0079】
図7は、更に提案される方法の概略流れ図を示す。方法は、フラッシュメモリ内のメモリ領域の既存データ上に、マーカとして所定のデータパターンをプログラムするステップ702を含む。メモリ領域(フラッシュメモリにも記憶される)の誤り訂正データは、所定のデータパターンの存在又は不在によって変更されず、すなわち、所定のデータパターンは誤り訂正コードにトランスペアレントである。所定のデータパターンが誤り訂正コードのヌル空間内にあると言うこともできる。既存データの条件は、既存データ内のビットが、所定のデータパターンのビットに必要なビット位置にないことである。ステップ704において、メモリ領域への読み出しアクセス又は書き込みアクセスが近々実行される場合、まず、メモリ領域が所定のデータパターンを含むか否かを評価し、メモリ領域内の所定のデータパターンの存在又は不在に基づいて、メモリ領域のデータステータスを決定する。
【0080】
図8A及び
図8Bは、フラッシュメモリへの読み出しアクセス、書き込みアクセス、及び消去アクセスを管理する方法の概略流れ図を示す。ステップ802において、完全なメモリセクタ(又はブロック)が消去される。その結果、現時点で、メモリセクタ全体が書き込み可能である。なお、完全に消去された状態は、フラッシュメモリによっては(安全を理由にした規約又は対応する顧客要求に起因する)ECC有効ではないことがある。したがって、ステップ804において、消去されたメモリセクタ内の少なくとも1つの第1のメモリ領域のECCデータが決定される。ECCデータは、第1のメモリ領域のアドレスに依存し得る。実際用途では、1つ置きのメモリワード(例えば、偶数アドレス0x0、0x2、0x4、・・・におけるメモリワード)を複数の第1のメモリ領域として考え得る。ステップ804の結果、第1のメモリ領域の誤り訂正データは、ステップ806において、適するメモリ領域、すなわち、第3のメモリ領域(例えば、
図4及び
図5参照)に書き込まれ、したがって、ステップ806が完了した後、第1のメモリ領域は第1のメモリ領域と共に、ECC有効である。
【0081】
後に、アプリケーションコードは、フラッシュメモリ内の特定のメモリワードを読み出すことが可能であるか否か、又はデータを上記メモリワードに書き込むことが可能であるか否かをチェックしたいことがある。このために、ステップ808において、第1のメモリ領域を読み出し得る。続くステップ810において、第1のメモリ領域が所定のデータパターンを含むか否かが確認される。答えがいいえ(「N」)である場合、第2のメモリ領域のデータステータスは「書き込み可能」であり、方法は接続点1に続く。答えがはい(「Y」)である場合、第2のメモリ領域のデータステータスは「有効データ(が)存在」である。
【0082】
分岐点812において、第2のメモリ領域への読み出しアクセスを行うべきか否かを判断する。この問いへの答えは通常、アプリケーションコードによって提供される。答えがいいえである場合、方法は接続点2に続く。他の場合、方法はステップ814に続き、有効データが第2のメモリ領域から読み出される。ステップ814の後でも、方法は、
図8Bに見出すことができる接続点2に続く。
【0083】
図8Bは、上部の接続点1から開始され、これは分岐点810の「いいえ」の答えに対応する。したがって、第2のメモリ領域のデータステータスが「書き込み可能」であることが今確認された。ステップ816において、アプリケーションコードは、第2のメモリ領域への書き込みアクセスを実行すべきであるか否かについてクエリされる。答えが「いいえ」である場合、方法は接続点2に続き、これはステップ818と824との間に見出すことができる。ステップ816でのクエリへの答えが「はい」である場合、2つの動作の非分離結合818が実行される:まず、ステップ820において、所望のデータが第2のメモリ領域に書き込まれ、次に、ステップ822において、所定のパターンが第1のメモリ領域に書き込まれる。ステップ820及び822の順序は逆にすることもできる。非分離結合818が実行された後、方法は接続点2に達する。
【0084】
接続点2に続き、分岐点824は、完全なメモリセクタ(又はメモリブロック)の消去に関して提供される。この判断は通常、フラッシュメモリ又はフラッシュメモリコントローラのいわゆる「ガーベッジコレクタ」によってなされる。完全なメモリセクタを消去する判断がなされる場合、方法は接続点3に続き、これは
図8Aの上部に見出すことができる。逆の場合、方法は接続点4に続き、これは
図8Aのステップ808に繋がる。完全なメモリセクタの消去は、任意の既存データを別のメモリセクタにコピーすることを含み得る。
【0085】
図9は、ホストシステム910、フラッシュメモリコントローラ920、及びフラッシュメモリ940の概略ブロック図を示す。バス915を提供して、ホストシステム910をフラッシュメモリコントローラ920、そして場合によっては更なる周辺機器に接続し得る。フラッシュメモリコントローラ920については、
図10においてより詳細に説明する。
【0086】
フラッシュメモリ940は、幾つかのメモリブロック、例えば、ブロック0、ブロック1、ブロック2、・・・を含み得る。各ブロックは、複数のページ、例えば、ページ0から始まって127までの128のページを含み得る。各ページは、幾つかのメモリワード、例えば、128のメモリワードに細分されている。上述したように、使用されるフラッシュ技術(2つの最も広く使用されているタイプを挙げれば、NANDフラッシュ又はNORフラッシュ)に応じて、NANDフラッシュの場合と同様に、一度に1ページ全体でデータをフラッシュメモリに読み書きし得る。NORタイプフラッシュでは通常、単一のマシンワード(バイト)を独立して書き込むか、又は読み出すことができ、すなわち、最小書き込み粒度はECC幅に等しいが、より大きくてもよい(結合された幾つかのECCワード)。データを消去する必要がある場合、これは通常、一度に1ブロック全体でのみ可能である。フラッシュは通常、例えば、EEPROMよりも小さなフットプリントを有し、したがって、面積当たりより多数のデータを記憶することができる(より高いデータ密度)。フラッシュメモリは、特に大量のデータを書き込む場合、幾つかのタイプの非フラッシュメモリよりも優れた速度利点を示し得る。
【0087】
図10は、フラッシュメモリコントローラ920の概略ブロック図を示す。フラッシュメモリコントローラ920は、パターンプログラマ921と、所定のパターンの記憶装置922と、パターンコンパレータ923と、任意選択的なガーベッジコレクタ924と、メモリアドレスマネージャ925と、誤り訂正ユニット(ECCユニット)926とを備える。フラッシュメモリコントローラ920は、バス915及びフラッシュメモリ940に接続される。バス915は通常、データバス、アドレスバス、及び/又は制御バスを備える。
【0088】
パターンプログラマ921は、所定のデータパターンをフラッシュメモリ940のメモリ領域に書き込むように構成される。既に述べたように、所定のデータパターンは、少なくとも第1のメモリ領域に対して決定される、結果として生成される誤り訂正データに影響しない。所定のパターンは、フラッシュメモリコントローラ内の記憶装置922によって提供される。記憶装置922は、レジスタにハードワイヤード接続されるか、又はレジスタを備え得る。所定のデータパターンを書き込むべきフラッシュメモリ940内のアドレスは、メモリアドレスマネージャ925によって決定され、フラッシュメモリ940に提供される。
【0089】
パターンコンパレータ923は、フラッシュメモリの第1のメモリ領域から読み出されたデータを所定のデータパターンと比較し、第1のメモリ領域内の所定のデータパターンの存在又は不在に基づいて、フラッシュメモリの第2のメモリ領域のデータステータスを評価するように構成される。
【0090】
誤り訂正ユニット926は、フラッシュメモリに記憶されるデータを処理して、これもまたフラッシュメモリに記憶される対応する誤り訂正データを取得するとともに、フラッシュメモリから読み出されるデータ及び対応する誤り訂正データに基づいて、誤りの検出及び訂正を実行するように構成される。データをフラッシュメモリ940に書き込む場合、ECCユニット926は、書き込むデータを受信する。さらに、ECCユニット926は、データを書き込むフラッシュメモリ940内のアドレスも受信し得る。書き込むデータ及び対応する誤り訂正データは次に、フラッシュメモリ940に提供される。メモリアドレスマネージャ925は、アドレスをECCユニット926に提供するとともに、フラッシュメモリ940にも提供する。
【0091】
データをフラッシュメモリ940から読み出す場合、データ及び対応する誤り訂正データ(ECCデータ)は、アドレスマネージャ925によって指定されるアドレスにおいて読み出される。データ、ECCデータ、及びアドレスはECCユニット926に提供され、ECCユニット926はこれらの入力を使用して、可能な場合、データ及びECCデータに対して誤り訂正を実行する。次に、誤り訂正されたデータは、パターンコンパレータ923に提供してもよく、又はバス915を介してホストシステム910(
図9)に直接提供してもよい。誤り訂正されたデータは、第2のメモリ領域から読み出された場合、ホストシステム910に直接提供し得る。幾つかの実施態様では、第2のメモリ領域が、完全に消去される(対応する誤り訂正データを記憶する対応するメモリ部分を含む)か、又は所定のデータパターン以外の実際のユーザデータを含むことを想起する。
【0092】
更なる可能な態様によれば、メモリ内のメモリワードのデータステータスを変更する方法が提供される。方法は、メモリワードの少なくとも部分又はメモリワードに対して既知のアドレス関係を有する別のメモリワードの所定のパターンを書き込むことを含み、所定のパターンの存在又は不在は、メモリワード又は他のメモリワードが、誤り訂正コードに従って上記誤り訂正データの対応する計算を受ける際、メモリワード又は他のメモリワードに対して結果生成される誤り訂正データを変更せず、所定のパターンの不在は、メモリワードの第1のデータステータスを示し、所定のパターンの存在は、メモリワードの第2のデータステータスを示す。
【0093】
誤り訂正データはメモリに記憶し得る。
【0094】
フラッシュメモリのタイプに応じて、メモリの個々のメモリセルは、単方向様式でのみ個々に再プログラム可能であり得る。例えば、メモリは、所定のパターンとメモリワード又は他のメモリワード内の既存データとの間でビットOR結合を暗黙的に実行し得る。
【0095】
第1のデータステータスは、メモリワードの少なくとも部分に含まれるデータが有効であることを示し得る。第2のデータステータスは、メモリワードの少なくとも部分に含まれるデータが無効であることを示し得る。方法は、メモリワード又は他のメモリワードの少なくとも部分を読み出すことと、所定のパターンがメモリワード又は他のメモリワードに存在するか否かについての評価に基づいて、データステータスを決定することとを更に含み得る。
【0096】
メモリワードのデータステータスが有効である場合、方法は、メモリワードに対して読み出しアクセス及び書き込みアクセスのうちの少なくとも一方を実行するステップを含み得る。
【0097】
方法は、メモリワード又は他のメモリワードを読み出すステップを更に含み得る。次に、誤り訂正データを使用して、メモリワード又は他のメモリワードへの誤り訂正を実行し得る。
【0098】
誤り訂正データは、メモリワード又は他のメモリワードのアドレスに基づくこともできる。
【0099】
メモリワードは、メモリワードに記憶すべき実際のデータに確保された第1の複数のビットと、第1の複数のビットとは互いに素な第2の複数のビットとを含み得、第2の複数のビットは所定のパターンに確保される。
【0100】
別の態様によれば、データを不揮発性メモリ領域に書き込み方法は、そのメモリ領域に既に存在するデータを読み出すステップ又は動作を含み得る。次に、書き込みが意図されるデータを、既に存在するデータによって占められていないメモリ領域の部分に書き込み得る。方法は、アドレス、既存データ、新データ、及び補助データの誤り訂正データが、既存データの既に存在する誤り訂正データと同じであるように、アドレス、既に存在するデータ、及び新データに基づいて追加の補助データを計算するステップ/動作を更に含み得る。補助データは、既存データ又は新データによって占められていないメモリ領域に書き込み得る。すなわち、補助データは、既存データによって占められていないか、又は新データによって占められることがないメモリ領域の更なる部分に書き込み得る。
【0101】
この方法では、新データで補足して、新データ値を形成するか、又は既存データに新しい意味若しくは解釈を付与することにより、既存データを変更することができる。同時に、補助データは、通常、誤り訂正データにおいて反映する必要があるコードワード内の任意の変更を補償し得る。誤り訂正データを一定に保ち、新データ及び補助データを、既存データによってまだ占められていないメモリ領域の部分に書き込むことにより、メモリ領域内の既存データの消去は、回避するか、又は少なくとも後の書き込み動作まで遅らせることができる。その結果、消費電力がより低く、耐久性がより高く、且つ/又はより高速のメモリを予期し得る。
【0102】
なお、書き込みアクセスの完了後、新データ及び補助データは、続く書き込みアクセスで考慮する必要がある既存データになる。
【0103】
リストとしてまとめると、上述した方法は、例えば、以下のように説明することができる:
データを不揮発性メモリ領域に書き込む方法は、
そのメモリ領域に既に存在するデータを読み出すことと、
既に存在するデータによって占められていないメモリ領域の部分にそのデータを書き込むことと、
アドレス、既存データ、新データ、及び補助データの誤り訂正データが、既存データの既に存在する誤り訂正データと同じであるように、アドレス、既に存在するデータ、及び新データに基づいて追加の補助データを計算することと、
既存データ又は新データによって占められていないメモリ領域に補助データを書き込むことと、
とを含む。
【0104】
データを不揮発性メモリに書き込む方法に関して上述した概念は、メモリコントローラに適用することもできる。例えば、データを不揮発性メモリに書き込むように、メモリコントローラに命令し得る。データをメモリ領域に実際に書き込む前に、メモリコントローラは、ターゲットメモリ領域内に既に存在するデータを読み出し得る。メモリコントローラは、ターゲットメモリ領域内の幾つかの部分を考慮し得る。これらの部分の1つが完全に空である(例えば、ゼロのみを含む)場合、メモリコントローラは、データがメモリ領域のこの特定の部分に存在しないことを考慮し得る。メモリコントローラは更に、この特定の部分が、メモリ領域(場合によっては、フラッシュメモリの場合であり得るように、メモリブロック全体さえも)を消去する必要なく、新データ及び/又は補助データをメモリ領域に書き込むために利用可能であると結論付け得る。メモリコントローラは、新データに意図されるメモリ領域のそれらの部分及びの所データに意図されるメモリ領域のそれらの部分を区別して、メモリ領域を読み出す場合、両タイプのデータを区別可能であり得る。通常、補助データは、誤り訂正ステップ中に使用されるが、その後、通常、メモリ領域を読み出す際、無視することができる。メモリコントローラは、メモリ領域から誤り訂正データを読み出し、少なくとも、利用される誤り訂正コード(例えば、2ビット誤り訂正コード、すなわち、最高で2つの誤ったビットを訂正することができる)の可能性内で、コードワードを再構築するように更に構成し得る。
【0105】
メモリコントローラはレジスタ(又は同様の構造体)を備え得、レジスタは通常、メモリ領域のサイズを有し、それにより、メモリコントローラは、メモリ領域を読み出し、上記メモリ領域にデータを書き込む書き込み動作を実行しながら、その内容を記憶し得る。なお、メモリ領域の読み出しは、メモリ領域の内容をレジスタにコピーすることに対応する。
【0106】
メモリコントローラは占有検出器を更に備え得、占有検出器は、メモリ領域の特定の部分が現在、既存データで占有されているか否かを検出するように構成される。占有検出器は、1つ又は複数のコンパレータ及び論理回路を備え得る。さらに、占有検出器はデータタイプ特定器を備え得、これは、メモリ領域の特定の部分内のデータがペイロードデータであるか、それとも補助データであるかを特定するように構成される。データタイプ特定器は、メモリ領域の細分に基づいて機能し得る。例えば、メモリ領域の下位ビット範囲を補助データに確保し得、上位ビット範囲を実際のユーザデータ(ペイロードデータ)に確保し得る。さらに、特定のビット範囲を誤り訂正データに確保し得る。
【0107】
メモリコントローラは、メモリ領域から読み出されたデータから、可能な限り元のコードワードを再構築するように構成される誤り訂正器を更に備え得る。メモリコントローラは補助データ計算器を備えることもでき、この計算器は、既存の誤り訂正データを変更されないまま保つことができ、追加のデータ(新データ及び補助データ)のみがメモリ領域の非占有部分に書き込まれるように、補助データを計算するように構成される。補助データ及び新データは、メモリコントローラがレジスタをメモリ領域に書き込む前、レジスタに一時的に記憶し得る。代替として、レジスタのそれらの部分のみを、新データ及び/又は補助データを含むメモリ領域の対応する部分に書き込むことが可能であり得る。
【0108】
リストとしてまとめると、上述したメモリコントローラ又は装置は以下のように説明することができる。
データを不揮発性メモリ領域に書き込む装置、例えば、メモリコントローラであって、
−そのメモリ領域に既に存在するデータを読み出すことと、
−既に存在するデータによって占められていないメモリ領域の部分にそのデータを書き込むことと、
−アドレス、既存データ、新データ、及び補助データの誤り訂正データが、既存データの既に存在する誤り訂正データと同じであるように、アドレス、既に存在するデータ、及び新データに基づいて追加の補助データを計算することと、
−既存データ又は新データによって占められていないメモリ領域に補助データを書き込むことと、
を実行するように構成される、装置。
【0109】
代替的に、以下のように説明し得る装置を提供し得る:
装置、例えば、メモリコントローラであって、
−メモリ領域から読み出された内容から元のコードワードを再構築するように構成される誤り検出器であって、元のコードワードは、誤り訂正コードに属し、既に存在するデータの部分、誤り訂正データの部分、新データに提供される空部分、及び補助データ用の空部分を含む、誤り検出器と、
−少なくとも、既に存在するデータ、誤り訂正データ、及びメモリ領域に書き込まれる新データに基づいて、補助データが誤り訂正コードの誤り訂正データドメイン内の新データを補償し、それにより、元のコードワードの誤り訂正データを変更しないまま保つことができるように、補助データを計算するように構成される補助データ計算器と、
を備える、装置。任意選択的に、追加のデータ(新データ及び補助データ)のみが、メモリ領域の非占有(又は空)部分に書き込まれる。
【0110】
幾つかの態様を装置の文脈の中で説明したが、これらの態様が対応する方法の説明も表し、ブロック又は装置が方法ステップ又は方法ステップの特徴に対応することが明らかである。同様に、方法ステップの文脈で説明される態様は、対応する装置の対応するユニット、物品、又は特徴の説明も表す。
【0111】
特定の実施要件に応じて、実施形態はハードウェア又はソフトウェアで実施することができる。実施は、電子的に読み出し可能な制御信号を記憶し、各方法が実行されるようにプログラマブルコンピュータシステムと協働する(又は協働可能な)デジタル記憶媒体、例えば、フロッピーディスク、DVD、CD、ROM、PROM、EPROM、EEPROM、又はフラッシュメモリを使用して実行することができる。
【0112】
実施形態による幾つかの実施形態は、電子的に可読制御信号を有する非一時的なデータキャリアを含み、制御信号は、本明細書に記載の方法の1つが実行されるように、プログラマブルコンピュータシステムと協働可能である。
【0113】
一般に、本発明の実施形態は、プログラムコードを有するコンピュータプログラム製品として実施することができ、プログラムコードは、コンピュータプログラム製品がコンピュータで事項されると、方法の1つを実行するように動作可能である。プログラムコードは、例えば、機械可読キャリアに記憶し得る。
【0114】
他の実施形態は、機械可読キャリアに記憶された、本明細書に記載の方法の1つを実行するコンピュータプログラムを含む。
【0115】
したがって、換言すれば、本発明の方法の実施形態は、コンピュータプログラムがコンピュータで実行されると、本明細書に記載の方法の1つを実行するプログラムコードを有するコンピュータプログラムである。
【0116】
したがって、本発明の方法の更なる実施形態は、本明細書に記載の方法の1つを実行する、記録されたコンピュータプログラムを含むデータキャリア(又はデジタル記憶媒体、又はコンピュータ可読媒体)である。
【0117】
したがって、本発明の更なる実施形態は、本明細書に記載の方法の1つを実行するコンピュータプログラムを表すデータストリーム又は信号シーケンスである。データストリーム又は信号シーケンスは、例えば、データ通信接続を介して、例えばインターネットを介して転送されるように構成し得る。
【0118】
更なる実施形態は、本明細書に記載の方法の1つを実行するように構成又は適合される処理手段、例えば、コンピュータ又はプログラマブル論理装置を含む。
【0119】
更なる実施形態は、本明細書に記載の方法の1つを実行するコンピュータプログラムをインストールしたコンピュータを含む。
【0120】
幾つかの実施形態では、プログラマブル論理装置(例えば、フィールドプログラマブルゲートアレイ)を使用して、本明細書に記載の方法の機能の幾つか又は全てを実行し得る。幾つかの実施形態では、フィールドプログラマブルゲートアレイは、マイクロプロセッサと協働して、本明細書に記載の方法の1つを実行し得る。一般に、方法は任意のハードウェア装置によって実行される。
【0121】
本発明について、幾つかの有利な実施形態に関して説明したが、本発明の範囲に入る代替、置換、及び均等物がある。本発明の方法及び構成を実施する多くの代替の方法があることにも留意されたい。したがって、以下の添付の特許請求の範囲が、本発明の真の趣旨及び範囲内にある全てのそのような代替、置換、及び均等物を包含するものとして解釈されることが意図される。
【0122】
上述した実施形態は、本発明の原理の単なる例示である。本明細書に記載される構成及び詳細の変更及び変形が当業者には明らかになることが理解される。したがって、直後の特許請求の範囲によってのみ限定され、本明細書での実施形態の記載及び説明として提示される特定の詳細によって限定されないことが意図である。
【0123】
各請求項は単一の請求項のみを参照するが、本開示は請求項の考えられる任意の組み合わせも包含する。
また、本願は以下に記載する態様を含む。
(態様1)
不揮発性メモリにアクセスする方法であって、
前記不揮発性メモリの第1のメモリ領域を読み出すことと、
前記第1のメモリ領域が所定のデータパターンを含むか否かを確認することであって、前記所定のデータパターンは、少なくとも前記第1のメモリ領域に対して決定される、結果として生成される誤り訂正データに影響しない、確認することと、
前記第1のメモリ領域での前記所定のデータパターンの有無に基づいて、前記不揮発性メモリの第2のメモリ領域のデータステータスを評価することと、
を含む、方法。
(態様2)
前記データステータスが、前記第2のメモリ領域内に有効データが存在することを示す場合、前記第2のメモリ領域を読み出すことを更に含む、態様1に記載の方法。
(態様3)
前記データステータスにより、前記第2のメモリ領域が書き込み可能であることが示される場合、前記第2のメモリ領域にデータを書き込むことと、
前記所定のデータパターンを前記第1のメモリ領域に書き込むことであって、それにより、前記第2のメモリ領域に有効データが存在することを示すように前記データステータスを変更する、書き込むことと、
を更に含む、態様1に記載の方法。
(態様4)
前記メモリはフラッシュメモリであり、前記メモリの個々のメモリセルは、単方向様式でのみ個々に再プログラムすることができる、態様1に記載の方法。
(態様5)
前記不揮発性メモリは、既存データと新データとの間でのビットOR又はビットAND結合を、前記既存データを既に含む前記第2のメモリ領域に前記新データを書き込む場合に暗黙的に実行する、態様1に記載の方法。
(態様6)
前記第1のメモリ領域、前記第2のメモリ領域、及び第3のメモリ領域を含むメモリブロックを消去することであって、それにより、前記メモリブロックを書き込み可能状態にリセットし、消去済み第1のメモリ領域、消去済み第2のメモリ領域、及び消去済み第3のメモリ領域を取得する、消去することと、
前記消去済み第1のメモリ領域に基づいて、前記第1のメモリ領域の前記誤り訂正データを決定することと、
前記第1のメモリ領域の前記誤り訂正データを前記消去済み第3のメモリ領域に書き込むことと、
を更に含む、態様1に記載の方法。
(態様7)
前記メモリブロックは、前記第2のメモリ領域に対する誤り訂正データを記憶する第4のメモリ領域を更に含み、前記メモリブロックを消去する状況では、前記第2のメモリ領域の誤り訂正データは決定されず、前記第4のメモリ領域に書き込まれず、それにより、実際のユーザデータ及び対応する誤り訂正データを前記第2のメモリ領域及び前記第4のメモリ領域に書き込むべきときまで、前記第2のメモリ領域及び前記第4のメモリ領域の両方を書き込み可能状態に保つ、態様6に記載の方法。
(態様8)
メモリ領域の前記誤り訂正データは、少なくとも前記メモリ領域のデータ内容及び前記メモリ領域のアドレスの関数である、態様1に記載の方法。
(態様9)
前記第1のメモリ領域及び前記対応する誤り訂正データは、完全に消去される場合、基礎をなす誤り訂正コードの有効コードワードを形成しない、態様1に記載の方法。
(態様10)
前記所定のデータパターン及び完全に消去されたデータの前記誤り訂正データは一緒に、基礎をなす誤り訂正コードの有効コードワードを形成する、態様1に記載の方法。
(態様11)
前記第1のメモリ領域は第1のメモリワードであり、前記第2のメモリ領域は、前記第1のメモリ領域に対して既知のアドレス関係を有する第2のメモリワードである、態様1に記載の方法。
(態様12)
前記第1のメモリ領域が更なる所定のデータパターンを含むか否かを確認することを更に含み、前記更なる所定のデータパターンは、少なくとも前記第1のメモリ領域に決定される前記結果として生成される誤り訂正データに影響せず、
前記第2のメモリ領域の前記データステータスを評価する動作は更に、前記第1のメモリ領域内での前記更なる所定のデータパターンの存在に基づいて実行され、それにより、前記データステータスに少なくとも3つの異なる値を区別することができる、態様1に記載の方法。
(態様13)
前記第1のメモリ領域が前記所定のデータパターンをまだ含まず、前記第2のメモリ領域内に存在する可能性があるデータの無効化が望まれる場合、前記所定のデータパターンを前記第1のメモリ領域に書き込み、それにより、前記第2のメモリ領域内の前記存在する可能性があるデータを無効化する、書き込むことを更に含む、態様1に記載の方法。
(態様14)
不揮発性メモリ内のメモリ領域内の既存データ上に、マーカとして所定のデータパターンをプログラムすることであって、これもまた前記不揮発性メモリに記憶される前記メモリ領域の誤り訂正データは、前記所定のデータパターンの存在によって変更されず、前記既存データの条件は、前記既存データ内のビットが、前記所定のデータパターンのビットに必要なビット位置にないことである、プログラムすることと、
前記メモリ領域への読み出しアクセス又は書き込みアクセスが近々実行される場合、前記メモリ領域が前記所定のデータパターンを含むか否かを評価し、前記メモリ領域に前記所定のデータパターンが存在することに基づいて、前記メモリ領域のデータステータスを決定することと、
を含む、方法。
(態様15)
前記メモリ領域の前記データステータスは、前記メモリ領域の少なくとも部分が書き込み可能であるか、それとも有効データを含むかを示す、態様14に記載の方法。
(態様16)
プログラムを記憶する非一時的なコンピュータ可読媒体であって、前記プログラムは、態様1に記載の方法がコンピュータによって実行される場合、前記コンピュータに前記方法を実行させる、非一時的なコンピュータ可読媒体。
(態様17)
フラッシュメモリコントローラであって、
不揮発性メモリに記憶すべきデータを処理して、これもまた前記不揮発性メモリに記憶すべき対応する誤り訂正データを取得するとともに、前記不揮発性メモリから読み出されるデータ及び対応する誤り訂正データに基づいて、誤りの検出及び訂正を実行する誤り訂正ユニットと、
所定のデータパターンを前記不揮発性メモリのメモリ領域に書き込むパターンプログラマであって、前記所定のデータパターンは、少なくとも前記第1のメモリ領域に決定される結果として生成される誤り訂正データに影響しない、パターンプログラマと、
前記不揮発性メモリの第1のメモリ領域から読み出されたデータを、前記所定のデータパターンと比較するとともに、前記第1のメモリ領域内での前記所定のデータパターンの存在又は不在に基づいて、前記不揮発性メモリの第2のメモリ領域のデータステータスを評価するパターンコンパレータと、
を備える、フラッシュメモリコントローラ。
(態様18)
前記フラッシュメモリコントローラは、前記データステータスが前記第2のメモリ領域内の有効データの存在を示す場合、前記第2のメモリ領域への読み出しアクセスを実行する権限を有する、態様17に記載のフラッシュメモリコントローラ。
(態様19)
前記フラッシュメモリコントローラは、前記データステータスが前記第2のメモリ領域内に有効データが存在しないことを示す場合、前記第2のメモリ領域に対して書き込みアクセスを実行し、前記不揮発性メモリに前記所定のデータパターンを前記第1のメモリ領域に書き込ませる権限を有する、態様17に記載のフラッシュメモリコントローラ。
(態様20)
前記第1のメモリ領域、前記第2のメモリ領域、及び第3のメモリ領域を含む少なくとも1つのメモリブロックを消去して、前記メモリブロックを書き込み可能状態にリセットするとともに、消去済み第1のメモリ領域、消去済み第2のメモリ領域、及び消去済み第3のメモリ領域を取得するように構成されるガーベッジコレクタユニットとを更に備え、
前記誤り訂正ユニットは、前記消去済み第1のメモリ領域に基づいて、前記メモリ領域の前記誤り訂正データを決定するように更に構成され、前記フラッシュメモリコントローラは、前記不揮発性メモリに、前記第1のメモリ領域の前記誤り訂正データを前記消去済み第3のメモリ領域に書き込ませるように構成される、態様17に記載のフラッシュメモリコントローラ。
(態様21)
前記誤り訂正ユニットは、前記メモリ領域のデータ内容及び前記メモリ領域のアドレスを考慮に入れるように構成される、態様17に記載のフラッシュメモリコントローラ。
(態様22)
前記第1のメモリ領域及び前記対応する誤り訂正データは、完全に消去される場合、基礎をなす誤り訂正コードの有効コードワードを形成しない、態様17に記載のフラッシュメモリコントローラ。
(態様23)
前記所定のデータパターン及び前記完全に消去されたデータの前記誤り訂正データは一緒に、基礎をなす誤り訂正コードの有効コードワードを形成する、態様17に記載のフラッシュメモリコントローラ。