(57)【要約】  メモリの隣接する領域での操作によってかく乱されやすいフラッシュメモリに格納されているデータの完全性を維持するために、かく乱イベントは、有効なデータが回復されなくなるほどひどく破壊される前にデータを読み出させ、訂正させ、再書き込みさせる。データ完全性とシステム性能を維持するという、ときには矛盾するニーズは、メモリシステムが実行するべきより高い優先順位の他の操作があるときに訂正処置の部分の実行を延期することによって、均衡させられる。非常に大きな消去の単位を利用するメモリシステムでは、訂正プロセスは、消去の１単位の容量より遥かに少ない量のデータを効率良く再書き込みすることと矛盾しない仕方で実行される。データは、読み出し操作中に深刻なエラーが発見されたとき、再書き込みされる。読み出し操作についてのタイムリミット以内にデータの部分が訂正されコピーされる。訂正された部分は専用のブロックに書き込まれる。
2009512119.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリセルの複数のブロックを有する不揮発性メモリアレイにおいてデータを管理する方法であって、ブロックは消去の最小単位であり、データの複数のセクタを収容する方法において、
第１のブロックから読み出されるべきデータを指定するホストからの読み出しコマンドを受け取るステップと、
前記第１のブロックから前記データを読み出すステップと、
前記不揮発性メモリにおいて前記データの１つ以上の部分が訂正され置換されるべきか否かを判定するステップと、
前記データ部分が訂正され置換されるべきであるとき、前記データ部分の訂正済みバージョンを第２のブロックに格納するけれども前記データの他の部分を置換せずかつ前記データの他の部分を前記第２のブロックに格納しないステップと、
を含む方法。
【請求項２】
請求項１記載の方法において、
その後、前記データ部分の訂正済みバージョンと前記データの他の部分とを一緒に第３のブロックにコピーするステップをさらに含む方法。
【請求項３】
請求項１記載の方法において、
前記読み出しコマンドは対応する読み出し操作がタイムリミット以内に実行されることを要求し、前記タイムリミットは１ブロック全体をコピーする時間より短い方法。
【請求項４】
請求項１記載の方法において、
前記データの置換された部分の論理アドレスを特定する読み出しコマンドが後に受け取られ、前記第２のブロック内の前記データ部分の訂正済みバージョンが前記ホストに送られる方法。
【請求項５】
請求項１記載の方法において、
前記第１のブロックと前記第２のブロックとは、両方とも、一緒に消去され書き込まれるべくリンクされた複数の消去ブロックから構成されるメタブロックである方法。
【請求項６】
請求項１記載の方法において、
前記データ部分は、セクタである方法。
【請求項７】
請求項１記載の方法において、
前記データ部分は、ページである方法。
【請求項８】
請求項１記載の方法において、
前記データの１つ以上の部分が訂正されるべきであるか否かを判定するステップは誤り訂正符号の使用を含み、前記データ部分の訂正済みバージョンは誤り訂正符号を用いて得られる方法。
【請求項９】
複数のブロックを含む不揮発性メモリアレイを有するメモリシステムにおいてデータを管理する方法であって、ブロックは消去の最小単位である方法において、
前記メモリアレイの１ブロックをコピーするために必要な時間より短い所定のタイムリミット以内に読み出されるべき第１のブロック内の複数のセクタを特定するホストからの読み出しコマンドを受け取るステップと、
前記第１のブロックから前記複数のセクタを読み出し、前記複数のセクタのうちのセクタが訂正され置換されるべきであるか否かを判定するステップと、
個々のセクタが訂正され置換されるべきであるならば、前記個々のセクタを訂正し、その訂正済みセクタを前記所定のタイムリミット以内に第２のブロックに書き込むステップと、
訂正され置換されるべきではないセクタを、前記第２のブロックに書き込まずに、訂正されていない形で前記第１のブロックにおいて維持するステップと、
前記個々のセクタと訂正され置換されるべきではない前記セクタとを前記ホストに送るステップと、
その後、前記個々のセクタと訂正され置換されるべきではない前記セクタとを第３のブロックにコピーするステップと、
を含む方法。
【請求項１０】
請求項９記載の方法において、
前記第１のブロックからの他のセクタを訂正し、その訂正済みの他のセクタを前記個々のセクタと共に前記タイムリミット以内に前記第２のブロックに書き込むステップをさらに含む方法。
【請求項１１】
請求項９記載の方法において、
前記第１のブロック以外の前記メモリアレイの１つ以上のブロックの中のデータのセクタに取って代わる付加的なセクタを前記第２のブロックに書き込むステップと、
前記第２のブロックの中の陳腐ではないセクタを第４のブロックにコピーするけれども前記第２のブロックの中の陳腐ではないセクタを前記第４のブロックにコピーしないことによって前記第２のブロックの中のデータを後に圧縮するステップと、
をさらに含む方法。
【請求項１２】
請求項１１記載の方法において、
前記圧縮するステップは、しきい値数のセクタが前記第２のブロックに格納されたことに応答して行われる方法。
【請求項１３】
請求項１２記載の方法において、
前記しきい値数のセクタは、読み出しコマンドについてのタイムリミット以内にコピーされるデータの最大量により決定される方法。
【請求項１４】
請求項９記載の方法において、
前記不揮発性メモリアレイにおいて訂正済みコピーと訂正されていないコピーとの両方を有するセクタの訂正済みコピーだけを後に読み出すステップをさらに含む方法。
【請求項１５】
請求項１４記載の方法において、
セクタの訂正済みコピーは、訂正され置換されたセクタのリストから特定される方法。
【請求項１６】
複数のブロックを含む不揮発性メモリアレイを有するメモリシステムにおいてデータを管理する方法であって、ブロックは消去の最小単位である方法において、
訂正され置換されるべきデータのセクタを特定し、訂正されないセクタを前記特定されたセクタと共に元ブロックに残し、前記特定されたセクタのみについて訂正済み置換セクタを専用ブロックに書き込むステップと、
前記不揮発性メモリアレイに格納されているセクタに取って代わる更新済みセクタをホストから受け取るステップと、
前記更新済みセクタを前記不揮発性メモリに格納するステップと、
それについて第１の訂正済み置換セクタが前記専用ブロックに存在しかつそれについて第１の更新済みセクタが前記不揮発性メモリに存在するところの論理アドレスを有するセクタを特定するホストからの読み出しコマンドを後に受け取るステップと、
前記第１の訂正済み置換セクタと前記第１の更新済みセクタとのうちの最も最近に書き込まれた方を前記ホストに送るステップと、
を含む方法。
【請求項１７】
請求項１６記載の方法において、
前記更新済みセクタは更新ブロックに格納され、前記第１の更新済みセクタは第１の更新ブロックに格納され、更新ブロックは更新済みデータを１つ以上の元ブロックに対応する論理アドレス範囲の中で記憶する方法。
【請求項１８】
請求項１７記載の方法において、
前記第１の更新ブロックは、論理的に連続していない順序でセクタを記憶する方法。
【請求項１９】
不揮発性メモリセルの複数のブロックを有する不揮発性メモリアレイにおいてデータを管理する方法であって、ブロックは消去の最小単位であり、データの複数のアドレス指定可能な単位を収容する方法において、
第１のブロックからデータを読み出すステップと、
前記不揮発性メモリにおいて前記データの１つ以上の部分が訂正され置換されるべきか否かを判定するステップと、
前記データ部分が訂正され置換されるべきであるとき、前記データ部分の訂正済みバージョンを第２のブロックに格納するけれども前記データの他の部分を置換せずかつ前記データの他の部分を前記第２のブロックに格納しないステップと、
を含む方法。
【請求項２０】
請求項１９記載の方法において、
前記データ部分の訂正済みバージョンと前記データの他の部分とは後に第３のブロックに統合される方法。
【請求項２１】
請求項１９記載の方法において、
前記データの１つ以上の部分の訂正済みバージョンを読み出すステップ、判定するステップおよび格納するステップは、タイムリミット以内に完了される方法。
【請求項２２】
請求項２１記載の方法において、
前記読み出すステップはホスト読み出しコマンドに応答し、前記タイムリミットは読み出し操作についてのタイムリミットである方法。
【請求項２３】
請求項１９記載の方法において、
前記判定するステップおよび格納するステップは、スクラブ操作の部分である方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には不揮発性フラッシュメモリシステムの操作に関し、特に、とりわけ非常に大きなメモリセルブロックを有するメモリシステムに格納されているデータをリフレッシュし訂正する技術に関する。
【背景技術】
【０００２】
特に小形形状のファクタカードの形態の商業的に成功した多くの不揮発性メモリ製品が今日使用され、それは１つ以上の集積回路チップ上に形成されたフラッシュＥＥＰＲＯＭ（電気的に消去可能でプログラム可能な読み出し専用メモリ）セルのアレイを使用している。普通は、必ずしもそうとは限らないが、別の集積回路チップ上に存在するメモリコントローラが、カードが取り外し可能に接続されているホストとインターフェイスして、カード内のメモリアレイの動作を制御する。そのようなコントローラは、通常、マイクロプロセッサと、何らかの不揮発性読み出し専用メモリ（ＲＯＭ）と、揮発性ランダムアクセスメモリ（ＲＡＭ）と、データのプログラミングおよび読み出し中にデータがコントローラを通るときにデータから誤り訂正符号（ＥＣＣ）を計算する回路などの１つ以上の特別回路とを含む。市販されているカードのいくつかは、コンパクトフラッシュ（登録商標）（ＣＦ）カード、マルチメディアカード（ＭＭＣ）、セキュアデジタル（ＳＤ）カード、スマートメディアカード、パーソナルタグ（Ｐ−Ｔａｇ）、およびメモリスティックカードである。ホストは、パーソナルコンピュータ、ノートブックコンピュータ、個人用携帯情報端末（ＰＤＡ）、種々のデータ通信装置、デジタルカメラ、携帯電話機、携帯用オーディオプレーヤ、自動車音響システム、および類似タイプの装置を含む。メモリカードとして実装される他に、このタイプのメモリは種々のホストシステムに埋め込まれることもできる。
【０００３】
２つの一般的なメモリセルアレイのアーキテクチャ、ＮＯＲおよびＮＡＮＤが商業的に応用されている。典型的なＮＯＲアレイでは、メモリセルは列方向に延びる隣接するビット線ソース拡散およびドレイン拡散の間に接続され、コントロールゲートはセルの行に沿って延びるワード線に接続される。メモリセルは、ソースおよびドレインの間のセルチャネル領域の少なくとも一部分の上に位置する少なくとも１つの記憶素子を含む。記憶素子上のプログラムされたレベルの電荷がセルの動作特性を制御し、アドレス指定されたメモリセルに適切な電圧を加えることによって読み出される。そのようなセルと、メモリシステムにおけるそれらの使用と、それらを製造する方法との例が、米国特許第５，０７０，０３２号（特許文献１）、第５，０９５，３４４号（特許文献２）、第５，３１３，４２１号（特許文献３）、第５，３１５，５４１号（特許文献４）、第５，３４３，０６３号（特許文献５）、第５，６６１，０５３号（特許文献６）、および第６，２２２，７６２号（特許文献７）に記載されている。
【０００４】
ＮＡＮＤアレイは、セルの列を形成するように個々のビット線と基準電位との間に１つ以上の選択トランジスタと共に接続された３個以上（１６個あるいは３２個など）のメモリセルの直列ストリングを利用する。ワード線は、多数のこれらの列の中のセルを横断して延びる。列内の個々のセルは、ストリングを通って流れる電流がアドレス指定されたセルに蓄積されている電荷のレベルに依存するようにストリング中の残りのセルをオンに強く転換することによって、プログラミング中に読み出されベリファイされる。メモリシステムの一部としてのＮＡＮＤアーキテクチャのアレイとその動作との例が、米国特許第５，５７０，３１５号（特許文献８）、第５，７７４，３９７号（特許文献９）、第６，０４６，９３５号（特許文献１０）、および第６，５２２，５８０号（特許文献１１）で見出される。
【０００５】
前に援用されている特許で論じられているように、現在のフラッシュＥＥＰＲＯＭアレイの電荷記憶素子は、最も一般的には、代表的には導電性にドープされたポリシリコン材料から形成される導電性フローティングゲートである。フラッシュＥＥＰＲＯＭシステムにおいて有益な代わりのタイプのメモリセルは、電荷を不揮発的に蓄積するために導電性フローティングゲートの代わりに非導電性誘電体材料を利用する。酸化シリコン、窒化シリコンおよび酸化シリコン（ＯＮＯ）から形成される３層誘電体がメモリセルチャネルの上で導電性コントロールゲートと半導電性基板の表面との間に挟まれている。セルは、セルチャネルから窒化物に電子を注入することによってプログラムされ、そこで電子は捕らえられて限られた領域に蓄積され、そしてホットホールを窒化物に注入することによって消去される。誘電体記憶素子を使用するいくつかの特定のセル構造およびアレイが、米国公開特許出願第２００３／０１０９０９３号（特許文献１２）に記載されている。
【０００６】
ほとんどの集積回路アプリケーションの場合と同じく、集積回路機能を実行するために必要とされるシリコン基板面積を縮小させる圧力がフラッシュＥＥＰＲＯＭメモリセルアレイに関しても存在する。所与のサイズのメモリカードおよび他のタイプのパッケージの記憶容量を増やすために、あるいは容量を増やしかつサイズを小さくするために、シリコン基板の所与の領域に記憶させることのできるデジタルデータの量を増やすことがしきりに求められている。データの記憶密度を増やす１つの方法は、メモリセルあたりおよび／または記憶単位または素子あたりに１ビットより多くのデータを記憶させることである。これは、記憶素子の電荷レベル電圧範囲のウィンドウを３以上の状態に分割することにより成し遂げられる。４つのそのような状態を用いれば各セルは２ビットのデータを記憶し、８状態の使用は記憶素子あたりに３ビットの状態を記憶する等である。フローティングゲートを用いる多状態フラッシュＥＥＰＲＯＭ構造とその動作とが米国特許第５，０４３，９４０号（特許文献１３）および第５，１７２，３３８号（特許文献１４）に記載され、誘電体フローティングゲートを用いる構造については米国特許出願第１０／２８０，３５２号（特許文献１５）に記載されている。米国特許第５，９３０，１６７号（特許文献１６）および第６，４５６，５２８号（特許文献１７）に記載されているように、多状態メモリセルアレイの選択された部分はいろいろな理由から２状態（バイナリ）で操作されてもよい。
【０００７】
代表的なフラッシュＥＥＰＲＯＭアレイのメモリセルは、一緒に消去されるセルの別々のブロックに分割される。すなわち、ブロックは消去単位であり、同時に消去可能な最少数のセルである。各ブロックは通常１ページ以上のデータを記憶し、ページはプログラミングおよび読み出しの最小単位であるが、別々のサブアレイまたはプレーンにおいて１ページより多くのページが並列にプログラムされあるいは読み出されてもよい。各ページは通常１セクタ以上のデータを記憶し、セクタのサイズはホストシステムにより確定される。セクタの１つの例は、磁気ディスクドライブに関して確立されている標準規格に従って５１２バイトのユーザデータと、そのユーザデータおよび／またはそれが格納されているブロックに関する数バイトのオーバーヘッド情報とを含む。そのようなメモリは各ブロック内の１６ページ、３２ページあるいはもっと多数のページで構成され、各ページは１ホストセクタまたはほんの数ホストセクタのデータを記憶する。
【０００８】
ユーザデータをメモリアレイにプログラムする間の並列性の程度を高め、かつメモリアレイからユーザデータを読み出すために、アレイは、通常、一般にプレーンと称されるサブアレイに分割され、いくつかのまたは全てのプレーンの各々に同時にデータのセクタをプログラムしあるいは読み出すことができるように並列動作を可能とするためにそれ自身のデータレジスタおよび他の回路を含んでいる。単一の集積回路上のアレイは複数のプレーンに物理的に分割され、あるいは各プレーンが別々の１つ以上の集積回路チップから形成されてもよい。そのようなメモリの実施例が、米国特許第５，７９８，９６８号（特許文献１８）および第５，８９０，１９２号（特許文献１９）に記載されている。
【０００９】
メモリをさらに効率よく管理するために、物理的ブロック同士を論理的にリンクさせて仮想ブロックあるいはメタブロックを形成することができる。すなわち、各メタブロックは、各プレーンからの１ブロックを含むと規定される。メタブロックの使用は、国際公開特許出願第０２／０５８０７４号（特許文献２０）に記載されている。メタブロックは、データのプログラミングおよび読み出しの宛先としてホスト論理ブロックアドレスにより特定される。同様に、メタブロックの全てのブロックは一緒に消去される。そのような大きなブロックおよび／またはメタブロックで操作されるメモリシステムに存するコントローラは、ホストから受け取られた論理ブロックアドレス（ＬＢＡ）とメモリセルアレイ内での物理的ブロック番号（ＰＢＮ）との間の変換を含むいくつかの機能を実行する。ブロック内の個々のページは、通常、ブロックアドレス内でのオフセットにより特定される。アドレス変換は、しばしば、論理ブロック番号（ＬＢＮ）と論理ページとの中間項の使用を伴う。
【００１０】
メタブロックに格納されているデータはしばしば更新され、更新の可能性は、メタブロックのデータ容量が増大するときである。１つの論理メタブロックの更新されたセクタは普通、他の物理的メタブロックに書き込まれる。変更されていないセクタも、データを統合するために、同じプログラミング操作の一部として、元ブロックからその新しい物理的メタブロックにコピーされる。あるいは、変更されていないデータは、更新されたデータと後に単一のメタブロックに統合されるまで、元メタブロックにとどまることができる。
【００１１】
大きなブロックまたはメタブロックシステムを、消去済みブロックプールに維持されているいくつかの余分のブロックと共に操作するのは普通のことである。１ブロックの容量より少ない１ページ以上のデータが更新されるとき、更新されたページをプールからの消去済みブロックに書き込んでから、変更されていないページのデータを元ブロックから消去ブロックプールにコピーすることが典型的である。この技術の変形例が、国際公開特許出願第０２／０５８０７４号（特許文献２０）に記載されている。時間が経つと、ホストデータファイルが再書き込みされ更新される結果として、最後には多数のブロックの中の比較的に少数のページが有効なデータを含み、残りのページが最早通用しないデータを含むということになる。アレイのデータ記憶容量を効率的に使うためには、有効なデータの論理的に関連するデータページが複数のブロック間で時々フラグメントから寄せ集められてより少数のブロックに統合される。このプロセスは一般に“ガーベッジコレクション”と称される。
【００１２】
個々のフラッシュＥＥＰＲＯＭセルは、１ビット以上のデータを表す電荷量を電荷記憶素子または単位に蓄積する。記憶素子の電荷レベルはそのメモリセルのしきい値電圧（一般にＶＴと称される）を制御し、セルの記憶状態を読み出す基礎として使用される。しきい値電圧ウィンドウは、一般に、メモリセルの２つ以上の記憶状態の各々に１つずつの、数個の範囲に分割される。これらの範囲は、個々のセルの記憶状態を判定することを可能にする公称感知レベルを含むガードバンドにより分離される。これらの記憶レベルは、隣接するあるいはその他の関連するメモリセル、ページまたはブロックにおいて実行される電荷を乱すプログラミング、読み出しまたは消去操作の結果としてシフトする。例えば、メモリセルの第２のセットと線または回路を共有するメモリセルの１つのセットのプログラミングは、その第２のセットの電荷レベルをかく乱する可能性がある。この寄生かく乱の最終結果は、記憶システムコントローラの側で訂正処置がとられなければ、操作されない露出している領域に存するデータが壊される可能性があり、しかも極端な場合には、そのデータと共に記憶されている誤り訂正符号（ＥＣＣ）の訂正能力を超えて壊される可能性があるということである。そのようなデータ破壊は、ユーザに対してはデータが失われるという結果をもたらし、従って記憶システムを信頼できないものとする。具体的なメモリセルアレイにおけるそのようなかく乱の範囲と性質とは、その特定のアーキテクチャ、構造および動作による。
【００１３】
従って、シフトする電荷レベルを、かく乱動作がそれらをその確定されている範囲の外へ完全にシフトさせてしまう前に（この場合、その後は誤ったデータが読み出される）、時々その状態範囲の中央へ戻すのが有益である。データリフレッシュまたはスクラブと称されるそのようなプロセスが、米国特許第５，５３２，９６２号（特許文献２１）および第５，９０９，４４９号（特許文献２２）に記載されている。このことのさらなる態様として、誤り訂正符号（ＥＣＣ）を用いるメモリシステムでは、メモリから読み出されたいくつかの誤っているデータビットがＥＣＣを用いることにより訂正され、訂正されたデータは、メモリの前もって消去された部分に再書き込みされる。データプログラミングは普通、蓄積されている電荷を調整する操作と、その結果として得られたメモリセルのしきい値レベルを、それがセルに記憶されるデータを表す所望の範囲に達するまで、読み出し−ベリファイする操作とを交互に行うことを含むので、データの再書き込みは、書き込まれるメモリセルのしきい値レベルをその指定された状態範囲の中に位置させる。
【特許文献１】米国特許第５，０７０，０３２号
【特許文献２】米国特許第５，０９５，３４４号
【特許文献３】米国特許第５，３１３，４２１号
【特許文献４】米国特許第５，３１５，５４１号
【特許文献５】米国特許第５，３４３，０６３号
【特許文献６】米国特許第５，６６１，０５３号
【特許文献７】米国特許第６，２２２，７６２号
【特許文献８】米国特許第５，５７０，３１５号
【特許文献９】米国特許第５，７７４，３９７号
【特許文献１０】米国特許第６，０４６，９３５号
【特許文献１１】米国特許第６，５２２，５８０号
【特許文献１２】米国公開特許出願第２００３／０１０９０９３号
【特許文献１３】米国特許第５，０４３，９４０号
【特許文献１４】米国特許第５，１７２，３３８号
【特許文献１５】米国特許出願第１０／２８０，３５２号
【特許文献１６】米国特許第５，９３０，１６７号
【特許文献１７】米国特許第６，４５６，５２８号
【特許文献１８】米国特許第５，７９８，９６８号
【特許文献１９】米国特許第５，８９０，１９２号
【特許文献２０】国際公開特許出願第０２／０５８０７４号
【特許文献２１】米国特許第５，５３２，９６２号
【特許文献２２】米国特許第５，９０９，４４９号
【特許文献２３】米国特許第６，７６３，４２４号
【特許文献２４】米国特許出願第１０／７４９，１８９号
【特許文献２５】米国特許出願第１０／７５０，１５５号
【特許文献２６】米国特許出願第１１／０１６，２８５号
【発明の開示】
【００１４】
メモリセルの１つのグループにおける、同じ集積回路チップ上のメモリセルの他のグループに対して行われたプログラミング、読み出しまたは消去操作に起因する記憶レベルのかく乱を補償するために、フラッシュメモリシステムに包括的スクラブ操作が包含される。そのようなデータかく乱の可能性は、メモリセルアレイのサイズが小さくなるにつれて増大する。空間を節約するために種々の信号線がメモリセルの複数のグループに共有される傾向があって、メモリセルの１つのグループが他のグループのメモリセルのプログラミング、読み出しまたは消去中に電圧および／または電流に対する反復される可能性のある露出を経験する。メモリセルの全てのグループに格納されているデータを組織的にかつ連続的にスクラブすることによって、記憶されているデータの時間の経過に伴う破壊は顕著に低減される。また、かく乱された電荷レベルが、その意図されたレベルへ系統的に戻されることによって訂正されるときには、より小さな電圧しきい値状態範囲の数を増やし、メモリセルあたりより多数のビットを記憶させることが実用的となる。
【００１５】
スクラブ操作は、かく乱を生じさせる可能性のある信号に対して露出された領域の中のデータを読み出し、そのデータがかく乱されていると判定されたならば何らかの訂正処置を実行することを伴う。かく乱は、例えば、データを読み出してそのデータのＥＣＣ検査の結果を得るなどしてデータの完全性を検査することによって検出される。訂正処置は、データを同じ位置に、あるいは異なる位置に再書き込みする動作を伴うことがあり、より高いレベルの欠陥またはデータ管理操作を必要とする。
【００１６】
スクラブ操作をデータ読み出しの完全性に適応させることができる。例えば、１つまたはしきい値レベルのデータエラーがメモリセルアレイの１つの領域で発見されたならば、その領域でのスクラブ操作のレートを高めることができる。逆に、所与の領域でエラーが発見されないかあるいはしきい値未満の少数のデータエラーが発見されたならば、このことにより、その所与の領域のスクラブ操作のレートを下げることができる。スクラブの頻度および位置を使用レベルおよび他のシステムパラメータに適応させることもできる。スクラブのこれらの特徴および他の特徴は、データ完全性を維持する必要と、高レベルのシステム性能を維持する必要との釣り合いを提供するために計算される。データ完全性を改善しそうにないスクラブ操作は特に回避される。
【００１７】
スクラブ操作は、好ましくは、メモリシステムがデータを読み出したり書き込んだりしていないとき、バックグラウンドで行われる。メモリシステムは、データを格納しあるいは取り出すようにホストがメモリに求めないときを示すようにホストに期待させることができ、そのときにスクラブ操作が実行される。
【００１８】
スクラブ読み出し時に１つ以上のデータエラーが検出されても、そのエラーがデータ読み出し時にＥＣＣによって訂正されるならば、システム性能を維持するために、訂正処置をとらないと決定することができる。個々のセクタのユーザデータおよびオーバーヘッドデータがそれ自身のＥＣＣを有するときには、オーバーヘッドデータのデータエラーが訂正されないことを許される可能性はユーザデータのエラーのそれより小さい。
【００１９】
通常条件下で読み出されたスクラブデータについてＥＣＣによって訂正されるべきビットエラーが余りに多くあるときには、蓄積されている電荷レベルが標準範囲の外へシフトしてしまっているセルを読み出すために、データをより緩やかな基準条件で再読み出しすることができる。ＥＣＣによって正しくベリファイされたならば、読み出されたデータは標準の電荷範囲レベル内に再書き込みされる。逆に、データのスクラブ読み出しがエラーのないことを明らかにしたときには、記憶されているデータの質を判定するために、より制限的な基準条件下でそのデータを再読み出しすることができる。すなわち、その最適範囲の外へシフトしてしまった電荷レベルは、そのような範囲の中にスクラブ訂正処置の一部として再書き込みされるように、検出される。
【００２０】
多数のホストデータセクタをそれぞれ記憶するメモリセルの大きなブロックまたはメタブロックを利用するメモリシステムでは、前述したメモリ管理の消去プーリング方法と矛盾することなく、スクラブ操作中に訂正された第１の物理的ブロックのデータのセクタは、第１のブロックの残りのデータセクタがコピーされる第２のブロックに再書き込みされる。あるいは、ブロックまたはメタブロックは、訂正されたセクタと同じブロックまたはメタブロックからの他のデータセクタがガーベッジコレクションなどの他の何らかの理由から移動されなければならなくなるまで（そのときに、スクラブ訂正されたデータセクタは同じブロックまたはメタブロックの他のデータセクタと再結合される）、スクラブ訂正されたデータセクタの一時的記憶に専用される。これはシステム性能を高める。
【００２１】
一定の指定されたデータに対して訂正処置がとられなければならないと判定されたならば、そのときにその訂正処置をとることがシステム性能に悪影響を及ぼす可能性があるとすれば、また、訂正処置なしでそのデータが読み出されるとすれば、その訂正処置が後に行われる前に必要ならばその処置は延期されてもよい。全ての訂正されたデータ、アドレス、および延期時に決定された種々のパラメータは一時的に記憶されて、後に、延期された訂正処置が実行されるときに取り出される。メモリセルの大きなブロックまたはメタブロックをなすように組織されたシステムでは、所与のブロックまたはメタブロックの所与の量のデータが訂正処置のためにスケジュールされるまで訂正スクラブ処置は延期されてよく、その場合には所与のブロックまたはメタブロックの全ての延期されたデータセクタは同時に訂正される。これは、所与のブロックまたはメタブロックのデータセクタが再び統合されるときに行われるデータのコピーおよび再書き込み動作の量を減少させることができる。
【００２２】
最後に、所与のメモリセル、セルの列、セルのブロック、またはセルの他の何らかの単位が頻繁なスクラブ操作を必要とすることが分かったならば、その単位は、それに記憶されているデータが最早読めないかあるいは訂正不能となるまで劣化する前にシステムの外にマッピングされる。
【００２３】
スクラブ操作中にデータを訂正することに加えて、時々、通常の読み出し操作中に深刻なエラーを含んでいることが分かったときにデータは訂正される。深刻なエラーとは、即時の訂正と新しい位置へのコピーとを必要とするエラーである。読み出し操作には普通時間的制約があるので、データはタイムリミット以内にホストに戻されなければならない。このタイムリミットは、読み出し操作中に深刻なエラーに遭遇したときにデータのブロックをコピーする操作を妨げるかもしれない。しかし、ブロックの一部分はタイムリミットのうちにコピーされる。通常、深刻なエラーを含むデータ部分（セクタ、ページ、または、ブロックより小さな他の何らかの部分）だけがコピーされ、そのブロックの残りの部分はコピーされないままである。データの訂正された部分は専用の訂正ブロックにコピーされる。専用の訂正ブロックは、メモリアレイの別々のブロックからのデータ部分を収容することができる。タイムリミットのうちにデータを訂正してコピーしなければならないどのような状況においても、同様の手法を使用することができる。全てのデータをコピーするとタイムリミットを超えてしまう場合には、エラーを含む部分だけをコピーすることができ、これをタイムリミットのうちに実行することができる。タイムリミットが適用されない場合にも、このような手法を用いて訂正の速度を高めることができる。
【００２４】
訂正ブロックからのデータの一部分と、対応する元ブロックからの訂正されていないデータとの両方が統合操作の一部分として統合ブロックにコピーされる。これは、元ブロックを陳腐化し、また訂正ブロック内の訂正済みセクタを陳腐化する。訂正ブロックは、過剰に満たされたときに圧縮される。圧縮は、訂正ブロックの有効なセクタだけを圧縮済み訂正ブロックにコピーし、第１の訂正ブロックを陳腐化することを伴う。これは、圧縮済み訂正ブロック内の空き空間を利用可能にする。
【００２５】
データ部分が更新されてデータの一部分の２つ以上のバージョンが１つのメモリ内に維持される場合、コントローラは、どのバージョンが訂正されたのか、従ってデータのどの部分が有効であるのかを判定するためのシステムを有する。例えば、更新ブロックと訂正ブロックとが使用される場合、両方が、同じ論理アドレスを有するセクタの複数のコピーを含むことがある。有効なのは、最も最近に書き込まれたものである。コントローラは、タイムスタンプによって、あるいはセクタが書き込まれた順序を判定するインデックスまたは他の適切な手段を維持することによって、どれが最も最近に書き込まれたかを判定する。
【００２６】
ＥＣＣのために使われるデータの単位は一般的にはセクタである。各セクタは、それのために別に生成されたＥＣＣデータを有し、後にエラーがセクタ毎に発見される。セクタにおいて深刻なエラーが発見されたとき、そのセクタは訂正され、その訂正されたセクタのコピーが訂正ブロックに送られる。しかし、ある例では、深刻なエラーを持っていない他のセクタも訂正ブロックに格納される。ページがメモリにおける書き込みの単位であるので、１ページずつコピーするのがより便利であるかもしれない。従って、深刻なエラーのある１つのセクタを有するページの残りのセクタは、エラーを含んでいるか否かに関わらず、訂正されたセクタと共にコピーされる。訂正およびコピーの他の単位も使用される。
【００２７】
前述したいろいろな特徴は、別々に実行されてもよく、また具体的なアプリケーションに応じて種々の組み合わせで一緒に実行されてもよい。本願明細書のスクラブシステムの付加的な態様、利点および特徴は、その代表的な例についての以下の説明に含まれ、その説明は添付図面と関連して検討されるべきである。本願明細書で参照されている全ての特許、特許出願、論文および他の刊行物は、その全体があらゆる目的のために本願明細書において参照により援用されている。
【発明を実施するための最良の形態】
【００２８】
メモリアーキテクチャとその操作
始めに図１Ａを参照すると、フラッシュメモリはメモリセルアレイとコントローラとを含む。図示されている例では、２つの集積回路装置（チップ）１１および１３は、メモリセルのアレイ１５と種々の論理回路１７とを含む。論理回路１７は、データ回路、コマンド回路およびステータス回路を通して別のチップ上のコントローラ１９とインターフェイスをとり、アドレス指定、データ転送および感知、およびその他のサポートをアレイ１３に提供する。メモリアレイチップの数は、提供される記憶容量により、１から多数におよぶ。コントローラとアレイの一部または全体とが、単一の集積回路チップ上に連合されうるが、今は経済的な選択肢ではない。
【００２９】
代表的なコントローラ１９は、マイクロプロセッサ２１と、主としてファームウェアを記憶する読み出し専用メモリ（ＲＯＭ）２３であるプログラムメモリと、メモリチップ１１および１３に書き込まれあるいはそれらから読み出されるユーザデータの一時的記憶を主な目的とするバッファメモリ（ＲＡＭ）２５とを含む。この例ではファームウェアを記憶するプログラムメモリとしてＲＯＭが使用されているが、他の例ではＥＥＰＲＯＭまたはＲＡＭが使用される。ＥＥＰＲＯＭ、ＲＯＭおよびＲＡＭの組み合わせがプログラムメモリとして使用されてもよい。回路２７はメモリアレイチップとインターフェイスをとり、回路２９は結線３１を通してホストとインターフェイスをとる。データの完全性は、この例では、コードの計算に専用される回路３３でＥＣＣを計算することによって判定される。ユーザデータが記憶されるべくホストからフラッシュメモリアレイへ転送されているとき、回路はそのデータからＥＣＣを計算し、このコードはメモリに格納される。そのユーザデータが後にメモリから読み出されるとき、回路３３を再び通され、この回路は同じアルゴリズムによってＥＣＣを計算して、そのコードをデータに関して計算されてデータと共に格納されていたコードと比較する。それらが同等であるならば、そのデータの完全性が確認される。それらが異なるならば、利用されるＥＣＣアルゴリズムに依存して、アルゴリズムによってサポートされる個数までの誤っているビットが特定され訂正される。
【００３０】
図１Ａのメモリ結線３１はホストシステムの結線３１’と接続し、その例が図１Ｂに示されている。データはインターフェイス回路３５を通してホストと図１Ａのメモリとの間を移動する。代表的なホストは、マイクロプロセッサ３７と、ファームウェアコードを記憶するためのＲＯＭ３９（または他の形のプログラムメモリ）と、ＲＡＭ４１とをも含む。他の回路およびサブシステム４３は、特定のホストシステムに依存して、しばしば、大容量磁気データ記憶ディスクドライブ、キーボードのためのインターフェイス回路、モニタなどを含む。そのようなホストの例は、デスクトップコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、個人用携帯情報端末（ＰＤＡ）、ＭＰ３および他のオーディオプレーヤ、デジタルカメラ、ビデオカメラ、電子ゲームマシン、無線および有線の電話装置、留守番電話、ボイスレコーダ、ネットワークルータなどを含む。
【００３１】
図１Ａのメモリは、コントローラとそのメモリアレイ回路装置の全てとを収容した、図１Ｂのホストと取り外し可能に接続できる形の小型封入カードとして実装される。すなわち、接続する結線３１および３１’は、カードを切り離して別のホストへ移したり、他のカードをホストに接続することによってカードを交換したりすることを可能にする。あるいは、メモリアレイ装置は、コントローラと結線３１とを収容したカードに電気的にかつ機械的に接続できる別のカードに封入されてもよい。別の選択肢として、図１Ａのメモリは図１Ｂのホストの中に埋め込まれてもよく、その場合に結線３１および３１’は永久的に作られる。この場合、メモリは、普通、他のコンポーネントと共にホストのエンクロージャの中に収容される。
【００３２】
本願明細書で使われているある用語については説明があったほうがよいかもしれない。“セクタ”は、ホストの読み出し操作および書き込み操作の間にアクセスされる独立してアドレス指定可能なデータの単位である。１セクタのデータサイズは通常５１２バイトである。
【００３３】
本願明細書で使われる“メモリシステム”は、１つ以上の不揮発性メモリ装置と、メモリにデータを格納し、またメモリからデータを取り出すために必要とされるハードウェアおよび／またはソフトウェアとから成るシステムである。メモリシステム機能全体の様々な部分は完全にデータ記憶に専用されるサブシステムあるいはホストシステム自体において、実現される。メモリシステムは、ホストシステムに埋め込まれてもよく、あるいは非常に小さなカードの形などで取り外し可能とされてもよい。例えば記憶媒体がコントローラ部分から取り外し可能であるかのように、取り外し可能なメモリシステムの部分自体が取り外し可能であってもよい。メモリシステムにおいてデータ記憶に特に専用されるホストシステムの部分も、そのメモリシステムの一部であると考えられる。そのようなホスト機能は、ホストシステム上に存在するハードウェアに加えて専用ソフトウェアライブラリ、ドライバ、またはアプリケーションを含むことができる。
【００３４】
本願明細書で用いられる目的のために、“ホストシステム”は、一般にデータ記憶以外の機能を有するけれどもメモリシステムに接続もするかあるいはメモリシステムが埋め込まれているシステムである。データ記憶を唯一の目的とするホストシステムがある。
【００３５】
本願明細書に記載されているフラッシュメモリに記憶されているデータをリフレッシュしスクラブするための種々の技術は種々の特定の構成を有するシステムで実現され、その例が図２〜６に示されている。図２はメモリセルがグループ化されてブロックをなしているメモリアレイの一部分を示し、各ブロック内のセルは単一の消去操作の一部分として一緒に、普通は同時に、消去可能である。物理的ブロックは消去の最小単位である。
【００３６】
図２の個々のメモリセルブロックのサイズは様々であるけれども、１つの商業的に実施されている形は１ブロックに１セクタのデータを包含する。そのようなデータセクタの内容が図３に示されている。ユーザデータ５１は通常５１２バイトである。ユーザデータ５１に加えてオーバーヘッドデータがあり、これは、ユーザデータから計算されたＥＣＣ５３と、セクタデータかつ／またはセクタがプログラムされているブロックに関連するパラメータ５５と、パラメータ５５および含まれることのある他のオーバーヘッドデータから計算されたＥＣＣ５７とを含む。パラメータ５５は、ブロックが経験したプログラム／消去サイクルの数（“ホットカウント”）に関連する量を含むことができ、この量は各サイクル後または所与のサイクル数の後に更新される。この経験量の１つの用途は、全てのブロックの使用を均す（損耗レベル化(wear leveling)）ために論理ブロックアドレスを異なる物理的ブロックアドレスに定期的に再マッピングすることである。この経験量の別の用途は、プログラミング、読み出しおよび／または消去の電圧および他のパラメータを、いろいろなセクタが経験したサイクル数の関数として変更することである。スクラブされるべきブロックを特定するプロセスにおける経験量の付加的な用途が以下で記述される。
【００３７】
パラメータ５５は、メモリセルの各記憶状態に割り当てられているビット値の表示（一般にそれらの“ローテーション”と称される）を含むこともできる。すなわち、データの論理状態はいろいろな物理的記憶状態にマッピングされる。これも、損耗レベル化に有益な影響を及ぼす。ステータスまたは状態を示す１つ以上のフラグもパラメータ５５に含まれる。ブロックをプログラムしかつ／または消去するために使用されるべき電圧レベルの表示もパラメータ５５内に格納され、これらの電圧は、ブロックが経験したサイクル数および他のファクタが変化するときに更新される。オーバーヘッドパラメータ５５の他の例は、ブロック内の欠陥のあるセルの表示と、この物理的ブロックにマッピングされているデータブロックの論理アドレスと、主ブロックに欠陥がある場合における代用物の理的ブロックのアドレスとを含む。メモリシステムにおいて用いられるパラメータ５５の具体的な組み合わせは設計によって様々である。また、オーバーヘッドデータの一部または全部は、ユーザデータを収容するかあるいはオーバーヘッドデータが関連するブロックにではなく、そのような機能に専用される物理的ブロックに格納される。
【００３８】
図４のマルチセクタの物理的ブロックは図２の単一データセクタブロックとは異なる。依然として消去の最小単位である実例ブロック５９は４つのページ０〜３を含み、その各々はプログラミングの最小単位である。１ホストセクタ以上のデータが普通、そのセクタのデータから計算されたＥＣＣを少なくとも含むオーバーヘッドデータと共に、各ページに格納され、図３のデータセクタの形であってもよい。全ページよりは少ないデータが更新されるときに、更新されたデータは、通常、消去済みブロックプールからの消去済みブロックのページに格納され、残りの変更されないページ中のデータは元ブロックからその新しいブロックにコピーされる。元ブロックはその後に消去される。この大ブロック管理手法の変形例は、データを元ブロックから移したりそれを消去したりせずに、更新されたデータを他のブロックのページに書き込むことを含む。これは、複数のページが同じ論理アドレスを有するという結果をもたらす。最新のページのデータは、セクタまたはページのオーバーヘッドデータ中のフィールドとして記録されたプログラミングの時点などの何らかの便利な手法により特定される。
【００３９】
さらなるマルチセクタの物理的ブロックの構成が図５に示されている。ここでは、メモリセルアレイ全体が２つ以上のプレーンに物理的に分割され、４つのプレーン０〜３が示されている。各プレーンはメモリセルのサブアレイであって、他のプレーンから大部分独立して動作できるようにそれ自身のデータレジスタ、センス増幅器、アドレス指定デコーダなどを有する。全てのプレーンを単一の集積回路装置上あるいは複数の装置上に設けることができ、１つの例は１つ以上の別個の集積回路装置から各プレーンを形成する。図５のシステムの各ブロックは１６ページＰ０〜Ｐ１５を含み、各ページは１つ、２つあるいはもっと多くのホストデータセクタとある量のオーバーヘッドデータとの容量を有する。
【００４０】
別のメモリセル構成が図６に示されている。各物理的プレーンはセルの多数のブロックを含む。動作の並列性の程度を高めるために、別々のプレーンの中のブロック同士が論理的にリンクされてメタブロックを形成する。１つのそのようなメタブロックが図６においてプレーン０のブロック３、プレーン１のブロック１、プレーン２のブロック１およびプレーン３のブロック２から形成されるものとして示されている。各メタブロックは論理的にアドレス指定可能であって、メモリコントローラは個々のメタブロックを形成するブロックを割り当てて追跡する。ホストシステムは、好ましくは、個々のメタブロックの容量に等しいデータを単位としてメモリシステムとインターフェイスをとる。例えば、図６の論理データブロック６１は、そのメタブロックを形成するブロックの物理的ブロック番号（ＰＢＮ）にコントローラによりマッピングされる論理的ブロックアドレス（ＬＢＡ）により特定される。メタブロックの全てのブロックが一緒に消去され、各ブロックからのページは好ましくは同時にプログラムされ、また読み出される。
【００４１】
図２〜６に関して前に説明したメモリを実装するために使用される多様なメモリアレイのアーキテクチャ、構成および具体的なセル構造がある。いくつかのかく乱メカニズムを説明するためにＮＡＮＤ形のメモリアレイの１つのブロックが図７に示されている。直列接続されたメモリセルの、列方向の多数のストリングが電圧ＶＳＳの共通源６５とビット線ＢＬ０〜ＢＬＮのうちの１つとの間に接続され、このビット線は、アドレスデコーダ、ドライバ、読み出しセンス増幅器などを含む回路６７に接続されている。具体的に言うと、１つのそのようなストリングは、ストリングの両端の選択トランジスタ７７および７９の間に直列に接続された電荷蓄積トランジスタ７０，７１．．．７２および７４を含む。この例では、各ストリングは１６個の蓄積トランジスタを含むけれども、他の数も可能である。ワード線ＷＬ０〜ＷＬ１５は、各ストリングの１つの蓄積トランジスタを横断して延び、ワード線のアドレスデコーダおよび電圧源ドライバを含む回路８１に接続されている。ライン８３および８４の電圧は、ブロック内の全ストリングの、それらの選択トランジスタを通しての電圧源６５および／またはビット線ＢＬ０〜ＢＬＮへの一斉の接続を制御する。データとアドレスとはメモリコントローラから到来する。
【００４２】
ブロックの電荷蓄積トランジスタ（メモリセル）の各行は、一緒にプログラムされ読み出される１ページを形成する。そのようなページのワード線（ＷＬ）には、そのデータをプログラムしあるいは読み出すために適切な電圧が加えられ、その間に残りのワード線に加えられる電圧は、そのそれぞれの蓄積トランジスタを導通させるように選択される。１行（ページ）の蓄積トランジスタをプログラムしあるいは読み出す過程で、全てのストリングを横断してそれらのワード線に電圧が加わるので、選択されていない行の前もって蓄積されていた電荷レベルがかく乱される可能性がある。
【００４３】
スクラブプロセスのいろいろな態様
スクラブの主なフェーズが２つ、すなわち読み出しフェーズと訂正処置フェーズとがある。スクラブ読み出しは、特定のホスト操作の完了とも、また損耗レベル化などの他のいくつかのシステム操作のいずれとも直接には関連していないメモリシステムの領域に存するデータの選択および読み出しを一般に伴うので、他のシステム読み出しとは区別される。スクラブ読み出しの他の顕著な特徴は、システムがそのデータ読み出しから有益な情報を集めるのではなく、代わりにデータ完全性検査の結果がその操作の目的であるということである。システムの側におけるその後の動作は、特にデータ自体によってではなくて完全性検査の結果によって案内される。データが完全性検査に合格せず訂正動作が必要とされるならば、システムは後にデータ読み出しからの、オーバーヘッドデータなどの、何らかの情報の使用を必要とするかもしれない。特定のホスト操作を完成させず、メモリから有益なデータを得ないというこれらの特徴は、システムにより実行されるスクラブ読み出しと他のデータ読み出しとの間の基本的な差異である。
【００４４】
スクラブ読み出しされるべき特定の領域の選択は、一般に、メモリ装置の物理的特性と関連するシステム操作の通常の過程で実行される読み出し、書き込みおよび消去操作の位置および数により案内される。一般に、スクラブ読み出しは、メモリアレイ上の、他の領域における操作の結果として電圧、電流またはクロストークに対して露出された領域で実行される。あるいは、スクラブ読み出し位置を他のメモリ操作から減結合し、決定性またはランダムなシーケンスに従わせることができる。しかし、これは、よりかく乱された領域の同量のカバレージを得るためにより多くの読み出しが実行されなければならないので、システム性能の低下をもたらす可能性がある。
【００４５】
スクラブ読み出しの他の一つの態様は、スクラブ読み出しを何時実行するかの選択である。一般に、スクラブ操作は、例えばホスト操作の回数、物理的な読み出し、書き込みおよび／または消去操作の回数、期間、ホストの使用特性、またはその生成および検査が前述したいずれにも関連付けられる何らかのランダムなまたは擬似ランダムなシーケンスなどの、任意の数のファクタに応答して開始される。
【００４６】
スクラブ書き込みは、一般に、スクラブ読み出し中に読み出されたデータの完全性検査が不合格であったことの結果として実行される点で、他のシステム書き込みから区別される。スクラブ書き込みは、スクラブ読み出しとの関連において一意あるに過ぎない。スクラブ書き込みに類似するメカニズムを持っているけれどもその特定の目的のためには実行されない他の書き込み操作が実行される。一例では、通常のメモリシステム操作の過程で実行される読み出しまたは書き込み操作の後に完全性検査が不合格であった結果として書き込み操作が行われる。他の例では、スラブ読み出しがないときにデータがリフレッシュを目的として読み出されて再書き込みされ、書き込みを行うという決定はデータ完全性検査ではなくて他の何らかのファクタに基づく。１つのそのようなファクタは、ひどく使用されたかあるいは露出されたアレイ領域の存在であり、その場合にはその領域内のデータは再書き込みされるかあるいは移動される。データの連続的な移動あるいはリフレッシュが決定性のある仕方あるいはランダムな仕方で行われる。データは、損耗レベル化という意図された目的のために読み出され再書き込みされるけれども、かく乱問題を克服する仕方でデータをリフレッシュするという意図的でない利点がある。
【００４７】
実際、データ単位の相対的鮮度は、スクラブを行うための他の基準をデータ単位が満たしているときにデータ単位のスクラブを開始するか否かを決定するために使用される。すなわち、データの１つの単位が損耗レベル化、データ統合（ガーベッジコレクション）、前のスクラブまたは他の操作の一部として最近再プログラムされたのであれば、そのデータは最近リフレッシュされたのであるから、現在のスクラブを飛ばすことができる。いろいろなデータ単位の相対的鮮度は、例えば、ブロックのオーバーヘッドデータの一部分などにデータ単位と共に格納される経験カウント（“ホットカウント”）またはタイムスタンプで維持される。あるいは、物理的ブロックを、それらに格納されているデータの鮮度に応じてグループ化することができ、ブロックが属するグループはブロックのオーバーヘッドデータとして記憶される。そのとき、他の条件下ではスクラブの候補となるブロックの相対的鮮度を、実際にスクラブされるものを選択するときに１つのファクタとして用いることができる。そのとき、長い間記憶されていたために、それに蓄積されている電荷レベルが注意を要するほどかく乱されていそうなデータ単位にスクラブ操作を限定することによって、システム性能が改善される。
【００４８】
記憶されているデータの相対的鮮度を監視するために、論理的ブロックまたは物理的ブロックを、ブロックがどの程度最近に再プログラムされたかに基づいて効果的に集合にグループ化することができる。メモリアレイ全体の中の全ブロックあるいはアレイの１プレーン、ゾーンまたは他の部分の中のブロックに、１つの初期相対ホットカウント値を与えることができ、１つのブロックが再プログラムされるごとに相対ホットカウントを最も最近に移動された集合またはグループの値に更新することができる。最も最近に再プログラムされたグループの中に一定数のブロックが存在することになったとき、その最も最近に再プログラムされたグループの値をインクリメントすることができ、その後に再プログラムされた任意のブロックをその新しいグループ値に更新することができる。その結果として、最も最近に再プログラムされたブロックと最も前に再プログラムされたブロックとの割合に明確な差異を有する別々のグループを作ることができる。一般に、割合に小さな数のフィールドの使用を可能にするために、ブロックの相対ホットカウント値がロールオーバー (roll over)することを許される。
【００４９】
相対ホットカウントが利用されるとき、特定の例において、例えば‘０’から‘７’までの８個の可能な値があるときに実質的に全てのブロックが基本値‘０’から開始することができる。８個の値のうちの７個を使用することができ、１つの値は、最も最近にプログラムされたブロックを表す値と最も古いデータを含むブロックを特定する値との間のギャップを与えるために取っておかれる。この例では、書き込まれたブロックは、それらが最も最近にプログラムされたことを示すために新しい値‘１’を受け取る。一定数のブロックが新しい値‘１’に更新されたならば、その後にプログラムされるブロックは新しい値‘２’を受け取ることができる。一定数のブロックに値‘２’が割り当てられたならば、結局は、新たに再プログラムされたブロックに値‘３’を割り当てることができる。あるポイントでカウントはロールオーバーして、最も前に使用されたブロックが値‘２’を有し、最も最近にプログラムされたブロックが値‘０’を有し、そして最も古いデータを有するブロックの値と最も新しいデータを有するブロックの値とが明確に識別されるように値‘１’が両者の間にギャップを与えることとなる。結局、最も古いビンの中の全てのブロックが、ホスト書き込み、スクラブ、損耗レベル化または他のメカニズムを通じて再書き込みされる。前述した例では、そのときビン‘２’は空になり、この値はギャップとして役立つことができ、ビン‘１’は最も最近に書き込まれたブロックを特定するために使用される。ブロックが他の基準に基づいてスクラブ操作の候補になるときに、それをスクラブする操作は、その相対ホットカウントがそれをより最近に再プログラムされたブロックのグループのうちの１つの中に置くならば、飛ばされてもよい。
【００５０】
あるいは、論理的ブロックまたは物理的ブロックあるいはその両方のために絶対ホットカウントを維持することができ、その場合にはシステムは好ましくはそのようなホットカウントを用いてスクラブ決定を行うことができる。すなわち、ブロックが再プログラムされるとき、そのブロックが再プログラムされた合計の回数の表示を提供するためにその絶対ホットカウントがインクリメントされるか、ディクリメントされるか、あるいは他の仕方で維持される。多数の再プログラミング操作を示す絶対ホットカウントを有するブロックは、概して、少数の再プログラミング操作を示す絶対ホットカウントを有するブロックよりも最近に再プログラムされている。従って、割合に多数の再プログラミング操作が行われたブロックに格納されているデータをスクラブする操作は、データが顕著にかく乱されているということがなさそうであるから、飛ばされてもよい。
【００５１】
択一的に実行される多くの具体的なスクラブアルゴリズムおよび関連するメモリ操作がある。スクラブ操作は、メモリシステムコントローラにより制御され、あるいはメモリセル集積回路装置（チップ）の各々で制御され、あるいは部分的または完全にホストによって制御される。メモリシステムは、ホストに取り外し可能に接続可能であるか、あるいはホスト内に埋め込まれる。
【００５２】
スクラブ操作の読み出しフェーズは、いろいろな仕方で実行される。スクラブレートは、指定されたレベルのデータ完全性を維持しながら性能を最適化するために調整される。例えば、スクラブ操作が実行されるレートと、一度に読み出されるデータセクタの数との両方が調整される。そのような調整は、スクラブアルゴリズムの一部として自動的に行われる。例えば、スクラブのレートと位置とを、メモリのいろいろな領域での不均一なかく乱露出レートに適合させることができる。システム性能を最適化するため、あるいは特定の実時間ニーズを満たすために、スクラブ読み出しを延期することもできる。
【００５３】
スクラブ読み出しが実行される仕方にも種々の選択肢がある。例えば、データの集合は、名目上の基準レベルとマージン付き基準レベルとの両方で読み出される。マージンの量は、遭遇する特定のかく乱メカニズムを目標とする。例えば、読み出されたデータがＥＣＣによって訂正されなければ、より広いマージンでの読み出しがデータを回復するかもしれない。データがエラーなしで正常に読み出されるならば、より狭いマージンでの読み出しがデータの質についての情報を提供することができる。
【００５４】
スクラブ読み出し後、訂正動作を行うか否かが決定される。そのような決定の基礎となるファクタは、検出された誤っているビットの数および／またはパターンに基づく動作のレベルを含む。
【００５５】
訂正処置は、一般に、読み出したデータをメモリ内の同じまたは異なる位置に再書き込みすることを含む。そのようなスクラブ書き込みは、システム性能を最適化するため、あるいは特定の実時間ニーズを満たすために、延期される。訂正処置は、さらに、スクラブ書き込み操作中のデータのローテーションを含むことができる、すなわち、特定の記憶されているデータを表すメモリセル状態が、以前のそれから変更される。訂正処置は、かく乱されやすいと考えられるセル、列または他の構造をシステム外へマッピングすることをも含む。
【００５６】
大多数のホストプロトコルは、メモリが一般的にホストにより論理ブロックアドレス番号（ＬＢＡ）でアドレス指定されるように、メモリシステムとのアブストラクトインターフェイスを有する。ＡＴＡホストプロトコルにおけるシリンダヘッドセクタのような、代わりの等価なアドレス指定モードが存在するけれども、基本的思想は、メモリシステムが所与のホストデータセクタを格納してある物理的位置についてホストがなんらの知識も持っていないということである。ホストシステムは、データセクタを格納し取り出すべき独立して論理的なブロックアドレスの線形に連続的な集合を利用することができる。これらの抽象化されたホストプロトコルは、一般に、メモリ操作を制御し、マッピング機能、データ管理、エラー回復などを実行するためにメモリシステム上にコントローラが存在することを必要とする。ホストは一般にメモリシステムの物理的態様についての知識を持っていないので、これらの抽象化されたホストプロトコルと動作するメモリシステムは、好ましくは、スクラブ操作を実行するためにメモリシステムに存するコントローラに依拠する。
【００５７】
一方、あるホストプロトコルは、そこにおいてホスト自体がメモリ管理機能を実行するところのインターフェイスを有する。これらのプロトコルに従うメモリシステムは、通常、たとえ持つとしても、最小限のコントローラ機能しか持たない。ホストシステムではなくてメモリシステムによって実行される種々の機能部分、例えばＥＣＣ生成、ＥＣＣ検査、あるいはＥＣＣ訂正など（これらに限定されない）がある。これらのホストメモリ管理されるプロトコルで動作するメモリシステムは、通常、スクラブ操作を実行するには不十分な論理を有するので、スクラブ操作を実行するために普通ホストに依拠する。
【００５８】
あるメモリシステムは、メモリ装置を操作しメモリ管理機能を実行することを目的とする専用コントローラを有する。別のあるメモリシステムは、専用のメモリコントローラを持っておらず、代わりにメモリ管理操作を実行するためにホストインフラストラクチャの部分に依拠する。一例として、不揮発性メモリ装置はホストシステムの汎用マイクロプロセッサに直接接続され、メモリ管理機能はソフトウェアによって実行される。コントローラを持たないそのようなメモリシステムでは、メモリ管理操作に関して責任を有する同じサブシステムが好ましくはスクラブ機能をも実行する。
【００５９】
コントローラを有するメモリシステムについて、コントローラ機能が不揮発性メモリ装置（集積回路チップ）自体に統合されるということがある。極端な例では、コントローラ全体がメモリ装置に統合される。
【００６０】
メモリシステムは、ホストシステムに埋め込まれることができ、その機能は、汎用であるかまたは他の機能を有するホストサブシステムに様々な程度に統合される。そのような埋め込まれたメモリシステムでは、必ずしもそうとは限らないけれども、一般に同じホストプロトコルに従う。しかし、概して、メモリシステムを操作するために機能の同じセットが必要とされる。
【００６１】
抽象化されたホストプロトコルの場合にはメモリシステムが通常スクラブ操作を実行するが、ホストシステムがそのようなシステムにおいて特別のコマンドまたは他の所定のインターフェイストランザクションを用いてスクラブ操作を開始できるということがある。この機能を実行する１つの理由は、データを格納しあるいは取り出すためにメモリシステムがアクセスされることのない期間についてホストシステムが最も良く知り、ホストシステムがそのような期間中に機会をとらえてスクラブ操作を開始することができるからである。このようにして、性能に対する影響を最小限にとどめながらシステムの全体としての信頼性を高めることができる。スクラブ操作を開始するために使用されるメカニズムは、特にスクラブを目的とするものであり、あるいはハウスキーピング操作のために時間を使用することをメモリシステムに知らせるための汎用メカニズムである。後者の場合、スクラブ操作は、そのような期間中にメモリシステムにより実行されるいくつかの操作のうちの１つである。
【００６２】
所与のメモリ操作に起因する露出の領域は一般に広くて、操作が行われるごとに露出された領域の全体をスクラブするのは実際的でない。一般に、露出された領域の一部分だけがスクラブされるべく選択され、スクラブのレートは、誤っているビットの数とシフトされたセルのレベルとがメモリシステム上で利用可能な回復方式を越える前にスクラブ操作が最もかく乱された領域を検出するように、セットされなければならない。
【００６３】
スクラブ操作が実行されるレートは、データ完全性とメモリシステム性能との両方に影響を及ぼす重要なパラメータである。スクラブのレートが高いほど、誤っているビットの数とシフトされたセルのレベルとがメモリシステム上で利用可能な回復方式を越える前にデータのブロック内のかく乱されたセルを検出する可能性が高くなる。しかし、スクラブレートが高いほど、より多くのメモリおよびコントローラ時間がこの操作に対して与えられることになるので、メモリシステムの性能の低下が大きくなる。性能の犠牲をなるべく少なくしながら所望のレベルのデータ完全性を保証することを目的として、スクラブレートは、適切であると考えられる任意のガードバンドを伴って必要最小限に最適化される。スクラブ操作が実行されるレートは２つの方法、すなわち１）スクラブ操作を実行する時間の選択、および２）一度にスクラブ読み出しするセクタの数の選択で変化する。
【００６４】
データ完全性を維持するために必要とされるスクラブのレートが製品の寿命中に変化するということがある。例えば、セルがより多くサイクルされるに連れて、かく乱のレートは増大するかあるいは減少する。スクラブの固定されたレートが製造時にセットされるのであれば、メモリシステムの寿命全体にわたってメモリシステム完全性を維持するためにはメモリシステムの寿命全体にわたって必要とされる最高のレートが使用されなければならない。これは、低いスクラブレートで充分であるときに高いスクラブレートが使用されるという結果をもたらし、その結果としてメモリシステムの寿命中のあるときに必要以上にメモリシステム性能が犠牲にされることになる。メモリシステムの寿命中にスクラブレートを調整するアプローチがいくつかある。
【００６５】
メモリシステム製造時に可変スクラブレートをセットすることが可能である。そのようにする１つの方法は、かく乱レートに影響を及ぼす任意の測定法で異なるスクラブレートをセットするレート値のテーブルを提供することである。一例は、メモリアレイの様々な部分が経験するいろいろなプログラム／消去サイクルカウントのためのスクラブレートを含むテーブルである。メモリシステムがサイクルカウントを維持するならば、スクラブレートパラメータは、アレイの所与の領域の最悪の場合のまたは平均のサイクルカウントに基づいてテーブルから選択される。
【００６６】
他の１つのアプローチは、メモリシステムが前のスクラブ操作の結果に基づいてスクラブレートを自己調整することを可能にすることである。例えば、メモリシステムがスクラブ操作のログを維持し、非常に低い割合のスクラブ操作が訂正処置を必要とすると判定したならば、メモリシステムは、メモリシステムがスクラブ読み出しを実行するレートを下方調整することができる。一方、非常に高い割合のスクラブ操作が訂正処置を必要とすると判定されたならば、スクラブ読み出しを実行するレートを下方調整することができる。メモリシステムがそれによりスクラブレートを調整するところの他の１つの測定法は、前のスクラブ操作中に個々の記憶素子において検出されたシフトの量または誤っているビットの数である。前述したいずれの場合にも、システムはスクラブレートパラメータを各々の新しい結果で適応的に調整することができ、あるいはシステムは定期的調整のために情報を記録することができる。
【００６７】
スクラブ操作を行うときを選択するために使用される手法がいくつかあり、その実例のいくつかは、１）ランダムまたは擬似ランダム、２）ホスト操作の数に基づく、３）メモリ装置における操作の数に基づく、４）時間間隔に基づく手法である。スクラブ操作が実行されるレートを調整するために前述した方法のいずれをも使用することができる。以下の仮定は、スクラブ決定のために必要とされる任意のパラメータが製造時に提供されるということである。読み出し操作、書き込み操作および消去操作について、これらの各々は異なるレートでメモリをかく乱するので、異なるレートがある。
【００６８】
スクラブ操作の頻度を決定するために、乱数（ＲＮ）または擬似乱数（ＰＲＮ）がシステムにとって利用可能であるかあるいはシステムにより生成されるならば、乱数または擬似乱数を用いることが可能である。スクラブ操作を実行するか否かを決定するためにＲＮシーケンスまたはＰＲＮシーケンスを用いるためのいくつかの方法が以下で記述される。以下の方法の全ては、ＲＮが何らかの規則正しい間隔でチェックされることと、スクラブを実行するか否かの決定がＲＮ値の何らかのテストに基づくということとを仮定している。
【００６９】
乱数を用いてスクラブレートを決定する１つの方法は、ＲＮまたはＰＲＮと、いくつかのビットの個数が値１にセットされ、残りのビットが０にセットされているマスクパラメータとの論理積を実行することである。スクラブを実行するか否かの決定は、論理積の結果がゼロであるか非ゼロ値であるかに基づく。より多くの１を有するマスクパラメータがゼロ値をもたらす頻度は、より多くの０を有するマスク値のそれより小さい。以下のテーブルは、論理積の結果が０であればスクラブ操作が行われると仮定して、いろいろな８ビットのマスク値でのおおよそのスクラブのレートを示す。真にランダムなシーケンスでは１の値を有するビットの個数だけがレートに影響し、値自体は影響しないので、テーブル中の値は単なる代表値に過ぎないということに留意されたい。
マスク値（１６進法）            マスク値（２進法）    スクラブレート
０ｘ００  ００００００００      １／１
０ｘ０１  ０００００００１      １／２
０ｘ０３  ００００００１１      １／４
０ｘ０７  ０００００１１１      １／８
０ｘ０Ｆ  ００００１１１１      １／１６
０ｘ１Ｆ  ０００１１１１１      １／３２
０ｘ３Ｆ  ００１１１１１１      １／６４
０ｘ７Ｆ  ０１１１１１１１      １／１２８
０ｘＦＦ  １１１１１１１１      １／２５６
【００７０】
別の関連する方法は、スクラブ操作を実行するか否かを決定するためにＲＮ中の値１のビットの個数を数える。この場合にも、ＲＮ中のビットの個数が、しきい値を示すマスクあるいは値と比較される。もう一つの方法は、ＲＮの値をスクラブレートパラメータのそれと比較することを含む。スクラブを実行するか否かの決定は、ＲＮがしきい値を数値的に越えるか否かに基づく。例えば、５というしきい値について、ＲＮは時間の５／２５６大きい。
【００７１】
あるいは、スクラブのレートは、実行されたホスト操作の数に関連付けられてもよい。例えば、スクラブ操作はＮ回のホスト読み出し操作、ホスト書き込み操作および／またはホスト消去操作ごとに実行され、このＮはスクラブのレートをセットするレートパラメータである。さらにスクラブのレートは、実行されたメモリ操作の回数に関連付けられてもよい。例えば、スクラブ操作はＮＲ回の読み出し操作、ＮＷ回の書き込み操作および／またはＮＥ回の消去操作ごとに実行されてよく、このＮＲ、ＮＷおよびＮＥはスクラブのレートをセットするレートパラメータである。別の選択肢として、メモリシステムが時間間隔を測定する方法を含む場合には、スクラブは何らかの規則的な時間間隔Ｔで実行され、このＴはスクラブのレートをセットするために提供されるパラメータである。
【００７２】
メモリシステムの性能を維持するために、スクラブ読み出しを実行するという決定がなされた後でもスクラブ読み出しを延期することが望ましいかもしれない。そうする理由は、実時間考慮事項を含む。例えば、ホストは一定のデータ転送を必要とすることがあり、一定のときにリソースをスクラブに使用することが、保証されたデータ転送速度を満たすメモリシステムの能力に著しく影響するということがある。そのような目的のために、メモリシステムは、後にスクラブを実行することがホストにとって性能に著しく影響しないときに処理するべくスクラブ操作パラメータを待ち行列に入れることができる。スクラブ操作は、後のホストコマンド処理中のあるときまで、コマンド処理後のあるときまで、あるいは後のホストコマンドまで、延期される。そのような場合、決定されたスクラブ操作パラメータは、記憶されて、後にホストにとって都合のよいときに処理される。
【００７３】
メモリアレイの露出された領域は、所与のときにその一部分だけがスクラブされるに過ぎないので、適切な範囲を達成することの１つの重要な態様は、スクラブを実行するという決定がなされた後にどこをスクラブするかを選ぶことである。どこをスクラブするかの選択は、一般に、メモリ装置に対する読み出し操作、書き込み操作および／または消去操作の位置に関連する。その選択には、所与のメモリ操作がそこにおいて他の記憶素子をかく乱することになるところの領域についての知識が埋め込まれる。スクラブされるべき領域を操作された領域に関連付ければ、スクラブ操作はおそらくかく乱されていないメモリ領域では実行されないから、スクラブ操作は非常に効率的となる。
【００７４】
スクラブされるべき位置を選択する１つの方法は、所与の操作の露出の領域の中から位置を選択するためにＲＮまたはＰＲＮを用いることを含む。概して、最も顕著な露出を経験した領域が、スクラブされるべく選択される機会を最も多く持つ。ある領域が他の領域より頻繁に選択され、単に平均して一様なカバレージがあるに過ぎないとすれば、スクラブのレートは、予想される最悪の場合の乱数カバレージに対処するように調整される。
【００７５】
スクラブされるべき位置を選択する他の１つの方法は、露出された領域を決定論的に通ることを含む。しかし、この方法は、完全なカバレージを保証するためにメモリ操作およびスクラブ操作の両方を記録することを必要とする。
【００７６】
メモリに対する活動が記録されるのであれば、かく乱する可能性のある操作に対して所与の領域が露出される程度の尺度を得ることが可能である。そのような情報が与えられたならば、メモリシステムは、ログを調べて、最もひどく露出された領域を探し出し、スクラブ操作をそれらの領域に限定することができる。この方法は、スクラブするレートおよび位置を決定する前に説明した方法のいずれをも導くために使用される。一般にプログラム／消去サイクルは、サイクルカウント情報の維持を通して追跡される。しかし、一般に読み出し活動を記録するのは実際的でないので、この方法は読み出し露出を追跡するためにはおそらく使われない。
【００７７】
あるいは、訂正処置の位置を記録して、他よりもかく乱されやすいかもしれないかあるいは他よりも顕著に露出される領域への案内として使用することができる。メモリシステムは、スクラブされるべき領域の選択に、特に他よりも頻繁に訂正処置を必要とした領域の選択に重みをかけるために、この情報を用いることができる。
【００７８】
かく乱露出の可能性のある領域についての知識が維持されないシステムでは、そのような知識とは無関係にランダム方法あるいは決定性のある方法のいずれも使用することができる。この場合、どこでホスト活動がメモリシステムにおける操作を引き起こすかを考慮せずに、スクラブはメモリシステム全体で実行される。しかし、充分なカバレージを保証するのに充分な高さにスクラブのレートが調整される。これは一般にリソースの大いなる浪費である、なぜならば、メモリシステムの中には、他よりも遥かに顕著に露出を経験し、好ましくはスクラブ操作の主要な焦点領域となる領域がある。
【００７９】
スクラブ操作の目的は、誤っているビットの数とシフトされたセルのレベルとがメモリシステムで使用可能な回復方式を越える前に、かく乱された記憶素子を検出することである。この目的のために、一般に、かく乱をなるべく早く検出し、所与の電圧しきい値レベルのためのガードバンドの多くがかく乱に至るまで失われてしまう前にかく乱を検出することが望ましい。
【００８０】
前に背景技術の欄で説明したように、フラッシュメモリは普通別々の離散的な状態、すなわち電荷蓄積レベルの範囲でデータを記憶し、各状態はあるガードバンドによって他の状態から分離される。一般に各状態の間には弁別の公称感知レベルがあり、その上では記憶素子は１つの状態にあると見なされ、その下では別の状態にあると見なされる。所与の記憶素子がかく乱されるとき、それまで記憶素子がプログラムされていたかあるいは消去されていたところのレベルがシフトし始めるかもしれない。記憶素子のレベルが弁別の感知レベルに近づくか、あるいはそれを超えたならば、それがプログラムされていたかあるいは消去されていた状態とは異なる状態にあるデータを生じさせる。エラーは、一般にデータにおいて誤っている１つ以上のビットとして現れ、一般に、データフィールドを対象とするＥＣＣの使用を通じて検出される。
【００８１】
弁別の感知レベルが１つの状態あるいは別の状態の方へもっとシフトされるように読み出し条件をマージニング (margining)すなわちバイアスすると、そのシフト量が公称読み出し条件下ではエラーを生じさせないとしても、かく乱された記憶素子が間違った状態で感知されることになる。これは、正常なメモリシステム操作中にそれがエラーを生じさせることになるポイントに近づく前にシステムがシフトを検出することを可能にする。
【００８２】
かく乱メカニズムが特定の仕方でデータ記憶レベルに影響することが知られているならば、読み出し条件を予期されるレベルシフトの方へマージニングすることによって、それらの特定のかく乱メカニズムの検出を目標とすることが可能である。予期されるかく乱メカニズムをマージン条件の単一のセットのもとで単一の読み出し操作で目標とするのが理想的であるけれども、これは普通不可能であるかもしれない。異なる複数の条件下で複数の読み出し操作を実行することが必要かもしれない。例えば、メモリに存在するいろいろなかく乱メカニズムに起因して記憶素子がより一層プログラムされあるいはより一層消去されるということがある。弁別レベルの上および下の両方の記憶素子がそれのほうへシフトされることがあり、その場合には、始めに記憶レベルにおける１つの状態からの、その後に他方の状態からの、弁別レベルの方へのシフトについて検査を行う必要があるかもしれない。
【００８３】
訂正処置が取られるべきか否かを判定するしきい値として使用されるデータ品質についての尺度が２つある。すなわち、１）ＥＣＣの使用を通じてのデータエラーを検出することと、２）ほんの少数のデータエラーが検出されたかあるいは全く検出されなかったとしても、電荷蓄積レベルのシフトがデータ読み出しエラーを引き起こす前にシフトを検出できることとである。
【００８４】
前に論じたように、ある予期されるかく乱メカニズムを目標とするため、あるいは蓄積されているレベルにおける充分なマージンについて単に調べるために、スクラブ読み出し条件をマージニングすることができる。データが公称条件下で読み出されてもあるいはマージニングされた条件下で読み出されても、訂正処置を取るべきか否かの決定は、スクラブ読み出し操作中に検出された誤っているビットの数に基づくことができる。例えば、誤っているビットの数がシステムのＥＣＣ訂正能力より少なければ、システムは、訂正処置を延期すると決定でき、あるいはエラーを完全に無視することができる。
【００８５】
訂正処置を開始することについてのしきい値として誤っているビットの数を用いることに加えて、システムは、誤っているビットのパターンなどの他のファクタに基づいて訂正を行うことを決定することができる。例えば、ＥＣＣ訂正能力はビットエラーパターンに敏感であり、あるいはビットエラーパターンは不揮発性メモリにおける特定の既知なかく乱メカニズムを示す。しきい値をビットエラーパターンに基づかせる理由は他にもある。ビットエラーパターンは一般にＥＣＣ訂正操作中に明らかにされる。
【００８６】
たとえ訂正処置が必要であると判定されていたとしてもスクラブ訂正処置を遅らせることが性能上の目的から望ましいということがある。そうする理由は、実時間考慮を含む。例えば、ホストが一定のデータ転送を必要とすることがあり、一定のときにスクラブ訂正処置にリソースを使用することが、メモリシステムの保証データ転送速度を満たす能力に大きく影響するということがある。そのような目的のために、後に、スクラブ訂正処置を実行してもホストにとっては性能に大きな影響が及ばないときに処理を行うために、メモリシステムはスクラブ訂正処置操作パラメータを待ち行列に入れることができる。スクラブ訂正処置操作は、後のホストコマンド処理中の何らかのときまで、コマンド処理後の何らかのとき、あるいは後のホストコマンドまで、延期されてもよい。要点は、スクラブ操作パラメータが記憶されて、後にホストにとって都合のよいときに処理されるということである。
【００８７】
２つの顕著に異なる極端なメモリアーキテクチャがあり、その各々が、ホストデータをメモリ装置上の物理的位置にマッピングする別々の方法およびプログラムされたデータを管理しデータにアクセスする別々の方法に通じる。その２つのアーキテクチャの基本的相違は、消去の最小単位のサイズと、それとホストプロトコルデータセクタのサイズとの関係とに関連する。
【００８８】
消去の最小単位のサイズがホストデータセクタのそれに近ければ、直接アドレス指定方式を実行することが可能であり、その場合には所与のホストデータセクタは、一般に、それがホストによって書き込まれたのと同じ物理的位置にマッピングされる。そのような方式では、一般に、前の内容は、その物理的位置から、取って代わるデータがその位置に書き込まれる前に、消去される。この再書き込みは、消去の最小単位のサイズがホストセクタのそれより大きければ、読み出し−修正−書き込みを必要とする。このアドレス指定方式ではホストセクタが記憶システム内の代わりの位置に再マッピングされるということがあるけれども、これは一般的にはセクタ再割り当ての間に欠陥管理操作の一部分として行われるか、あるいは他のシステム信頼性目的のために行われるに過ぎない。そのようなマッピングの後、ホストセクタは、一般に、他の何らかの再割り当てイベントのときまで、新しい物理的位置にマッピングされたままである。そのような直接アドレスマッピング方式では、かく乱に起因する訂正処置は、一般に、かく乱されていると判定された物理的位置から内容を消去し、それらを同じ位置に再書き込みすることを伴う。その再書き込みの間のエラーは、再消去および再書き込み、再割り当て、消去パラメータもしくは書き込みパラメータの変更などを含むがこれらに限定されない、システムにより使用される一般的な例外処理と矛盾しない仕方で処理される。
【００８９】
一方、消去の最小単位のサイズがホストセクタのそれより遥かに大きければ、消去プーリングアドレス指定方式を実行するのが普通である。そのようなアドレス指定方式も、消去の小さな最小単位を有するメモリで実行される。消去プーリング方式では、ホストセクタは普通論理ブロックにグループ分けされ、それらの論理ブロックは消去の物理的単位にマッピングされる。所与のホストデータセクタは、消去の単位の中で他のホストデータセクタにより囲まれる。ホストが所与のデータセクタを書き込むとき、目標セクタを囲む全てのセクタを読み出し、そのブロックを消去し、その後に、新しいデータを含む１つのホストセクタと共に全てのセクタを消去の単位に書き戻すのは実際的でない。このような過大なオーバーヘッド操作を避けるために、消去プーリング方式は、一般に、データの新しいバージョンが書き込まれるときにデータの新しいバージョンを収容する目的のためにいくつかの消去の単位を消去済み状態に保つ。セクタは一般にデータ管理目的のために論理グループにグループ分けされ、一般にシステムは同じ論理グループ内のセクタ同士の物理的近接性を維持しようとする。普通、高度な書き込み並列性を可能とする目的で、メタブロックまたは仮想ブロックと呼ばれる論理的構成物を形成するためにいくつかの消去の単位が結合される。一般に、ホストからの新しいデータは消去済みの位置場所に書き込まれる。あるポイントで、新しいデータに取って代わられていない同じ論理グループからの他のセクタが、同じメタブロックにコピーされるか、あるいは新たに書き込まれるデータと共に他のメタブロックにコピーされる。後に、所与のメタブロック内あるいは消去の単位の中の全てのデータが取って代わられるかあるいはどこか他の場所にコピーされたならば、そのメタブロックまたは消去の単位は消去され、消去済みの消去の単位のプールの一部と見なされる。このような消去プーリングアドレス指定方式では、かく乱に起因する訂正処置は、一般に、正常なメモリシステム動作のためにシステムにより要求されるデータ統合の他に、影響を受けたデータをメモリシステム上の他の位置にコピーすることを伴う。
【００９０】
しかし、スクラブ操作中に訂正処置を必要とするデータは、ホスト活動または一般的なデータ管理に起因する書き込み操作とは別様に処理される。データを、それと論理的に隣接するデータと統合することがシステムにとって都合が良くなるまで短時間の間そのようなデータを収容するために取って置かれている特別の位置に書き込むことが可能であり、この領域は予備として取って置かれるかあるいは要求に応じて割り当てられる。事情によっては、システムが単にデータを消去して同じ位置に再書き込みするということも可能である。例えば、物理的ブロック内に他のデータが少しだけ存在するかあるいは全く存在しなければ、他のデータは、どこか他の場所に永久的に移されるか、あるいは消去中どこか他の場所（おそらくは揮発性メモリ）に一時的に格納され、そして、訂正処置を必要とするデータと共に書き戻される。データ書き込み中のエラーは、再書き込み、再割り当て、新しい位置への書き込み、消去パラメータもしくは書き込みパラメータの変更、データ極性の強制的回転などを含むがこれらに限定されない、システムにより使用される一般的な例外処理と矛盾しない仕方で処理される。
【００９１】
個々の記憶素子、記憶素子のグループ、あるいは他の構造物の中には、他のものよりもかく乱されやすいものがある。ありうるそのような構造物またはグループ化の例としてのフラッシュメモリ記憶素子は共通のドレイン、ソース、またはゲート線を共有するように構成され、そして、プロセスにおける分散に起因して、接続されている記憶素子のそのような１つのセットがかく乱を行う可能性のある信号に対して平均よりも強く露出されるということがある。同様に、アレイを形成するために使用されるプロセスにおける分散に起因して、個々の記憶素子のうちのあるものは他のものより影響を受けやすいかもしれない。記憶システムは、かく乱されやすいと考えられるこれらの領域を永久的にマップアウトしあるいは再割り当てするように設計される。極端な場合には、スクラブ訂正処置が最初に発生したときに任意の記憶素子あるいは他の構造物が再マッピングされる。例えば、ＥＣＣ訂正を必要とするビットを含む記憶素子は、冗長記憶素子が使用可能であるならば、マップアウトされる。他の実施形態では、訂正処置の位置が記録され、後に記憶素子またはグルーピングを再マッピングする目的で分析される。その分析は、所与のグルーピングが訂正処置を必要とした回数のしきい値を必要とする。ある場合には、つながっている複数の記憶素子のような予期される物理的構造物の存在を検出するために、記録されたデータはメモリ装置の物理的態様についての知識を用いて分析される必要があるかもしれない。記憶素子または記憶素子のグルーピングが再マッピングされる仕方は、メモリシステムの実施例による。例えば、論理的セクタを含む物理的領域は、マップアウトされる記憶素子に取って代わることを目的とする冗長記憶素子を含むことができる。他の例では、１つのセクタの全体または複数のセクタのグループの全体が、それが訂正処置を必要としているならば、マップアウトされる。
【００９２】
スクラブ操作は、ホスト操作のバックグラウンドで、あるいはホスト操作とホスト操作との合間に、実行される。ホストが要求した操作のタイプによってスクラブ操作の挙動を変更することが望ましいかもしれない。例えば、スクラブ訂正処置がホスト読み出しコマンドの実行中に行われることは不都合であるかもしれず、その場合、その訂正処置は、メモリシステムにとってもっと都合のよいときまで延期される。
【００９３】
かく乱を回避するための１つの代わりのアプローチは、かく乱する可能性のある露出をこうむったデータを、始めにそのデータが誤っているか否かを判定する検査を行うことなく移動させることである。移動するデータの頻度および位置を選択するための多くのアプローチがあり、その大部分は前に説明されている。
【００９４】
スクラブの一般的な実施形態
図８のフローチャートは、実例としてのフラッシュメモリのスクラブアルゴリズムの主要なステップを概説している。第１のステップ９１は、スクラブ操作についてのトリガーイベントが発生したときを判定するメモリシステムの活動を監視する。そのようなトリガーイベントは以下のもののうちの１つ以上である。
１．他の単位の電荷レベルをかく乱するかもしれないデータ読み出し、データ書き込みまたは消去操作が所与のブロックまたはアレイの他の単位の中で行われたとき。その操作の強度および／または持続時間は、かく乱に対するアレイの感受性と同じく、スクラブ操作をトリガーするか否かを決定する上で重要であるかもしれない（個々の状態を定める狭い電荷レベル範囲を有する多状態でメモリが動作しているときなど）。
２．所与の単位の通常システム読み出し操作が少なくとも１つまたは所定数のビットエラーを伴うデータを読み出すとき。
３．（通常読み出しより狭いプログラムされた分布を読み出すようにセットされた基準レベルでの）マージン読み出しが、プログラムされているセルのしきい値レベルが（ビットエラーが存在しないけれども）最適ではないことを示すとき。
４．最後のスクラブ操作から所定の時間間隔が経過した後。
５．ホストがスクラブ操作を開始するとき。
【００９５】
総合的な目的は、かく乱されたデータを、それがメモリシステムで使用可能であるどんな回復方式（ＥＣＣなど）をも超えてしまうほど多数になる前に、検出するのに充分な程度に頻繁にスクラブ操作を開始することである。
【００９６】
スクラブトリガーイベントが検出されたならば、次のステップ９３は、スクラブ操作を実行するためにメモリアレイ内の位置を決定する。候補例は、以下のように決定される。
１．読み出し、書き込みまたは消去操作中に電圧または電流が加えられるビット線、ワード線または他の信号線を所与の単位と共有する、所与の単位の外側のブロックまたは他の単位。
２．所与の単位の信号線と、それらの間にクロストークが存在するようにフィールド結合された信号線を有する、所与の単位の外側の他の単位。
３．そのような他の単位がプログラムされるかまたは消去されるかが、それらが所与の単位に対する操作により影響される可能性があるか否かを決定する。
４．影響を受ける可能性のある単位は、操作が読み出しであるのか、書き込みであるのか、またはそれとも消去であるのかに依存する。
５．読み出されたデータの中のエラーを発見する所与の単位の通常のシステム読み出しによりトリガーされたならば、所与の単位はスクラブ操作に向けて特定される。
６．候補ブロック中のデータの相対的鮮度は、より最近に再書き込みされたものを排除するために使用される。
【００９７】
スクラブについての候補としてメモリブロックまたは他の単位が特定された後に必ずスクラブが実行されるとは限らない。次のステップ９５により示されているように、スクラブ操作の開始は一定の状況下では延期され、その例は以下のとおりである。
１．システム性能を最適化するためあるいはメモリシステムの特定の実時間動作ニーズを満たすためにスクラブ読み出しは延期される。
２．自己調整スクラブ：スクラブ操作が実行されるレートは、性能維持とデータ完全性とを最適に均衡させるために動的に調整される。
３．スクラブ操作を実行することの緊急性は、ある程度影響を受ける可能性があると特定された単位の特性、例えばその経験レベル（プログラミング／消去サイクルの回数）、およびスクラブ操作をトリガーさせたイベントのタイプから判定される。
４．スクラブトリガーイベントはさらに、確定的、ランダムあるいは擬似ランダムに、
（ａ）指定された数のホスト操作の後、
（ｂ）指定された数の物理的読み出し、書き込みおよび／または消去操作の後に、
（ｃ）指定された期間の後、
（ｄ）ホストの使用特性に基づいて、あるいは
（ｅ）その生成および検査を前述したいずれにも関連付けることのできるランダムあるいは擬似ランダムなシーケンスで、発生するようにさらに限定される。
【００９８】
次のステップ９７で、スクラブの候補としてステップ９３で特定されたメモリのブロックまたは他の単位の全部または一部だけがスクラブ操作されるべく選択される。選択基準は以下のものを含む。
１．任意の１操作でスクラブされるべく特定される決定される単位の数は、スクラブにかかる時間のシステム性能に対する影響とデータ完全性を維持する必要性とを均衡させるように選択される。
２．この均衡が保たれる仕方は、メモリの年齢と、特定された単位が経験したプログラミング／消去サイクルの数と、スクラブ操作をトリガーしたイベントのタイプと、および特定された単位の中のデータに対して必然的にとられた訂正処置のヒストリとに依存する、現在のスクラブ操作を受ける単位の数を特定することである。
３．スクラブ操作に含まれる単位の数は、メモリの年齢と、所与の単位が経験したプログラミング／消去サイクルの数と、スクラブ操作をトリガーしたイベントのタイプとに依存する。
４．あるいは、確定的、ランダムあるいは擬似ランダムなシーケンスに通常使用とは無関係の仕方で従って、特定された単位の全部よりは少ない単位がスクラブされるべく選択される。
【００９９】
次に、ステップ９９により示されているように、選択された単位から以下に従ってデータが読み出される（スクラブ読み出し）。
１．スクラブ読み出しは、特定のホスト操作の完了にも、また損耗レベル化などの他のシステム操作にも直接関連しないけれども、普通は通常のデータ読み出しと同様に実行される。
２．以下の特定の状況においてはマージン読み出し（通常のデータ読み出しのそれとは異なる基準レベルでの読み出し）が実行される。
（ａ）ＥＣＣにより訂正するには余りに多いエラーを有するデータの第２の読み出しとして。この第２の読み出しにおける基準レベルは、通常読み出しより広いプログラムされた分布を読み出すように緩められる。（あるいは、代わりに、以下で論じられるデータ訂正ステップ１０７で実行される。）あるいは、
（ｂ）トリガーするイベントにより引き起こされると期待される特定のかく乱メカニズムが、プログラムされたレベルをおそらく顕著にシフトさせそうであるときには、最初の読み出しは、より広い基準レベルを有するマージン読み出しである。あるいは、
（ｃ）最適レベルからシフトしてしまった電荷レベルとして記憶されているデータを特定するためにＥＣＣにより訂正可能なビットエラーを全く持たないかあるいは少数持っているデータの第２の読み出しとして。この第２の読み出しの基準レベルは通常の読み出しより狭い分布を読み出すために引き締められる。（マージンスクラブ読み出しは図１０に関して後にさらに論じられる。）
３．ブロックのデータの読み出しの一部分として、オーバーヘッドデータも読み出される。データの相対的鮮度がヘッダに格納されていれば、スクラブされる必要のない最近に再書き込みされたブロックを特定するために使用することができる。
【０１００】
次のステップ１０１は、読み出されたデータの完全性を評価する。スクラブ読み出しの一部として、メモリ単位から読み出されたユーザデータからＥＣＣを計算し、それを、以前にプログラミング中に計算されてユーザデータと一緒に記憶されたＥＣＣと比較することができる。ビットエラーがないかあるいはＥＣＣにより訂正される少数のエラーがあるときには、前述した基準レベルが緩められた第２のマージン読み出しを行う必要はない。
【０１０１】
任意選択で行われる付加的な読み出しは、（メモリアレイに設けられているならば）セルに記憶されている値が変化しているか否かを調べるためにセルを追跡するレベルのものである。メモリセルの追跡は、メモリセルを読み出すために使用される基準レベルを確立するためにしばしば含まれる。
【０１０２】
データが読み出され、読み出されたデータのエラー（あるならば）の数が分かったならば、次のステップ１０３は訂正処置が必要でありかつ望ましいかどうかを判定する。いくつかの考慮事項は、以下のとおりである。
１．１つのアプローチは、任意の数のビットエラーを有するデータを訂正し、従ってスクラブからメモリシステム性能に非常に顕著な影響を及ぼさせることである。
２．他の１つのアプローチは、データビットエラーの数が単位読み出しあたりにあるしきい値Ｎを超過しなければデータを訂正することを差し控え、従って性能に対するスクラブの影響を減少させることである。
３．ＥＣＣ同士の比較によって判定された、誤っているデータビットのパターンが、そのデータの訂正が望ましいかどうかを判定するためにも使用される。
４．最近に再書き込みされたデータ（鮮度が比較的に高い）は好ましくはスクラブされない。
一般に、誤っているデータを訂正するか否か決定するときには、スクラブ操作を完了することが性能に及ぼす効果と、現在および将来のデータ完全性に対するエラーの重大さとの釣り合いが保たれるのが好ましい。
【０１０３】
次のステップ１０５で、スクラブ訂正処置を実行するかあるいはそれを後のあるときまで延期するかが決定される。この決定を行う際の１つの考慮事項は、ステップ９５の場合と同じであり、すなわち、その時点でのメモリシステムの具体的な実時間動作ニーズを満たすための延期である。一般に、スクラブ操作を後に完了させれば、現在の時点でそれを行う場合よりもシステム性能に及ぶ影響が小さくなるのであれば、スクラブ操作の完了は好ましくは延期される。スクラブを実行するためにコントローラによる通常処理を中断させることは普通望ましくなく、特に、ＥＣＣにより訂正されるべきエラーの数が多かったり、データを統合する必要があったりするなどの理由からスクラブ操作に普通より長い時間がかかるときには、望ましくない。延期されるときには、スクラブ読み出しにより読み出されたデータと、それらのアドレスと、ＥＣＣ分析によって判定されたエラーと、前のステップで生じたスクラブ操作についての他のパラメータとが一時的に記憶される。これらのデータおよびパラメータは後に読み出されて、システム性能に対する影響がより少ないときにスクラブ操作が完了される。
【０１０４】
スクラブ操作が完了されるべきとき、次のステップ１０７でデータが訂正される。この場合、ＥＣＣの使用によりデータが訂正される。前述したステップ９９の一部として実行されないのであれば、使用されるＥＣＣにより訂正されるよりも多くの誤っているビットを通常の読み出しまたはスクラブ読み出しが生じさせるならば、データを回復するために１つ以上のマージン読み出し（この場合、基準レベルは、前の読み出しの間に使用されたのよりも広いプログラムされた分布を読み出すために緩められる）が必要とされるかもしれない。その後、ステップ１０９で、適切な訂正処置がとられる。これは、訂正されたデータを、それが読み出されたのと同じ位置に再書き込みすることを含む。これは、もちろん、データが再書き込みされるブロックを先に消去しておくことを必要とするが、各々の訂正済みデータセクタが１つのメモリセルブロックを満たす図２のメモリ構成においては実際的である。しかし、これを図５および６の大ブロックメモリ構成において実行することは、１つのブロックを満たすかあるいはほとんど満たすように論理的に連続するアドレスで再書き込みされる必要のある訂正済みデータセクタが充分になければ、効率的でない。
【０１０５】
あるいは、訂正済みデータは、以前にそれがスクラブ操作で読み出された位置とは異なる位置に再書き込みされる。メモリ構成が図５および６に示されているような大記憶ブロックを利用するときには、再書き込みされるべきデータが１つのブロックの容量より少なければ前述した消去プールまたは他の大ブロック管理手法が使用される。例えば、１６ページ、３２ページあるいはそれ以上を含む１つのブロックから僅か１ページまたは２ページの中のデータが訂正されることは稀なことではない。そのような場合、１つのブロックがアレイの１つ以上のプレーンにおいて１または数ページの訂正済みデータの一時的記憶のために専用される。再書き込みされるデータは、メモリの通常の動作中に他のファクタにより開始されるデータ統合（ガーベッジコレクション）の間のような、そうすることが好都合であるときに、元ブロックのページに格納されている訂正されていないデータと結合される。あるいは、そのような統合は、この専用されるブロックが満杯になったことにより開始されるか、あるいは専用ブロックにデータの問題のページが書き込まれてから所定量の時間が経過した後、あるいはシステム動作にとって都合のよい別の方法で、開始される。
【０１０６】
共通の指定された１つまたは複数の物理的ブロックを、他の多数のブロックのページからのスクラブ再書き込みデータを一時的に格納するために利用し、再書き込みされるページのデータをその元ブロックの他のページからのデータと後に統合するのが好都合かもしれない。例えば、ブロック１および２からのページのスクラブ再書き込みデータが一時的ブロック３に一時的に格納される。後に、ブロック１のスクラブ再書き込みデータはブロック３から消去済みブロック４にコピーされ、ブロック１の残りの変更されていないページも、物理的ブロック１にマッピングされたデータを統合するためにブロック３にコピーされる。同じことが他の消去済みブロック５において行われ、ここでブロック３に格納されたブロック２のスクラブ再書き込みデータとブロック２からの変更されていないデータページとが統合される。
【０１０７】
メタブロックを利用する図６のシステムでは、各々のプレーンに、そのプレーン内の他のブロックからの再書き込みされるデータを記憶するそのような専用されるブロックが１つあるか、あるいは任意のプレーン内の全ページからの訂正されるデータが書き込まれる専用ブロックがシステム全体の中に１つある。選択される特定の操作は、個々のブロック内のページの数と、メモリアレイ全体の中のページの数と、スクラブプロセスによってそのデータが訂正されるページの期待される数および頻度の予測とに依存する。自身をかく乱されやすいものとする構造および／または操作を有するメモリアレイは、そうでないものよりも多くの専用ブロックを必要とする。スクラブ読み出しがデータエラーのないことを明らかにしたけれども、シフトされた蓄積されている電荷レベルをその状態範囲の中央に戻すためにスクラブ操作が実行されるのであれば、明らかに訂正は不要なので、読み出されたデータは単に再書き込みされる。
【０１０８】
あるメモリシステムの使用方法は、かく乱を余り引き起こさない。そのとき、認識されるべきトリガーイベントがほとんどないので、スクラブプロセスは稀に実行されるだけである。さらに、スクラブされるデータがもと存在していた物理的ブロックに関わらず、割合に少量の再書き込みされるデータを一緒に１つ以上の専用の物理的ブロックに永久的に格納するのが実際的である。この場合、スクラブされるデータのページは、スクラブプロセスにおける１ステップとして他の論理的に連続するデータのページと物理的ブロックに再結合されない。訂正処置の他の１つの要素は、訂正されたデータを、それらが元書き込まれたのとは異なるローテーションで再書き込みすることである。例えば、４状態システムの４つのアナログ記憶状態範囲は、初めに００，０１，１０および１１をそれぞれ表すように指定され、再書き込み時には１１，１０，０１および００を表すように指定される。その変換は、オーバーヘッドデータの一部などとして維持されているその特定のローテーションについてのデータを用いて、データが読み出されるときにメモリコントローラによって行われる。データローテーションは、訂正されるデータと訂正を必要としなかったデータとの両方の再書き込みに有利に適用される。
【０１０９】
含まれる訂正処置の別の要素は、平均より遥かにひどくかく乱に影響されたヒストリを蓄積するメモリページまたはブロックをマップアウトすることである。これは、アレイの種々のページ、ブロック、プレーンおよび／または他の画定されている領域におけるデータエラーの数を監視することによって検出される。もちろん、ブロックが平均より多くまたは別様に使用されているなどの、かく乱されやすいという理由以外の理由からデータエラーを経験するページまたはブロックをマップアウトすることを防止するように注意するべきである。
【０１１０】
スクラブアルゴリズムは普通メモリコントローラによって制御されるけれども、その代わりとしてホストによって制御されてもよい。メモリコントローラによって制御されるときに、アルゴリズムは、メモリの動作中に通常コントローラＲＡＭ２５からマイクロプロセッサ２１（図１Ａ）により実行されるメモリシステムファームウェアにコード化される。
【０１１１】
利用される具体的なスクラブアルゴリズムは、メモリシステムの、特にメモリ装置１１および１３（図１Ａ）の、一定の特徴に依存する。特徴の例は、
（ａ）プログラミングのメモリ単位（普通は１ページ）に格納されているホストデータセクタの数と、
（ｂ）メモリセルの記憶状態の数と、各記憶状態のために指定されたしきい値範囲の広さと、
（ｃ）プログラミングの単位（普通は１ページ）がホストデータセクタを１つだけ含むのか、それとも複数含むのかと、
（ｄ）消去の単位（普通は１ブロック）の中のプログラミングの単位（普通は１ページ）の数と、
（ｅ）メモリセルの密度と、１単位内での操作が他の１つの単位においてデータかく乱を引き起こす程度および具体的な傾向と、である。
【０１１２】
スクラブの具体的な実施形態
スクラブアルゴリズムのより具体的な実施形態が図９のフローチャートに示されている。該して、前述されたものと同じ処理ステップが利用されるけれども実施例はもっと詳しく示されていて、４状態システムの例（各物理的電荷記憶ユニットに２ビットが記憶される）について図１０に関して記載されるマージンスクラブ読み出しを含んでいる。処理への２つの入口ポイント、すなわちスクラブトリガーイベントが検出されたときの１１５と、延期されたスクラブを実行するコマンドが受信されたときの１１７とが図９に示されている。
【０１１３】
ステップ１１５で、図８のステップ９１について前に論じられたように、スクラブトリガーイベントを目的としてメモリが監視される。同様に、ステップ１１９で、図８のステップ９３について記載されたのと同じく、スクラブについての候補メモリセル単位が決定される。その後、ステップ９５と同様に、図９のステップ１２１は、候補単位のうちのいずれかにおけるスクラブが、そのときに実行されなければならない他のシステム操作の故に延期されるべきであるか否かを判定する。延期されるべきであれば、１２３に示されているように、候補セル単位のアドレスおよび他の必要なデータが一時的に格納され、プロセスは、再開するべく、他のより優先順位の高いシステム操作の完了を待つ。あるいは、スクラブ操作の完了は、後の特別のコマンドがホストから受信されるか、あるいはプロセスにおいて後に延期されたときにそうであるように、ステップ１１７でメモリコントローラにより生成されるまで、延期される。延期されるスクラブについてのデータがステップ１２３で格納された後、特定の実行されているスクラブ操作は、ステップ１２４により判定されたようにスクラブされるべき単位が他になければ、終了させられる。スクラブされるべき単位が他にもあるならば、処理はステップ１１９に戻る。
【０１１４】
次のステップ１２５は、図８のステップ９７と同じ機能、すなわちスクラブされるべき候補メモリセル単位の選択を実行する。図９のその後のステップは、一度に選択された単位のうちの１つに対して実行される。次のステップ１２６は、読み出しブレークポイントレベルおよび他の読み出し条件を最初に通常の読み出しレベルにセットさせる。その後、ステップ１２７は、図８のステップ９９に対応して、メモリセル単位のうちの第１のものに対して、セットされた条件下でスクラブ読み出しを実行する。その後のステップはこの同じ１つの単位に対して実行され、ループ１２９は、選択された単位のうちの次の順番のもののために、それらが全てスクラブされるまで、ステップ１２７に戻る。もちろん、特定の操作でスクラブされるべく選択された単位が１つだけならば、ループバック１２９はない。
【０１１５】
ステップ１２６でセットされた読み出しマージンでのステップ１２７のスクラブ読み出しの後、ステップ１３１は、図８のステップ１０１と同様に、データエラーがあるか否かを判定する。エラーがあれば、次のステップ１３３は、それらのエラーが訂正可能であるか否かを判定する。データの完全性を確かめるためにＥＣＣが使用されるのであれば、このステップ１３３は、読み出されたデータの単位の中の間違っているビットの数が、使用されている特定のＥＣＣアルゴリズムの訂正能力の範囲内にあるか否かを判定する。それらのエラーが訂正されるならば、図８のステップ１０３に対応して、次のステップ１３５は訂正が必要でありかつ望ましいか否かを判定する。ステップ１３５は、間違っているけれども訂正できるビットの数が１つまたはほんの少数というしきい値より少ないか否かを判定するのと同じくらいに簡単であってよく、そうである場合には訂正処置をとらないと決定することができる。
【０１１６】
ステップ１３５の決定は、データとそのＥＣＣとがユーザデータであるのか、あるいはオーバーヘッドデータであるのかによっても影響される。図３に関して記載されたように、オーバーヘッドデータはそれ自身のＥＣＣを持つことができる。そうである場合には、ユーザデータおよびオーバーヘッドデータの完全性をステップ１３１および１３３で別々に検査することができると共に、ユーザデータとそのＥＣＣとを１つの単位と見なしかつオーバーヘッドデータとそのＥＣＣとを他の１つのデータ単位と見なすことによって、たとえそれらを同じページに格納できるとしても、復帰１２９を有する完全なループを通じて一度に１つずつ処理することさえできる。それぞれのオーバーヘッドデータＥＣＣおよびユーザデータＥＣＣの使用は普通同じであるけれども、プロセスはオーバーヘッドデータの完全性をよりしっかりと保つように動作することができる。これは、システム性能（過度のスクラブ操作は、これを劣化させる）を維持することと、記憶されているデータの完全性を長期にわたって維持すること（これを達成するためにスクラブは設計される）との釣り合いの例である。
【０１１７】
ステップ１３５での決定が、問題のデータ単位内の訂正可能なエラーの訂正を行うべきであるという判定であれば、次のステップ１３７は、データの訂正を延期するべきか否かをたずねる。例えば、読み出されたデータの中に間違っているビットが余りに多くあるので、それらを訂正するために、この段階で使用する時間より長い時間がかかるならば、スクラブは延期されるのが望ましい。延期されなければ、図８のステップ１０７と同様のステップ１３９でエラーは訂正される。次のステップ１４０は、その後、訂正処置を延期するべきか否かをたずねる。データの再書き込みが、使用可能な時間より長い時間のかかる所要の統合のために他のデータの移動をも必要とするならば、スクラブは一般的には延期される。延期がなければ、訂正されたデータは、ステップ１４１で、図８の一般的な実施形態が記載されたときに前に説明した再書き込みのオプションのうちの１つに従って、再書き込みされる。訂正されたデータ単位が首尾よく再書き込みされた後、ステップ１２５でスクラブされるべく選択されたメモリセル単位が他にもあるか否かがステップ１４３で判定される。そうであるならば、ステップ１４５は次の順の単位にインクリメントし、処理はその新しい単位のためにループ１２９を介してステップ１２７に戻る。
【０１１８】
これまで、図９のフローチャートの主要径路が記載された。しかし、道筋に沿って、質問のうちのあるものについての解答が前述したものと異なるときに入ることのできるブランチがいくつかある。記載されるべき第１のそのようなブランチは、余りに多くのビットエラーが問題の単位の中に存在するためにＥＣＣによってそれらを訂正できないときに、ステップ１３３からとられる。ステップ１５１により示されているように、読み出ししきい値レベルが、ステップ１２７でスクラブ読み出しのために使用されるレベルとは異なるようにセットされ、その後、ステップ１５３で、単位のデータがこれらの異なるしきい値レベルで再び読み出される。そのようなマージン読み出しが図１０に示されている。
【０１１９】
フラッシュメモリアレイにおける個々の記憶素子の４状態での操作の例が図１０において用いられている。４つのしきい値電圧レベル範囲の各々における、かく乱なしでの、メモリセルの１つの単位内での記憶素子の数の分布が示されている。その中のどのセルからのデータも存在しない状態で記憶状態しきい値レベル範囲の間にしきい値電圧ガードバンド１５５，１５６および１５７が保たれる。これは、セルの単位の状態をプログラムしベリファイした直後に存在する望ましいプログラムされた状態である。しかし、その後に他の単位がプログラムされ、読み出されかつ／または消去されるとき、このデータはかく乱される。かく乱は、一方または他方の側にシフトして隣のガードバンドに入り込んだしきい値レベルによって示される。かく乱の性質に依存して、各状態分布内のセルの小部分について発生するか、あるいは分布全体がシフトするかまたは隣のガードバンド内に延びるかする。
【０１２０】
通常の読み出しのために、それぞれのガードバンド１５５，１５６および１５７のほぼ中央のブレークポイントレベル１５９，１６０および１６１が用いられる。すなわち、読み出されるセルのしきい値レベルは、それらの記憶状態を判定するためにこれらのブレークポイントレベルと比較される。１つの状態の中のセルのしきい値レベルがガードバンドを通ってブレークポイントレベルを超えてシフトするとき、エラーが生じる。例えば、状態１のセルのしきい値レベルがブレークポイントレベル１５９より下がるまで下方にシフトすると、それらのセルは状態０にあるとして読み出される。同様に、状態１のセルのしきい値レベルがブレークポイントレベル１６０の上まで上方にシフトしたならば、通常の読み出しは、それらのセルが状態２にあると言える。そのような読み出しデータエラーは、その後、ＥＣＣプロセスによって特定される。しかし、そのようなエラーが、ＥＣＣで訂正するには多すぎるときには、状態間に異なるブレークポイントレベルを有する第２の読み出しがステップ１５１および１５３により行われる（図９）。ブレークポイントレベル１５９，１６０および１６１は、それぞれのガードバンドの中でかく乱からの記憶しきい値レベルの予期されるシフトの方向にシフトされるので、シフトされたレベルは、ガードバンドの、それらがかく乱される前にあったのと同じ側にある。
【０１２１】
そのようにデータを再読み出しした後、ステップ１６５でＥＣＣを用いることによって、データエラーが残っているか否かが判定される。残っていれば、処理は、データ訂正および再書き込みを延期するべきか否かを判定することを含む主要な処理径路のステップ１３５に進む。データエラーが存在することがステップ１６５により見出されたならば、次のステップ１６７は、それらがＥＣＣにより訂正可能であるか否かが判定される。訂正可能であれば、処理はまた主要な処理径路のステップ１３５にジャンプする。
【０１２２】
しかし、データエラーが訂正不能であることがステップ１６７により見出されたならば、さらに異なるブレークポイントレベルを有するさらなる読み出しが包含される。ステップ１６９で、まだ試みられていない緩められた読み出し条件が残っているか否かが判定される。残っていれば、ステップ１７０により再試行条件がインクリメントされ、処理は、そのような新しい条件でデータを読み出すべくステップ１５１および１５３に戻る。しかし、異なる読み出し条件が他に設けられていなければ、問題のアレイ単位内のデータは、その訂正不能のエラーを含んだ状態にとどまらなければならない。その単位に対するスクラブ操作は、失敗してしまったと判定される。そのことの１つの結果は、全ての有効なデータを新しいメモリシステムにコピーしてから現在のメモリを捨てることである。他の１つの結果は、この単位を、オーバーヘッドデータまたはその他に格納されるフラグによって、間違っていると単純に示し、その後にステップ１４３に進んで他のアレイ単位のスクラブを続けることである。その単位の中のデータは、その後、失われる。これらのデータは、当初のプログラミングの一部として初めはその正しいしきい値レベル範囲の中にあるとベリファイされていたので、時間の経過に伴うかく乱をする操作の累積がもたらす可能性のあるこの結果は、そのような不利な結果に対して充分に頻繁にスクラブを行うことが望ましいことを示す。
【０１２３】
ステップ１３５に戻って、そこでデータの訂正が必要でもなく望ましくもないと判定されたならば、処理はステップ１４３にジャンプして、特定された単位のうちの他のものに対してスクラブを続ける。また、ステップ１３７および１４０に戻ると、データの訂正または再書き込みが延期されるべきであると判定されたならば、読み出されたデータと、それらのアドレスと、誤っているビットのＥＣＣおよび識別子と、他の以前に決定されたデータとがステップ１７１で格納され、その後に処理はステップ１４３にジャンプする。その後、これらのデータは、以下で記述されるように、延期された処置に完了を目指して到達したときに、読み出される。
【０１２４】
ステップ１３１に戻って、データエラーがないと判定した後の次の処置は、現在の単位のデータに関してそれ以上は何もせずにステップ１４３にジャンプすることである。しかし、有効なデータさえ読み出されたセルの記憶レベルをさらに調べて調整することが望ましい可能性がある。これは、蓄積された電荷が種々の状態のために確定されたレベル同士の間のガードバンドの中に移動したセルを（図１０を参照）、たとえそれらのレベルがブレークポイントレベルを超えて通常の読み出しデータエラーを生じさせてはいないとしても、特定するために、初めの読み出しに用いられたものとは異なるブレークポイントレベルでデータを再読み出しすることを含む。ステップ１７２により、前に試みられていないそのような読み出し条件が存在するか否かが判定される。存在するならば、ステップ１７３は、新しいブレークポイントレベルおよび／または他のスクラブ読み出し条件を選択させる。その後、処理はステップ１２６に戻り、ここでそれらの読み出し条件がセットされ、データは次にステップ１２７においてそれらの条件で読み出される。この読み出し中に使われるブレークポイントレベルは、例えば、図１０のガードバンド１５５，１５６および１５７の端にシフトされる。ステップ１３１でＥＣＣの使用によってデータエラーが存在すると判定されたならば、データの誤っているビットは、電荷レベルがガードバンドの中にシフトしていることを示す。従って、これらのデータの訂正および再書き込みを、まずそのような処置が延期されるべきか否かを判定した後に、記憶されている電荷レベルがガードバンド外の、図１０の意図された状態分布の中へシフトされるように、行うことが望ましい。
【０１２５】
ステップ１３１において、より制限的なマージンで読み出されたデータにエラーがないと判定されたならば、データの現在の単位に対する処理は終了する。その後、ステップ１７２によって、データのこの単位に対してまだ試みられていない確定されたスクラブ読み出し条件が他にあるか否かが判定される。あるならば、データは一層きついブレークポイントレベルで再び読み出される。すなわち、それぞれのガードバンドに沿ってその行程の一部だけブレークポイントレベルがシフトされたステップ１７２で使用可能な代わりの読み出し条件の第１のセットでデータの２回目の読み出しを行うことができ、必要ならば電荷蓄積レベルのさらなる微調整のために、ガードバンドの端のほうへさらに動かされたステップ１７２により選択された代わりの読み出し条件の第２のセットのブレークポイントレベルで３回目を反復して行うことができる。実際的な数のそのような付加的なスクラブ読み出し条件を設定することができる。
【０１２６】
ステップ１３５に戻って、ここでは訂正なしであるレベルのデータエラーを受け入れると決定できるが、これは、今説明されたばかりのエラーを含まない記憶されているデータに対してステップ１７２および１７３のブランチにより行われる調整の正確さと矛盾することに留意されたい。従って、この処理ブランチが利用されるときに、ステップ１３５は誤っているデータを訂正なしで受け入れることをおそらく許さない。
【０１２７】
スクラブされるように現在特定されている全てのデータ単位が実際にスクラブされたとステップ１４３で判定された後、それらデータ単位のうちの、そのデータがかく乱されるという異常な傾向を示したものは、任意選択でシステムの外にマップアウトされてもよい。ステップ１８５は、システムから除去されるべきそのような物理的メモリ単位があるか否かを判定し、あるならば、それらはステップ１８７によりマップアウトされる。そのとき、スクラブ操作は完了する。
【０１２８】
しかし、データ訂正および／または再書き込みが延期されたならば、メモリシステムコントローラまたはホストシステムはそのことに留意させる。より順位の高い未解決のメモリ操作がない適切なときに、部分的にスクラブされた単位のスクラブ操作を、ステップ１１７から開始して、完了させることができる。ステップ１７１により１つの単位のために記憶されたデータ、ＥＣＣおよび他の情報がステップ１９１により読み出される。その単位からのデータが訂正されなければならないならば、ステップ１９３で実行される。ステップ１９５で、その正しいデータが再書き込みされる。完了されなければならない部分的に完了されているスクラブ操作が他になければ、ステップ１９７で判定され、そしてステップ１８５が実行されるかあるいは処理が終了する。完成されるべき単位が他にあるならば、ステップ１９９で処理が次の単位へインクリメントし、それらの単位からのデータに対してステップ１９１，１９３および１９５が反復される。
【０１２９】
延期されたスクラブのためにステップ１２３で候補メモリセル単位のアドレスが記憶される場合には、実行されるべきより優先順位の高い処置をコントローラが持っていないとき、処理は、一度に延期された単位のうちの１つのためにスクラブ操作を続けるべく自動的に復帰することができる。延期ステップ１２１は図９の処理の早い段階のものであるので、そのときに延期された単位への復帰は、ステップ１２５から始まって前述したようにその経路に沿って続く処理の再開という結果をもたらす。そのような単位の訂正および／または再書き込みがステップ１３７または１４０の一方で再び延期されるということがある。
【０１３０】
正規のスクラブ操作とは対照的に、ＥＣＣがホスト読み出しコマンドに応答した読み出し操作の間あるいは他のときに１つ以上のエラーを検出したとき、データがどのように処理されるかということに時間的制約が影響を及ぼす。正規のスクラブ操作は一般にリソースが使用可能であって時間が重要でないときに行われるが、ときには、時間がほとんどないときにデータが訂正されなければならない。例えば、ホスト読み出しコマンドに応答してデータがメモリから読み出されるとき、データは、ホストに送られる前に訂正されなければならないかもしれない。さらに、エラーが深刻であれば、データの訂正済みコピーがメモリアレイに格納される。
【０１３１】
一般に、エラーを含むデータは３つのタイプに分類される。第１のタイプのデータは、許容可能なレベルの訂正可能なエラーを有するので、直ぐに訂正および置換を行う必要はない。このデータは、ホストに送られる前に単に訂正されるが、不揮発性メモリにおいては訂正されないままである。第２のタイプのデータは、訂正することができるけれども、訂正済みデータを直ぐに格納することを必要とするレベルの訂正可能なエラーを有する。第３のタイプのデータは、訂正不能のエラーを含む。以下の例の主な対象は第２のタイプのデータ、すなわち、訂正はできるけれども、訂正済みデータのコピーを直ぐに記憶することを必要とするほど深刻なエラーを有するデータである。本願で論じられるエラーを検出して訂正する主な方法は、各セクタについて生成されてセクタと共に記憶されるＥＣＣを使用する。しかし、エラーを検出し訂正する代わりの方法も同様に使用可能であることが理解される。例えば、エラーの存在は、冗長符号、巡回冗長符号または１つ以上のパリティビットを用いて発見される。エラーの位置は、メモリアレイの部分の物理的試験により判定される。破損データを含む欠陥のあるセルの位置を示すために漏洩電流または類似の物理的特性が使用される。エラーの訂正は、いろいろな方法に従って実行される。これらの方法の多くは、破損しているデータの部分を再現するために重複データを使用する。ＥＣＣまたはＲＡＩＤ（独立ディスクの冗長アレイ）(Redundant Array of Independent Disk) タイプの冗長性を用いれば、エラーの正確な位置が分からなくてもデータの部分（セクタなど）を訂正することができる。冗長データのより少数のビットを使用できる他の方法は、エラーの位置が分かる場合に訂正を可能にする。例えば、パリティビットによってエラーが指摘され、そしてそのエラーの位置が（物理的試験または他の手段から）知られているならば、訂正済みデータを提供するためにそのビットは“フリップ”あるいは反転される。
【０１３２】
第１のタイプのデータは、通常の動作中にエラーを訂正することがリソースには値しないような低レベルでエラーを有する。エラーは、単に、データが読み出されるたびにＥＣＣを用いて訂正される。システムリソースが使用可能であるときに、データはスクラブ操作の一部として訂正される。第２のタイプのデータは第１のタイプのデータより高いレベルでエラーを有するので、誤っているデータは訂正済みデータと置換されなければならない。通常、この事態は、エラーの数が、ＥＣＣを用いて確実に訂正される限界に近いときに生じる。そのデータが置換されなければ、データが訂正不能になる危険がある。従って、データを失うのを避けるために、それを置換する方がよい。データがどのカテゴリーに属するかの判定は、所定のしきい値に基づくことができる。データがそのしきい値より低い数のエラーを有するならば、直ぐに置換を行う必要はない。データがしきい値より高い数のエラーを有するならば、直ぐに置換を行う必要がある。ＥＣＣがセクタあたりに６ビットの確実な訂正を可能にする場合、しきい値レベルは４ビットである。従って、１つのセクタに１個から４個の間違ったビットがあるならば、それは単にそのままにされて、読み出されるたびにＥＣＣを用いて訂正される。５個以上の間違ったビットがあるならば、訂正が可能であるときにデータはそのデータの訂正済みコピーに取って代わられる。エラーが多すぎて確実には訂正されないけれども適度に高い確率でなお訂正可能である場合にもデータはこのように訂正され置換される。訂正不能のデータは、それ以上破壊されないように、再配置される。さらなる破壊が生じた場合に訂正不能のデータを回復できるように、訂正不能のデータのために新しいＥＣＣデータを生成することができる。従って、ＥＣＣを用いて（あるいは他のどんなデータ訂正をメモリシステムにおいて用いても）データを訂正できなくてもデータは維持されてさらなるダメージは防止される。これは、ホストがそのような破損したデータにアクセスすることを可能にする。ある場合には、ホストは、そのような破損したデータを用いて元データを生成することのできる付加的なエラー訂正システムを持つことができる。例えば、ホスト上で動作するアーカイビングソフトウェアは、破損したデータを用いて元データを得るために使用される付加的な冗長データを記憶することができ、あるいはメモリシステムはＲＡＩＤタイプのアレイにおける１ユニットである。訂正不能のデータがさらに破壊されるとすれば、それが誤って訂正される危険があり、すなわち訂正操作が間違ったデータを報告する危険がある。従って、さらなる破損を防止することにより、そのような誤った訂正を回避することができる。
【０１３３】
一実施形態では、訂正および置換を必要とするデータは、ホスト読み出しコマンドに応答して通常の読み出し操作中に読み出される。しかし、データは、１ブロック全体をコピーするには時間が長くかかりすぎて読み出し操作のためのタイムリミットを越えるほどに大きなブロックに格納される。代わりに、ＥＣＣがブロック内のエラーを検出したときには少数のセクタのデータだけが置換され、他のセクタは、エラーを含んでいないかあるいは許容可能なレベルのエラーを含むので、訂正されないままである。訂正されたセクタは、複数のブロックからのデータの訂正されたセクタを記憶する専用ブロックに格納される。元ブロック内の訂正されていないセクタは、後に、連続的に記憶されたセクタを有する完全に有効なブロックを形成するために専用ブロックからのデータの訂正済みセクタと統合される。この手法は、訂正されたデータを迅速に格納することが望ましい他の状況においても使用される。
【０１３４】
大きなブロック、あるいはメタブロックを使用するメモリアーキテクチャの一例が、米国特許第６，７６３，４２４号（特許文献２３）に記載され、この特許は、その全体が本願明細書において参照により援用されている。メタブロックは、一般に、単一の単位として書き込まれ消去されるべく互いにリンクされた複数の消去ブロックから構成される。従って、メタブロックは、大きなブロックとして取り扱われ、この例の目的のために単一のブロックと見なされる。ある例では、読み出し操作は１００ミリ秒以内に完了されなければならないが、１メタブロック全体を書き込むには２００ミリ秒を要するかもしれない。メタブロックの他の例とその用途とが、“適応メタブロック(Adaptive Metablocks) ”という米国特許出願第１０／７４９，１８９号（特許文献２４）に記載され、この特許出願は、その全体が本願明細書において参照により援用されている。
【０１３５】
図１１は、ホスト読み出しコマンドに応答するデータのブロックの部分的置換についてのフローチャートを示す。特定の範囲の論理アドレスを有するデータを要求する読み出しコマンドがホストから受信される。このフローチャートは、訂正および置換ルーチンの、セクタごとの実行を示す。メモリコントローラは、ホストにより与えられた論理アドレスを有するセクタのメモリアレイにおける物理的位置を特定し、その位置に格納されているデータを読み出す（２０１）。そのセクタ内にエラーがあるか否かを判定するために、セクタがメモリアレイから読み出されるときにセクタに対してＥＣＣ分析が行われる（２０３）。エラーが存在するならば、それらは訂正され（２０５）、訂正済みデータがホストに送られる（２０７）。データのセクタが深刻なエラーレベル（すなわち、容認できるエラーレベルについての所定のしきい値より高い）を有するならば、訂正済みセクタのコピーが不揮発性メモリアレイ内の他の場所の専用ブロックに格納される（２１１）。そのセクタは通常の仕方で（ＥＣＣデータと、使用されるヘッダデータと共に）格納される。このルーチンは、ホスト読み出しコマンドにより特定された全てのセクタがホストに送られてしまうまで反復される（２１３）。代表的な例では、セクタの大半は、ゼロ個またはゼロではないがしきい値未満の、容認できるレベルのエラーを有する。少数のセクタだけが、訂正済みセクタを格納することを必要とするエラーレベルを有する。深刻なエラーを有するセクタだけが置換されるように、それらの訂正済みセクタだけが格納される。深刻なエラーを有するセクタと同じブロックの中の他のセクタは、それらがある場所に、置換されずに留まる。このようなセクタごとの置換は、深刻なエラーが発見されたときにブロック全体を置換しようと試みる代わりに少数のセクタ（あるいはたった１つのセクタだけ）が置換されて残りが置換されないということを意味する。これは迅速に行われるので、読み出し操作のためのタイムリミット以内にセクタが置換される。
【０１３６】
図１２は、セクタＸからＸ＋１１までが元ブロック２２１に格納されている例を示す。セクタＸからＸ＋１１までがホスト読み出しコマンドに応答して読み出し操作の一部として元ブロック２２１から読み出される。セクタＸからＸ＋１１までが読み出されるとき、それらはＥＣＣを用いて検査され、セクタＸ＋１，Ｘ＋２およびＸ＋９がエラーを有することが発見され、Ｘ＋２およびＸ＋９は両方とも深刻なエラーを有する。これら３つのセクタからＥＣＣを用いて訂正済みデータが作られる。セクタＸ＋１，Ｘ＋２およびＸ＋９の訂正済みバージョンはそれぞれ（Ｘ＋１）’，（Ｘ＋２）’および（Ｘ＋９）’として表されている。訂正済みバージョン（Ｘ＋１）’，（Ｘ＋２）’および（Ｘ＋９）’はセクタＸ，Ｘ＋３からＸ＋８まで、Ｘ＋１０およびＸ＋１１と共にホスト２２３に送られる。Ｘ＋１は深刻ではないエラーを有するので、訂正済みバージョン（Ｘ＋１）’は格納されなくてもよい。しかし、Ｘ＋２およびＸ＋９は両方とも深刻なエラーを含むので、訂正済みバージョン（Ｘ＋２）’および（Ｘ＋９）’のコピーが専用の訂正ブロック２２５に格納される。専用の訂正ブロック２２５は、不揮発性メモリアレイの他のブロックに格納されているセクタに対応する訂正済みデータのセクタも収容する。従って、この時点では、（Ｘ＋２）’および（Ｘ＋９）’はＸ＋２およびＸ＋９に取って代わっていると考えられる。
【０１３７】
セクタＸ＋２およびＸ＋９の論理アドレスを示す（Ｘ＋２）’および（Ｘ＋９）’の格納の後に行われる読み出し操作は、Ｘ＋２およびＸ＋９の代わりに（Ｘ＋２）’および（Ｘ＋９）’をホストに報告する。メモリコントローラは、これを任意の適切な仕方で実行することができる。例えば、メモリコントローラは、訂正ブロック２２５に格納されているセクタのインデックスを維持して、読み出しコマンドが受信されたときにリストを調べることができる。電力が失われてもリストが保存されるように、そのインデックスのコピーが訂正ブロック２２５自体において、あるいは不揮発性メモリの他の場所で、維持される。訂正済みバージョンだけを読み出すことは、読み出しコマンドが受信されたときに誤っているバージョンのＥＣＣ訂正を実行するより高速である。従って、その後の読み出しについては読み出し性能が改善される。さらに、この方法は、セクタ内のエラーが深刻になったときにエラーが訂正できないほど深刻になる前にセクタの訂正済みコピーが生成されるという利点を有する。ときには、エラーを生じさせるセクタが劣化し続けることがあり、それらを適時に訂正し置換することにより訂正不能のエラーの発生を回避することができる。
【０１３８】
図１３は、図１２の読み出しおよび部分的置換操作の後に実行される統合操作を示す。この統合操作では、訂正済みセクタ（Ｘ＋２）’および（Ｘ＋９）’が訂正ブロック２２５から統合済みブロック２２７にコピーされ、訂正されていないセクタＸ，Ｘ＋１，Ｘ＋３からＸ＋８まで、Ｘ＋１０およびＸ＋１１も統合済みブロック２２７にコピーされる。このように、統合済みブロック２２７は、元ブロックにおいて深刻なエラーを持っていたセクタの訂正済みバージョンと共に、元ブロック２２１内にあった全てのセクタを収容する。セクタＸ＋１は統合済みブロック２２７において訂正可能なエラーをなお有して示されているけれども、ある例では、セクタＸ＋１も、統合済みブロック２２７に格納される前に訂正される。統合は、一般に、リソースが使用可能であるときにバックグラウンド操作として実行される。統合済みブロック２２７が書き込まれたならば、元ブロック２２１は陳腐とマークされてよく、消去されてよい。訂正ブロック２２５内のセクタ（Ｘ＋２）’および（Ｘ＋９）’は、統合済みブロック２２７にコピーされてしまったので、最早不要である。それらは、この時点では陳腐と見なされる。訂正ブロックが有効なセクタを収容していなければ、その空間を解放するために訂正ブロックを消去することもできる。
【０１３９】
図１４は、訂正ブロック２２５が多数の陳腐なセクタを収容しているときに訂正ブロック２２５に対して実行される圧縮操作を示す。訂正ブロック２２５は、統合済みブロック２２７にコピーされたセクタ（Ｘ＋２）’および（Ｘ＋９）’を収容している。従って、訂正ブロック２２５内のセクタ（Ｘ＋２）’および（Ｘ＋９）’は陳腐であると考えられる。付加的な陳腐セクタは、他の統合済みブロックにコピーされた結果として陳腐である。圧縮操作は、陳腐なセクタをコピーすることなく訂正ブロック２２５内の有効な（陳腐でない）セクタを圧縮済み訂正ブロック２２９にコピーする。これはタイムリミット以内、この場合には読み出し操作についてのタイムリミット以内に行われる。
【０１４０】
圧縮は、訂正ブロックがいっぱいになってそれ以上のセクタを格納できなくなるのを防止するために行われる。通常、これは、訂正ブロック内のセクタの数をあるしきい値数と比較することによって判定される。このしきい値数に達したとき、圧縮操作が実行される。一般に、ブロックが満杯またはほぼ満杯になったとき、しきい値に達する。有効なセクタＡおよびＢが、陳腐なセクタ（Ｘ＋２）’および（Ｘ＋９）’を含む陳腐なセクタと共に訂正ブロック内にある。その後、セクタＹおよびＺが受け取られる。セクタＹおよびＺを格納したためにしきい値に到達するので、圧縮操作が必要とされる。訂正ブロック２２５からの有効なセクタＡ，Ｂ，ＹおよびＺは圧縮済み訂正ブロック２２９にコピーされ、陳腐なセクタはコピーされない。有効なセクタＡ，Ｂ，ＹおよびＺが圧縮済み訂正ブロック２２９にコピーされた後、訂正ブロック２２５は陳腐と見なされてよく、消去されてよい。圧縮操作は、追加のセクタを圧縮済み訂正ブロック２２９に格納するために空き空間２３１を利用できるようにする。有効なセクタだけがコピーされるので、コピーする動作のための時間はブロック全体をコピーするために必要な時間より短く、タイムリミット以内に実行される。
【０１４１】
訂正ブロック内の有効なセクタの数が大きくなるにつれて、訂正ブロックをコピーするために必要な時間が増大するので、あるポイントで、訂正ブロックをコピーするために必要な時間がタイムリミットを上回る。訂正ブロックの有効なセクタが常にタイムリミット以内にコピーされるように（例えば、圧縮操作中に）、訂正ブロック内の有効なセクタの数をこのレベルより低く保つことが望ましい。従って、有効なセクタの数がしきい値に達したならば、現在の訂正ブロック内になお空間があっても新しい訂正ブロックを開くことができる。しきい値は、タイムリミット以内にコピーできるセクタの数により決まる。一例では、しきい値は１ブロックの四分の一である（すなわち、ブロック内のセクタの２５％は有効である）。あるいは、有効なセクタを統合済みブロックにコピーするために統合操作を実行することができる。これは、訂正ブロック内のセクタを陳腐化し、コピーされるべき有効なセクタの数を減少させる。従って、訂正ブロックの全ての有効なセクタがタイムリミット以内にコピーされるように、有効なセクタの数をしきい値より低く保つことができる。このリミットは、通常、読み出し操作についてのタイムリミットである。他のタイムリミットもこの仕方で満たされる。
【０１４２】
メモリコントローラは、セクタの同時にメモリアレイ内に存在する複数の異なるバージョンを追跡し続け、どのバージョンが有効であるのかを任意のときに判定する。例えば、図１５は、１つのセクタの３つの異なるバージョンＸ＋２，（Ｘ＋２）’および（Ｘ＋２）’’を示し、その全てが同じ論理アドレスを有し、同時にメモリアレイの別々のブロックに格納されている。前述した例では、訂正ブロック２２５内のセクタは、元ブロック２２１内の対応するセクタに取って代わっていた。しかし、元ブロック２２１および訂正ブロック２２５に加えて、図１５はカオス更新ブロック２３３を示している。更新ブロック、特にカオス更新ブロックは、“ブロック管理システムを有する不揮発性メモリおよび方法(Non-volatile memory and method with block management system) ”という米国特許出願第１０／７５０，１５５号（特許文献２５）に記載され、この特許出願は、その全体が本願明細書において参照により援用されている。図１５は、セクタＸ＋２および（Ｘ＋２）’と同じ論理アドレスを有するセクタ（Ｘ＋２）’’を収容している。一般に、更新ブロック内のセクタは元ブロック内のセクタに取って代わる。図１５に示されている状態では、同じ論理アドレスを有する１つのセクタを各々収容している訂正ブロックおよび更新ブロックの両方があり、特別の問題が発生する。これらのバージョンのうちの１つだけが存在するのであれば、そのバージョンは元ブロック内のバージョンに取って代わる。しかし、２つのバージョンでは、そのどちらが使用されるべきかが決定されなければならない。例えば、（Ｘ＋２）’および（Ｘ＋２）’’に対応する論理アドレスを特定した読み出しリクエストをホストが送ったならば、これらの一方だけがホストに送られるべきである。ここで、その決定は、更新済みセクタ（Ｘ＋２）’’と訂正済みセクタ（Ｘ＋２）’とがいつ書き込まれたかに基づく。例えば、（Ｘ＋２）’’が書き込まれる前に訂正済みセクタ（Ｘ＋２）’が書き込まれたのであれば、セクタ（Ｘ＋２）’’は、ホストによるセクタ内のデータの更新を表すので、セクタ（Ｘ＋２）’に取って代わる。あるいは、更新済みセクタ（Ｘ＋２）’’の後で訂正済みセクタ（Ｘ＋２）’が書き込まれたのであれば、訂正済みセクタ（Ｘ＋２）’は更新済みセクタ（Ｘ＋２）’’に基づかなければならない。換言すれば、（Ｘ＋２）’は、（Ｘ＋２）’’が書き込まれた後に書き込まれたのであれば、Ｘ＋２からではなくて（Ｘ＋２）’’から得られたのである。その理由は、ＥＣＣ訂正が、読み出しコマンドが受け取られたときに利用可能なセクタの最新のコピーに適用されることにある。（Ｘ＋２）’および（Ｘ＋２）’’のどちらが先に書き込まれたのかを判定する必要があるので、メモリコントローラは書き込みの順序を記録する。メモリコントローラは、セクタが書き込まれるときにセクタにタイムスタンプすることができる（例えば、時間データをヘッダに挿入することにより）。その代わりに、メモリコントローラは、セクタの、それらのセクタがいつ書き込まれたかを示すインデックスを維持することができる。不揮発性メモリアレイ内のセクタが書き込まれた順序を追跡するために他の任意の方法が使用される。
【０１４３】
前述した例は訂正されるブロック内のデータの単位としてのセクタに言及しているが、他の単位も使用される。例えば、ページは、メモリアレイにおけるデータ書き込みの単位である。通常、１ページはデータの複数のセクタを収容し、１ブロックは複数のページを有する。ページは、いったん書き込まれると、一般に消去操作なしでは再書き込みされない。従って、単一のセクタがページに書き込まれると、そのページの残りの部分は使用不能である。ページは本発明のある例のための訂正の便利な単位であり、１つのセクタが深刻なエラーを有する場合、そのセクタは、深刻なエラーを持っていないかあるいはエラーを全く持っていないかもしれない他のセクタを含むページ書き込みの一部分として訂正ブロックに書き込まれる。図１６は、６ページ（ページ０〜５）を有する元ブロック２５１を示し、各ページが４セクタを有する。元ブロックのページ１内のセクタＳ２は深刻なエラーを有する。それがＥＣＣを用いることにより検出されたとき、セクタはＥＣＣを用いて訂正され、訂正済みバージョンＳ２’がホスト２３３に送られる。Ｓ２’のコピーが訂正ブロック２５３にも格納される。しかし、この例では、元ブロック２５１のページ１の他のセクタ（Ｓ１，Ｓ３およびＳ４）も、たとえこれらのセクタＳ１，Ｓ３およびＳ４が即時の訂正およびコピー動作を必要とする深刻なエラーを持っていなくても、訂正ブロック２５３に書き込まれる。従って、訂正ブロック２５３のページ３は、訂正されたデータと訂正されていないデータとの両方を含むデータで完全に占められる。元ブロック２５１のページ１内の全セクタはこの時点で陳腐であると見なされる。従って、本発明の種々の態様から利益を得るためには、訂正されて訂正ブロックに格納されるデータ部分が特定のサイズでなくてもよい。１ブロック全体より小さなデータ部分がこのようにコピーされるならば、時間が節約される。
【０１４４】
訂正済み置換セクタを専用訂正ブロックで維持する代わりに、そのようなセクタは、他の目的のために他のセクタを格納するためにも使用されるブロックに格納される。連続していない論理アドレスを有する雑多なセクタを１つのブロックに格納して、それに格納されているセクタを追跡し続けることの例が、“スクラッチパッドブロック(Scratch Pad Block) ”という米国特許出願第１１／０１６，２８５号（特許文献２６）に記載され、この特許出願は、その全体が本願明細書において参照により援用されている。スクラッチパッドブロック内のデータを管理するために使用される種々の方法は訂正ブロックのためにも使用される。
【０１４５】
提示されたある例は、読み出しコマンドの実行中のタイムリミットに言及しているが、データの迅速な訂正と訂正済みデータの格納を望ましくする他のタイムリミットが他のときに適用される。そのような場合、エラーを含まない他の部分を格納せずに、エラーを含むデータ部分を訂正して格納することができる。現実のタイムリミットが適用されない場合にも、一定のときに速度を向上させるためにそのような手法を使用することができる。
【０１４６】
結論
本発明の種々の態様をその代表的な実施形態に関して説明してきたが、本発明が添付の特許請求の範囲の全範囲内でその権利が保護されるべきであることが理解できよう。
【図面の簡単な説明】
【０１４７】
【図１Ａ】共働する不揮発性メモリのブロック図である。
【図１Ｂ】共働するホストシステムのブロック図である。
【図２】図１Ａのメモリアレイの第１の編成例を示す。
【図３】図１Ａのメモリアレイに格納されたオーバーヘッドデータを有するホストデータセクタの例を示す。
【図４】図１Ａのメモリアレイの第２の編成例を示す。
【図５】図１Ａのメモリアレイの第３の編成例を示す。
【図６】図１Ａのメモリアレイの第３の編成例の拡張を示す。
【図７】１つの特定の構成を有する図１Ａのアレイのメモリセルのグループの回路図である。
【図８】データスクラブ操作における主要なステップを示す流れ図である。
【図９Ａ】スクラブ操作のより具体的な例の流れ図である。
【図９Ｂ】スクラブ操作のより具体的な例の流れ図である。
【図１０】メモリセルのプログラムされたグループの電圧しきい値レベルの分布を示す。
【図１１】読み出し操作中の、深刻なエラーのあるセクタを含むデータのブロックの部分的置換についてのフローチャートを示す。
【図１２】読み出し操作を示し、その間に深刻なエラーのある２つのセクタが元ブロックにおいて発見されて訂正されかつ訂正ブロックにコピーされる。
【図１３】図１２の元ブロックと訂正ブロックとの統合を示す。
【図１４】空き空間を作る訂正ブロックの圧縮を示す。
【図１５】セクタの訂正および更新の結果としてメモリの別々のブロックに存するデータのセクタの複数のバージョンを示す。
【図１６】深刻なエラーを有するセクタの訂正と、そのセクタを含むページの訂正ブロック内のページへのコピーとを示す。
【図１Ａ】
2009512119.tif 000003
【図１Ｂ】
2009512119.tif 000004
【図２】
2009512119.tif 000005
【図３】
2009512119.tif 000006
【図４】
2009512119.tif 000007
【図５】
2009512119.tif 000008
【図６】
2009512119.tif 000009
【図７】
2009512119.tif 000010
【図８】
2009512119.tif 000011
【図９】
2009512119.tif 000012
【図９Ａ】
2009512119.tif 000013
【図９Ｂ】
2009512119.tif 000014
【図１０】
2009512119.tif 000015
【図１１】
2009512119.tif 000016
【図１２】
2009512119.tif 000017
【図１３】
2009512119.tif 000018
【図１４】
2009512119.tif 000019
【図１５】
2009512119.tif 000020
【図１６】
2009512119.tif 000021
【手続補正書】
【提出日】平成20年8月19日(2008.8.19)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
メタブロックに格納されているデータはしばしば更新され、更新の可能性は、メタブロックのデータ容量が増大するときに増大する。１つの論理メタブロックの更新されたセクタは普通、他の物理的メタブロックに書き込まれる。変更されていないセクタも、データを統合するために、同じプログラミング操作の一部として、元ブロックからその新しい物理的メタブロックにコピーされる。あるいは、変更されていないデータは、更新されたデータと後に単一のメタブロックに統合されるまで、元メタブロックにとどまることができる。
【国際調査報告】
2009512119.tif 000022
2009512119.tif 000023