(57)【要約】  ページ毎にプログラム可能なメモリであって、各ページが一度プログラム可能な複数のセクタを有する場合に、逐次書き込みが連続的においても、更新ブロックに記録されたデータは断片化されかつ非連続的であってもよい。更新データを更新ブロックに記録する代わりに、データは少なくとも２つのインターリーブするストリームに記録されている。データの完全ページが利用可能な場合には、更新ブロックに記録される。それ以外の場合には、データの完全ページが利用可能になって更新ブロックへ転送可能になるまで、スクラッチパッドブロックに一時的に記録される。好ましくは、パイプライン動作によって、完全ページが書き込み可能であるとホスト書き込みコマンドが示すとすぐに更新ブロックへの記録を設定することができる。実際の書き込みデータが割り込みによって不完全な場合には、当該設定は取り消されることになり、代わりに記録はスクラッチパッドブロックに対して行われる。
2008524711.tif 000002
【特許請求の範囲】
【請求項１】
ホストからのデータユニットを記録する方法において、
第１および第２の不揮発性記憶装置を提供するステップと、
書き込むべきデータユニットを示すホスト書き込みコマンドを受信するステップと、
書き込むべきデータユニットに基づいて所定の条件が満たされたかどうかにより、第１または第２の記憶装置のいずれかを記録用に設定するステップと、
データユニットがホストから受信されるにつれて、設定されている記憶装置へデータユニットを送出するステップと、
受信されたデータユニットに基づいて所定の条件が確認された場合に、設定された記憶装置にデータユニットを記録し、そうでない場合には、まだ設定されていないならば第２の記憶装置を設定して、受信されたデータユニットを第２の記憶装置に記録するステップと、
を含むホストからのデータユニットを記録する方法。
【請求項２】
請求項１記載のホストからのデータユニットを記録する方法において、
前記設定するステップは、選択された記憶装置をアドレス指定するステップを含む方法。
【請求項３】
請求項１記載のホストからのデータユニットを記録する方法において、
前記記憶装置へデータユニットを送出するステップは、選択された記憶装置をプログラムするためにデータラッチのセットへデータユニットを送出するステップを含む方法。
【請求項４】
請求項１記載のホストからのデータユニットを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第１および第２の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、を含み、
前記所定の条件は、データユニットのうちの１つがページエンドオフセットを有する場合であり、
前記データを第１の記憶装置に記録するステップは、第１の記憶装置のページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録するステップを含む方法。
【請求項５】
請求項４記載のホストからのデータユニットを記録する方法において、
第１および第２の記憶装置の各々は、共に消去可能なメモリユニットのブロックを記憶するためのものである方法。
【請求項６】
請求項４記載のホストからのデータユニットを記録する方法において、
ホストからの前記データは、データユニット群についての更新データであり、
前記第１の記憶装置は、前記更新データを記憶するためのものであり、
前記第２の記憶装置は、第１の記憶装置へ転送される前に前記更新データをバッファリングするためのものである方法。
【請求項７】
請求項４記載のホストからのデータユニットを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第１および第２の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、
をさらに含む方法。
【請求項８】
請求項７記載のホストからのデータユニットを記録する方法において、
各ページは、消去後に一度プログラム可能である方法。
【請求項９】
請求項７記載のホストからのデータユニットを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録するステップを含む方法。
【請求項１０】
請求項９記載のホストからのデータユニットを記録する方法において、
第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される方法。
【請求項１１】
請求項７記載のホストからのデータユニットを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第１および第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記憶するステップを含む方法。
【請求項１２】
請求項１１記載のホストからのデータユニットを記録する方法において、
第１および第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される方法。
【請求項１３】
請求項７記載のホストからのデータユニットを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第１の記憶装置の次の記録位置をポイントするポインタを記録するステップを含む方法。
【請求項１４】
請求項１３記載のホストからのデータユニットを記録する方法において、
前記ポインタは、前記ページエンドオフセットを有するページの位置に記録される方法。
【請求項１５】
請求項１〜１４にいずれか記載のホストからのデータユニットを記録する方法において、
第１および第２の不揮発性記憶装置は、１ビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項１６】
請求項１〜１４にいずれか記載のホストからのデータユニットを記録する方法において、
前記第１および第２の不揮発性記憶装置は、１つより多くのビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項１７】
不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
前記ブロックの動作を制御するためのコントローラと、
それぞれがホストからのデータを記録するための第１および第２のブロックと、
ホストからデータを受信するためのバッファと、を備え、
前記コントローラは、書き込むべきデータユニットに基づいて所定の条件が満たされたかどうかにより、第１または第２の記憶装置のいずれかを記録用に設定し、
データユニットがホストから受信されるにつれて、設定されている記憶装置へデータユニットを送出し、
受信されたデータユニットに基づいて所定の条件が確認された場合に、設定された記憶装置にデータユニットを記録し、そうでない場合には、まだ設定されていないならば第２の記憶装置を設定して、受信されたデータユニットを第２の記憶装置に記録する不揮発性メモリ。
【請求項１８】
請求項１７記載の不揮発性メモリにおいて、
前記不揮発性メモリは、着脱可能なメモリカードの形態を取る不揮発性メモリ。
【請求項１９】
請求項１７記載の不揮発性メモリにおいて、
ホストからの前記データは、データユニット群についての更新データであり、
前記第１のブロックは、前記更新データを記憶するためのものであり、
前記第２のブロックは、第１のブロックへ転送される前に前記更新データをバッファリングするためのものである不揮発性メモリ。
【請求項２０】
請求項１７記載の不揮発性メモリにおいて、
データは、所定の順序を有するデータユニットに編成され、
前記第１および第２のブロックは、ページに編成され、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである不揮発性メモリ。
【請求項２１】
請求項２０記載の不揮発性メモリにおいて、
各ページは、消去後に一度プログラム可能である不揮発性メモリ。
【請求項２２】
請求項１７記載の不揮発性メモリにおいて、
前記所定の条件は、受信されたデータユニットのうちの１つがページエンドオフセットを有する場合であり、
前記コントローラが前記第１のブロックへのデータの記録を制御することは、前記第１のブロックのページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録することを含む不揮発性メモリ。
【請求項２３】
請求項１７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録することを含む不揮発性メモリ。
【請求項２４】
請求項２３記載の不揮発性メモリにおいて、
第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される不揮発性メモリ。
【請求項２５】
請求項１７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第１および第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録することを含む不揮発性メモリ。
【請求項２６】
請求項２５記載の不揮発性メモリにおいて、
第１および第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される不揮発性メモリ。
【請求項２７】
請求項１７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第１の記憶装置の次の記録位置をポイントするポインタを記録することを含む不揮発性メモリ。
【請求項２８】
請求項２７記載の不揮発性メモリにおいて、
前記ポインタは、前記ページエンドオフセットを有するページの位置に記録される不揮発性メモリ。
【請求項２９】
不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
前記ブロックの動作を制御するためのコントローラと、
それぞれがホストからのデータを連続的に記録するための第１および第２のブロックと、
ホストからデータを受信するためのバッファと、
所定の条件が満たされる場合の前記第１のブロックへのデータの記録または所定の条件が満たされない場合の前記第２のブロックへのデータの記録のいずれかを制御するための手段と、
を備える不揮発性メモリ。
【請求項３０】
請求項１７〜２９のいずれか記載の不揮発性メモリにおいて、
第１および第２の不揮発性記憶装置は、１ビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項３１】
請求項１７〜２９のいずれか記載の不揮発性メモリにおいて、
第１および第２の不揮発性記憶装置は、１つより多くのビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項３２】
ホストからのデータを記録する方法において、
第１および第２の不揮発性記憶装置を提供するステップと、
ホストからデータを受信するステップと、
受信されたそのままのデータを、第１の記憶装置をプログラムするためのデータラッチのセットと、第２の記憶装置をプログラムするためのデータラッチのセットとにロードするステップと、
受信されたデータに基づいて所定の条件が満たされるかどうかにより、第１または第２の記憶装置のいずれかをアドレス指定するステップと、
データラッチのセットからアドレス指定された記憶装置へデータを記録するステップと、
を含むホストからのデータを記録する方法。
【請求項３３】
請求項３２記載のホストからのデータを記録する方法において、
第１の記憶装置をプログラムするためのデータラッチの前記セットは、第２の記憶装置をプログラムするためのものと同一である方法。
【請求項３４】
請求項３２記載のホストからのデータを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第１および第２の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、を含み、
前記所定の条件は、データユニットのうちの１つがページエンドオフセットを有する場合であり、
前記データを第１の記憶装置に記録するステップは、第１の記憶装置のページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録するステップを含む方法。
【請求項３５】
請求項３４記載のホストからのデータを記録する方法において、
第１および第２の記憶装置の各々は、共に消去可能なメモリユニットのブロックを記憶するためのものである方法。
【請求項３６】
請求項３４記載のホストからのデータを記録する方法において、
ホストからの前記データは、データユニット群についての更新データであり、
前記第１の記憶装置は、前記更新データを記憶するためのものであり、
前記第２の記憶装置は、第１の記憶装置へ転送される前に前記更新データをバッファリングするためのものである方法。
【請求項３７】
請求項３４記載のホストからのデータを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第１および第２の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、
をさらに含む方法。
【請求項３８】
請求項３７記載のホストからのデータを記録する方法において、
各ページは、消去後に一度プログラム可能である方法。
【請求項３９】
請求項３７記載のホストからのデータを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録するステップを含む方法。
【請求項４０】
請求項３９記載のホストからのデータを記録する方法において、
第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される方法。
【請求項４１】
請求項３７記載のホストからのデータを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第１および第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記憶するステップを含む方法。
【請求項４２】
請求項４１記載のホストからのデータを記録する方法において、
第１および第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される方法。
【請求項４３】
請求項３７記載のホストからのデータを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第１の記憶装置の次の記録位置をポイントするポインタを記録するステップを含む方法。
【請求項４４】
請求項４３記載のホストからのデータを記録する方法において、
前記ポインタは、前記ページエンドオフセットを有するページの位置に記録される方法。
【請求項４５】
請求項３２〜４４のいずれか記載のホストからのデータを記録する方法において、
第１および第２の不揮発性記憶装置は、１ビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項４６】
請求項３２〜４４のいずれか記載のホストからのデータを記録する方法において、
前記第１および第２の不揮発性記憶装置は、１つより多くのビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項４７】
不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
前記ブロックの動作を制御するためのコントローラと、
それぞれがホストからのデータを記録するための第１および第２のブロックと、
ホストからデータを受信するためのバッファと、を備え、
前記コントローラは、受信されたそのままのデータを、第１の記憶装置をプログラムするためのデータラッチのセットと、第２の記憶装置をプログラムするためのデータラッチのセットとにロードすることを制御し、
受信されたデータに基づいて所定の条件が満たされるかどうかにより、第１または第２の記憶装置のいずれかをアドレス指定し、
データラッチのセットからアドレス指定された記憶装置へデータをプログラムする不揮発性メモリ。
【請求項４８】
請求項４６記載の不揮発性メモリにおいて、
前記不揮発性メモリは、着脱可能なメモリカードの形態を取る不揮発性メモリ。
【請求項４９】
請求項４６記載の不揮発性メモリにおいて、
ホストからの前記データは、データユニット群についての更新データであり、
前記第１のブロックは、前記更新データを記憶するためのものであり、
前記第２のブロックは、第１のブロックへ転送される前に前記更新データをバッファリングするためのものである不揮発性メモリ。
【請求項５０】
請求項４６記載の不揮発性メモリにおいて、
データは、所定の順序を有するデータユニットに編成され、
前記第１および第２のブロックは、ページに編成され、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである不揮発性メモリ。
【請求項５１】
請求項４９記載の不揮発性メモリにおいて、
各ページは、消去後に一度プログラム可能である不揮発性メモリ。
【請求項５２】
請求項４６記載の不揮発性メモリにおいて、
前記所定の条件は、受信されたデータユニットのうちの１つがページエンドオフセットを有する場合であり、
前記コントローラが前記第１のブロックへのデータの記録を制御することは、前記第１のブロックのページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録することを含む不揮発性メモリ。
【請求項５３】
請求項４６記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録することを含む不揮発性メモリ。
【請求項５４】
請求項５２記載の不揮発性メモリにおいて、
第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される不揮発性メモリ。
【請求項５５】
請求項４６記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第１および第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録することを含む不揮発性メモリ。
【請求項５６】
請求項５４記載の不揮発性メモリにおいて、
第１および第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される不揮発性メモリ。
【請求項５７】
請求項４６記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第１の記憶装置の次の記録位置をポイントするポインタを記録するステップを含む不揮発性メモリ。
【請求項５８】
請求項５６記載の不揮発性メモリにおいて、
前記ポインタは、前記ページエンドオフセットを有するページの位置に記録される不揮発性メモリ。
【請求項５９】
不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
それぞれがホストからのデータを連続的に記録するための第１および第２のブロックと、
ホストからデータを受信するためのバッファと、
受信されたそのままのデータを、第１の記憶装置をプログラムするためのデータラッチのセットと、第２の記憶装置をプログラムするためのデータラッチのセットとにロードするための手段と、
受信されたデータに基づいて所定の条件が満たされるかどうかにより、第１または第２の記憶装置のいずれかをアドレス指定するための手段と、
データラッチのセットからアドレス指定された記憶装置へデータを記録するための手段と、
を備える不揮発性メモリ。
【請求項６０】
請求項４６〜５９のいずれか記載の不揮発性メモリにおいて、
第１および第２の不揮発性記憶装置は、１ビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項６１】
請求項４６〜５９のいずれか記載の不揮発性メモリにおいて、
前記第１および第２の不揮発性記憶装置は、１つより多くのビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、不揮発性フラッシュメモリシステムの動作に関し、より特定的には、不揮発性フラッシュメモリ内のデータをプログラムする、より効率的な方法に関する。
【背景技術】
【０００２】
現在使用されている商業的に成功した不揮発性メモリ製品が数多くあり、特に、小形形状のファクタカードの形式のものは、１つ以上の集積回路チップ上に形成されたフラッシュＥＥＰＲＯＭ（電気的に消去可能でプログラム可能な読み出し専用メモリ）セルのアレイを使用している。メモリコントローラは、必ずしも別個の集積回路チップ上にあるわけではないが通常は別個の集積回路チップ上にあって、カードが着脱可能に接続されかつカード内のメモリアレイの動作を制御するホストのインターフェイスとなる。そのようなコントローラは、典型的には、マイクロプロセッサと、何らかの不揮発性読み出し専用メモリ（ＲＯＭ）と、揮発性ランダムアクセスメモリ（ＲＡＭ）と、データのプログラミングおよび読み出し中にコントローラを通過する際のデータから誤り訂正符号（ＥＣＣ）を計算する回路などの１つ以上の特殊回路とを含む。市販のカードには、コンパクトフラッシュ（登録商標）（ＣＦ）カード、マルチメディアカード（ＭＭＣ）、セキュアデジタル（ＳＤ）カード、個人タグ（Ｐ−タグ）、およびメモリスティックカードがある。ホストには、パーソナルコンピュータ、ノートブックコンピュータ、個人用携帯情報端末（ＰＤＡ）、様々なデータ通信装置、デジタルカメラ、携帯電話、携帯オーディオプレーヤ、自動車サウンドシステム、および同様の種類の装置が含まれる。あるシステムにおいては、着脱可能なカードにはコントローラが含まれず、ホストがカード内のメモリアレイの動作を制御する。この形のメモリシステムの例には、スマートメディアカードおよびｘＤカードが含まれる。よって、メモリアレイの制御は、カード内のコントローラ上のソフトウェアか、またはホスト内の制御ソフトウェアによって達成されてもよい。メモリカードによる実施例のほか、この形のメモリは、代わりに、様々な形のホストシステムに埋め込むことができる。着脱可能な応用および埋め込みによる応用の両方において、ホストデータは、メモリ制御ソフトウェアによって実施される記憶手法に従って、メモリアレイ内に記憶されてもよい。
【０００３】
ＮＯＲおよびＮＡＮＤという、２つの一般的なメモリアレイ構造が、商用において見受けられる。典型的なＮＯＲアレイにおいて、メモリセルは、コントロールゲートがセルの行に沿って延びるワード線に接続されて、列方向に拡張する隣接するビット線のソースおよびドレイン拡散間に接続されている。メモリセルは、少なくともソースとドレインとの間のセルチャンネル領域の部分に渡って位置する１つの記憶素子を含む。よって、記憶素子に対する電荷のプログラムされたレベルによって、セルの動作特徴が制御され、当該動作特徴は、その後、アドレス指定されたメモリセルに対して適切な電圧を印加することによって読み出すことができる。そのようなセルの例、メモリシステム内でのその使用、およびその製造方法は、米国特許第５，０７０，０３２号（特許文献１）、第５，０９５，３４４号（特許文献２）、第５，３１３，４２１号（特許文献３）、第５，３１５，５４１号（特許文献４）、第５，３４３，０６３号（特許文献５）、第５，６６１，０５３号（特許文献６）、および第６，２２２，７６２号（特許文献７）に記載されている。これらの特許は、本願で参照されたすべての他の特許および特許出願と共に、その全体が本願明細書において参照により援用されている。
【０００４】
ＮＡＮＤアレイは、個々のビット線間の１つ以上の選択トランジスタに接続された１６個または３２個などという２個以上のメモリセルの連続列と、基準電位とを使用して、セルの列を形成する。ワード線は、これらの数多くの列内のセルに渡って広がっている。ある列内の個々のセルに対するプログラミング中の読み出しおよびベリファイは、列を流れる電流がアドレス指定されたセルに蓄積された電荷のレベルに依存するように、列内の残りのセルを確実にオンに転換することによって行われる。ＮＡＮＤ構造のアレイおよびそのメモリシステムの一部としての動作については、米国特許第５，５７０，３１５号（特許文献８）、第５，７７４，３９７号（特許文献９）、第６，０４６，９３５号（特許文献１０）、および第６，５２２，５８０号（特許文献１１）において見受けられる。
【０００５】
前に援用した特許で説明されているような現在のフラッシュＥＥＰＲＯＭアレイの電荷記憶素子は、最も一般的な導電性のフローティングゲートであり、典型的には、伝導性を有するようにドープされたポリシリコン材料からなる。フラッシュＥＥＰＲＯＭシステムにおいて有用なメモリセルの代替形は、伝導性のフローティングゲートの代わりに、非伝導性の絶縁材料を使用して、不揮発的に電荷を蓄積する。酸化シリコン、窒化シリコン、および酸化シリコン（ＯＮＯ）からなる３層絶縁体が、メモリセルチャンネル上部で、伝導性のコントロールゲートと半伝導性の基板との間に挟まれている。セルは、セルチャンネルからの電子を窒化物に注入することによってプログラムされ、電子は、限られた領域に閉じ込められて蓄積され、ホットホールを窒化物に注入することによって消去される。誘電体記憶素子を使用するいくつかの具体的なセル構造およびアレイについては、ハラリらの米国公開特許出願第２００３／０１０９０９３号（特許文献１２）に記載されている。
【０００６】
ほとんどすべての集積回路の応用例におけるように、何らかの集積回路機能を実施するのに必要なシリコン基板領域を縮小する必要性が、フラッシュＥＥＰＲＯＭメモリセルアレイにも存在する。所定のサイズのメモリカードおよび他の形のパッケージの記憶容量を増加するために、または容量の増加およびサイズの減少の両方を行うために、シリコン基板の所定の領域に記憶可能なデジタルデータの量を増加することは、絶えず要求されている。データの記憶密度を増加させる１つの方法は、メモリセル毎および／または記憶ユニットまたは素子毎に１ビット以上のデータを記憶するというものである。これは、記憶素子の電荷レベル電圧範囲のウィンドウを２つ以上の状態に分割することによって達成される。４つのそのような状態を使用すると、各セルは、２ビットのデータを記憶することができ、８つの状態では、記憶素子毎に３ビットのデータを記憶する、といった具合である。フローティングゲートを使用する複数の状態のフラッシュＥＥＰＲＯＭ構造およびその動作については、米国特許第５，０４３，９４０号（特許文献１３）および第５，１７２，３３８号（特許文献１４）に記載され、誘電体フローティングゲートを使用する構造については、米国公開特許出願第２００３／０１０９０９３号（特許文献１２）に記載されている。多状態メモリセルアレイの選択された部分は、様々な事情から２つの状態（バイナリ）で動作されてもよく、その手法は、米国特許第５，９３０，１６７号（特許文献１５）および第６，４５６，５２８号（特許文献１６）に記載されている。これらの特許は、本願において引用されたすべての他の特許および特許出願と共に、その全体が本願明細書において参照により援用されている。
【０００７】
典型的なフラッシュＥＥＰＲＯＭアレイのメモリセルは、共に消去されるセルの個別の(discrete)ブロック（消去ブロック）に分割される。すなわち、消去ブロックは、消去単位であって、同時に消去可能な最小数のセルである。各消去ブロックは、典型的には、データの１つ以上のページを記憶し、ページは、プログラミングおよび読み出しの最小単位であるが、１つ以上のページが、互いに異なるサブアレイまたはプレーンにおいて並列的にプログラムされるか、または読み出されもよい。各ページは、典型的には、データの１つ以上のセクタを記憶し、セクタのサイズは、ホストシステムによって規定される。あるセクタの例は、磁気ディスクドライブで確立された規格に従って５１２バイトのユーザデータを含み、ユーザデータおよび／またはそれらが記憶される消去ブロックについての何バイトかのオーバーヘッド情報をさらに含む。そのようなメモリは、典型的には、各消去ブロック内にある１６、３２、またはそれ以上のページで構成され、各ページは、１つまたはほんのいくつかのデータのホストセクタを記憶する。
【０００８】
メモリアレイにユーザデータをプログラムすることとユーザデータをそこから読み出す間の並列処理の度合いを高めるために、アレイは、典型的には、一般にプレーンと称されるサブアレイに分割され、プレーンは、自身のデータレジスタと、他の回路とを含み、いくつかまたはすべてのプレーンに対するデータのセクタのプログラミングまたは読み出しが同時に行われてもよいといった並列動作を可能にしている。単一の集積回路上のアレイは、プレーンに物理的に分割されてもよいし、または、各プレーンは、別個の１つまたはそれ以上の集積回路チップから形成されてもよい。そのようなメモリの実施例が、米国特許第５，７９８，９６８号（特許文献１７）および第５，８９０，１９２号（特許文献１８）に記載されている。
【０００９】
メモリをさらに効率的に管理するために、消去ブロックは、互いにリンク付けされて仮想ブロックまたはメタブロックを形成してもよい。すなわち、各メタブロックは、各プレーンからの１つの消去ブロックを含むように規定される。メタブロックの使用については、米国特許第６，７６３，４２４号（特許文献１９）に記載されている。メタブロックは、データをプログラムしかつ読み出すための宛先として、ホスト論理ブロックアドレスによって識別される。同様に、メタブロックのすべての消去ブロックは、共に消去される。メタブロックは、メタブロック内の各消去ブロックからの１つのページを含むメタページ単位でプログラムされてもよい。そのような大きなブロックおよび／またはメタブロックと共に動作されるメモリシステム内のコントローラは、ホストから受信された論理ブロックアドレス（ＬＢＡ）とメモリセルアレイ内の物理ブロック番号（ＰＢＮ）との間の変換を含む、数多くの機能を行う。消去ブロック内の各ページは、典型的には、ブロックアドレス内のオフセットによって識別される。アドレス変換は、論理ブロック番号（ＬＢＮ）と論理ページと間の中間用語 (intermediate terms) の使用を伴うことが多い。メタブロックを使用するメモリシステムにおいて、メタブロックは、メモリアレイの消去の有効最小単位であってもよい。よって、消去の最小単位（ブロック）は、メモリ構造により、消去ブロックであっても、メタブロックであってもよい。「ブロック」という用語は、メモリ構造により、消去ブロックまたはメタブロックのいずれを指してもよい。同様に、「ページ」という用語は、メモリシステムのプログラミングの最小単位を指してもよい。これは、メモリシステム構造により、単一の消去ブロック内のページであってもよいし、いくつかの消去ブロックに渡って広がるメタページであってもよい。
【００１０】
メタブロックに記憶されたデータは、更新されることが多く、更新の可能性は、メタブロックのデータ容量が多いほど高まる。あるメタブロックの更新されたセクタは、通常、他のメタブロックへ書き込まれる。変更されなかったセクタも、通常、同一のプログラミング動作の一部として、元のメタブロックから新しいメタブロックへコピーされて、データを統合する。代わりに、変更されなかったデータは、更新されたデータが単一のメタブロックに後に統合されるまで元のメタブロックに残っていてもよい。現在のデータを新しいブロックに統合して、古いデータのみを含むブロックを消去する動作は、一般的には「ガーベッジコレクション」動作と称される。
【００１１】
消去されたブロックのプール内に保持されたいくつかの余分なブロックと共に大きなブロックまたはメタブロックシステムを動作させることは一般的である。あるブロックの容量未満のデータの１つ以上のページが更新されようとする場合、典型的には、更新されたページをプールからの消去されたブロックへ書き込み、その後、元のブロックから変更されなかったページのデータをコピーして、プールブロックを消去する。この手法の変形例については、米国特許第６，７６３，４２４号（特許文献１９）に記載されている。時間が経つにつれて、ホストデータファイルが再書き込みされかつ更新される結果、数多くのブロックが、有効データを含む比較的少ない数のページと、もはや新しくないデータを含む残りのページとになりうる。アレイのデータ記憶容量を効率的に使用できるようにするために、有効データのうちの論理的に関連したデータページを複数のブロック内の断片からときどき収集して、より少ない数のブロックに統合する。この処理は、通常、「ガーベッジコレクション」と称される。
【００１２】
あるメモリシステムにおいて、物理メモリセルも２つ以上のゾーンにグループ化される。あるゾーンは、論理ブロックアドレスの特定の範囲がマッピングされる物理メモリまたはメモリシステムの任意の分割されたサブセットであってもよい。例えば、６４メガバイトのデータを記憶可能なメモリシステムは、ゾーン毎に１６メガバイトのデータを記憶する４つのゾーンに分割されてもよい。そして、論理ブロックアドレスの範囲も、４つの群に分割され、４つの各ゾーンの物理ブロックに１つの群が割り当てられる。典型的な実施例において、論理ブロックアドレスは、論理ブロックアドレスがマッピングされる単一の物理ゾーン外に各データが書き込まれることのないという制約を受ける。それぞれが自身のアドレス指定回路、プログラミング回路、および読み出し回路を有するプレーン（サブアレイ）に分割されたメモリセルアレイにおいて、各ゾーンは、好ましくは、複数のプレーンからのブロック、典型的には、各プレーンから同数のブロックを含む。ゾーンは、論理−物理変換のようなアドレス管理を簡素化するために主に使用されるので、変換テーブルはより小さくなり、これらのテーブルを保持するのに必要なＲＡＭメモリは少なくなり、メモリの現在アクティブな領域をアドレス指定するためのアクセス時間は速くなるが、その限定的な性質により、最適な消耗レベリングより少なくなってしまうことがある。
【００１３】
個々のフラッシュＥＥＰＲＯＭセルは、１以上のビットのデータを表す電荷記憶素子またはユニット内に、ある電荷量を記憶する。記憶素子の電荷レベルは、そのメモリセルのしきい値電圧（通常ＶT と称される）を制御し、これは、セルの記憶状態を読み出す基本として使用される。しきい値電圧ウィンドウは、通常、数多くの範囲に分割され、メモリセルの２つ以上の各記憶状態につき１つの範囲となる。これらの範囲は、各セルの記憶状態を判断することが可能な規格検知レベルを含むガードバンドによって分離される。これらの記憶レベルは、近傍または他の関連するメモリセル、ページ、またはブロックにおいて行われるプログラミング、読み出し、または消去動作を妨害する電荷の結果、どうしてもずれてしまう。したがって、典型的には、誤り訂正符号（ＥＣＣ）がコントローラによって計算されて、読み出し中にプログラムされかつ使用されているホストデータと共に記憶されて、データをベリファイして、必要があればあるレベルのデータで訂正を行う。また、電荷レベルのずれは、妨害動作が規定の範囲から完全にずれて間違ったデータが読み出されてしまう前に、状態範囲の中心に戻すことが可能なときもある。データリフレッシュまたはスクラブと称されるこの処理については、米国特許第５，５３２，９６２号（特許文献２０）および第５，９０９，４４９号（特許文献２１）に記載されている。
【００１４】
あるメモリアレイにおいて、ページは、データの複数のセクタを保持可能な消去ブロックの部分からなってもよい。ページが一旦書き込まれると、既に書き込まれているデータを破損させることなくさらなる書き込みが可能であってもよい。そのようなシステムを使用するメモリアレイについて、ページは、同一のワード線に接続されたメモリセルのセットによって規定されてもよい。そのようなメモリアレイは、ページのサイズよりも少ない量のデータが受信されるように、非効率的にプログラムされてもよい。例えば、データが一度に１セクタずつ受信される場合、１セクタだけがページに対してプログラムされてもよい。既にそこに保存されているデータセクタを破損するという危険を冒すことなく、追加のデータがページに対してプログラムされることはなくてもよい。ときには、一連の単一セクタがいくらかの遅延を伴って受信される場合がある。この場合に、各セクタは、メモリアレイの別々のページへ書き込まれる。よって、セクタは、メモリアレイ内のスペースをどのように使うかについて非効率的なやり方で記憶される。マルチレベル論理が使用される場合には、メモリセルは、近傍のセルの後のプログラミングの効果による影響を受けやすい。加えて、マルチレベルセルのプログラミングは、一般的には、データの第１のページでセル群をプログラムし、その後、データの第２のページでセルをプログラムすることによって行われる。データの第２のページのプログラミングは、場合によっては、データの第１のページを破損させることがある。よって、ページより少ない量のデータをメモリアレイが受信する場合に、マルチセクタページを有するメモリアレイ内にデータを記憶させるためのより効率的な方法の必要性がある。また、マルチレベルセル群をプログラムする場合に、後続のページのプログラミング中に第１のページのデータを破損させない手法の必要性がある。
【特許文献１】米国特許第５，０７０，０３２号
【特許文献２】米国特許第５，０９５，３４４号
【特許文献３】米国特許第５，３１３，４２１号
【特許文献４】米国特許第５，３１５，５４１号
【特許文献５】米国特許第５，３４３，０６３号
【特許文献６】米国特許第５，６６１，０５３号
【特許文献７】米国特許第６，２２２，７６２号
【特許文献８】米国特許第５，５７０，３１５号
【特許文献９】米国特許第５，７７４，３９７号
【特許文献１０】米国特許第６，０４６，９３５号
【特許文献１１】米国特許第６，５２２，５８０号
【特許文献１２】米国公開特許出願第２００３／０１０９０９３号
【特許文献１３】米国特許第５，０４３，９４０号
【特許文献１４】米国特許第５，１７２，３３８号
【特許文献１５】米国特許第５，９３０，１６７号
【特許文献１６】米国特許第６，４５６，５２８号
【特許文献１７】米国特許第５，７９８，９６８号
【特許文献１８】米国特許第５，８９０，１９２号
【特許文献１９】米国特許第６，７６３，４２４号
【特許文献２０】米国特許第５，５３２，９６２号
【特許文献２１】米国特許第５，９０９，４４９号
【特許文献２２】米国特許出願第１０／９１７，７２５号
【特許文献２３】米国公開特許出願第２００４／０１０９３５７号
【発明の開示】
【００１５】
消去単位としてのブロックを有するメモリアレイにおいて、１つ以上のブロックが、スクラッチパッドブロックとして指定されて、メモリシステムの性能を改善するために使用されてもよい。スクラッチパッドブロックは、低い並列度でデータがスクラッチパッドブロックへ書き込まれて、その後、高い並列度でメモリアレイ内の他の位置にコピーされるように、バッファとして動作してもよい。データは、より効率的に他の位置へ書き込まれるようになるまで、スクラッチパッドブロックに蓄積されてもよい。マルチセクタページを有するメモリにおいて、システムの最大並列度を使用して完全なページが書き込まれてもよくなるまでセクタが蓄積されてもよい。マルチレベルセルメモリにおいて、下位ページは、上位および下位ページが共に記憶されるように上位ページが利用可能になるまで、スクラッチパッドブロック内に記憶されてもよい。
【００１６】
特定のプログラミング動作の並列度は、共にプログラムされるデータのビット数に比例する。よって、大量のデータを共にプログラムすることは、高い並列度を有する書き込みとみなされ、少量のデータを共にプログラムすることは、低い並列度であるとみなされる。１つのページより少ない並列度を使用する場合には、メモリアレイ内のスペースが無駄になる場合があり、この無駄なスペースがあるということは、ガーベッジコレクションをより頻繁に行わなければならないことを意味し、それによって、メモリシステムの効率性に悪影響を与える。ときには、少量のデータをメモリシステムに記憶しなければならない。これら小さい書き込みをスクラッチパッドブロックという１つの位置に書き込んだ後に、それらを高い並列度で他の位置に書き込むことによって、メモリシステムの効率性が高くなることもある。
【００１７】
データの複数のセクタからなるページのプログラミングの最小単位を有するメモリシステムにおいて、１ページ未満の量で受信されるデータを記憶する方法が開示される。完全なページがフラッシュメモリアレイへ書き込まれるようになるまで、受信されたセクタを記憶するために、スクラッチパッドブロックとして指定されたブロックを使用する。第１のセクタは、スクラッチパッドブロックの第１のページに記憶される。その後に受信されたセクタは、スクラッチパッドブロックの追加のページに記憶されてもよい。個別に受信されたセクタまたはセクタ群は、受信された際に、スクラッチパッドブロックの新しいページに保存される。スクラッチパッドブロック内の他のページからの以前に記憶されたセクタは、新しいデータと共に、最新のページへコピーされてもよい。よって、データのセクタは、スクラッチパッドブロックのページ内の新しいデータの完全なページ未満がある限り、スクラッチパッドブロック内に蓄積される。セクタは、ブロックの最大有効並列度よりも低い並列度でスクラッチパッドブロックへ書き込まれる。セクタは更新されながら、スクラッチパッドブロックに記憶される。データの新しいセクタが受信されて、データの完全なページがプログラミングに利用可能になった場合には、新しいセクタおよびスクラッチパッドブロックに以前に記憶されたセクタは、メモリアレイの他のブロック内の同一のページに共にプログラムされてもよい。このページは、データで完全に埋まり、最大有効並列度で書き込まれる。その後、スクラッチパッドブロックに記憶されたデータは、古いもの (obsolete) であるとマーク付けされて、都合のよいときに消去されてもよい。よって、フラッシュメモリ内のスペースは、より効率的に使用され、ガーベッジコレクション動作の頻度は減少する。
【００１８】
マルチレベルセルを有するメモリにおいて、スクラッチパッドブロックは、アクティブブロックにも書き込まれるデータのページを記憶してもよい。記憶されたページは、データの他のページが受信されるまで、スクラッチパッドブロック内に保持されてもよく、これは、データの当該２つのページがアクティブブロック内のそれらの宛先へ共に書き込まれるようにするためである。これらのページは、高い並列度を使用して、上位ページおよび下位ページとして共に書き込まれてもよく、別個に書き込まれた場合よりもデータの破損の危険性が低い状態となる。電力の損失がある場合に下位ページ内のデータがスクラッチパッドブロックから回復されるようにするために、関連する上位ページのプログラミング中に、以前にプログラムされた下位ページのコピーを保持するために使用されてもよい。
【００１９】
スクラッチパッドブロックは、他の位置へ書き込まれるべきデータの一時記憶を許容してもよい。データは、あるブロックのデータのセクタの更新中にスクラッチパッドブロック内に記憶されてもよい。あるブロック内のあるページは、互いに異なるファイルからのデータのセクタを含む場合に、ページは、いずれかのブロックが更新されると更新される。従来の方法を使用して２つのファイルからの更新データを記憶するために、１つ以上のブロックが必要となる場合がある。なぜならば、マルチファイルページの２つのコピーが必要な場合があるからである。スクラッチパッドブロックを使用すれば、あるファイルからのページの一部を、（他のファイルからの）残りのページが利用可能になるまで記憶することができる。その後、完全な更新ページが、最大並列度を使用してその宛先にプログラムされる。
【００２０】
スクラッチパッドブロックは、関連性のないデータのセクタを含んでもよい。ホストデータセクタおよび制御データセクタの両方が、スクラッチパッドブロック内に記憶されてもよい。ホストデータセクタおよび制御データセクタの両方が、スクラッチパッドブロック内の同一のページ内に記憶されてもよい。２つの互いに異なるファイルからのセクタ、または同一のファイルの論理的にリモートな部分からのセクタが、スクラッチパッドブロックの同一のページに記憶されてもよい。これにより、データを受信しながら高速を維持するように、最大並列度でスクラッチパッドブロックのプログラミングが可能になってもよい。データを低速で受信する場合には、ページ内の追加のスペースは、制御データを含むセクタによって占有される。これにより、制御データ構造が低い頻度で更新されるようになってもよいことから、ガーベッジコレクションの頻度が減少する。
【００２１】
一般的に、スクラッチパッドブロックの同一のページ内に記憶されたセクタは、互いに異なるファイルに属する必要はない。独立したデータオブジェクトとして、例えば、同一ページの２つの論理セクタであればよいが、互いに異なる書き込みコマンドによって書き込まれる必要がある。
【００２２】
スクラッチパッドは、コントローラが容易に識別できるように、マーク付けセクタによって識別されてもよい。スクラッチパッドブロック内に記憶されたデータのインデックスが、これもまたスクラッチパッドブロック内に記憶されたインデックスセクタ内で維持されてもよい。新しいセクタがスクラッチパッドブロック内に記憶されるにつれて、古いインデックスセクタが新しいインデックスセクタに置き換わることによって、インデックスセクタが更新される。同様に、スクラッチパッドブロック内のセクタが他の位置にコピーされるにつれて、インデックスセクタは更新されて、スクラッチパッドブロック内のこれらのセクタが古いものであることを示してもよい。
【００２３】
スクラッチパッドおよび更新ブロックのための改良されたインデックス付け−スクラッチパッドブロックに保持されたＳＰＢＩ／ＣＢＩインデックス
本発明の他の態様によれば、更新ブロックに加えてスクラッチパッドブロックを使用する場合に、関連するスクラッチパッドブロックインデックス（「ＳＰＢＩ」）を使用して、スクラッチパッドブロックに記録された更新セクタを追跡する。これは、更新ブロックに記録された論理セクタを追跡するために使用されるインデックス（例えば、「ＣＢＩ」）に対する追加である。ユーザデータがスクラッチパッドブロックの部分ページに記憶される場合はいつでも、ページの少なくとも最終スロットが一杯ではないということになる。一実施形態において、スクラッチパッドブロック内の部分ページの最終スロットにＳＰＢＩを記憶することができる。好ましい一実施形態において、ＳＰＢＩおよびＣＢＩをＳＰＢＩ／ＣＢＩセクタ内にパッケージ化して、いずれにしても使用されないスクラッチパッドブロック内の部分ページの最終スロットに記憶することができる。新しい部分ページが書き込まれる度に、更新されたＳＰＢＩ／ＣＢＩセクタが終端スロットに書き込まれ、すべての過去のバージョンは古いものとなる。
【００２４】
同時に、インデックス付け手法は、スクラッチパッドブロック内の未使用の記憶装置を利用して、不揮発性メモリにインデックスを記憶する。
【００２５】
本発明のさらに他の態様によれば、メモリブロックに記憶されたデータは、データによって占有されていない部分ページの部分にインデックスを記憶する。よって、メモリユニットのページが共にプログラム可能でメモリページのブロックが共に消去可能であるようなメモリユニットに編成されたメモリにおいて、メモリユニットに記憶されたデータユニットが所定の順序に従ってページ内に配列される場合であって、特にページが各消去後に一度プログラム可能である場合に、部分的に一杯のページが存在することになる。そして、ブロックのインデックスは、更新データで埋められていない部分ページに記憶される。部分ページは、現在のブロックまたは他のブロック内にあってもよい。
【００２６】
マルチストリーム更新追跡−２つ以上のストリーム間の同期
本発明のさらに他の態様によれば、複数のメモリブロック上に存在するであろうデータの最新書き込みバージョンを識別できる同期情報と共に、更新データを不揮発性メモリに書き込むための方法を提供する。ホストからの更新データは、複数のストリームを介して複数のブロックに向けられていてもよい。同期情報の維持は、ストリームのうちの少なくとも１つの更新毎の時点でストリーム／ブロックがどのくらい一杯かについての情報を記憶することによって達成される。
【００２７】
好ましい一実施形態において、ブロック内の第１の空位置をポイントする書き込みポインタが、ブロックがどのくらい一杯かを示すことになる。例えば、２つのストリーム間において、書き込みポインタが第１のブロックに書き込まれるときに、第２のブロックに対する書き込みポインタの値は、第２のブロックがどのくらい一杯かを示す。さらに、書き込みポインタが第１のブロックに保存される位置も、その時点で第１のブロックがどのくらい一杯かを示す。
【００２８】
本発明は、メモリユニットの消去可能なブロックに編成される不揮発性メモリに対して特に適用可能であり、各メモリユニットは、データの論理ユニットを記録するためのものであり、各ブロックも、１つ以上のページに編成される。さらに、各ページは、複数の論理ユニットで消去後に一度プログラム可能であり、各論理ユニットは、所定のページオフセットを有して所定の順序となっている。この方法は、基本的には、論理ユニット群の更新データを記憶またはバッファリングするための２つのブロック（例えば、更新ブロックとスクラッチパッドブロック）を提供し、論理ユニットの最新の書き込みバージョンが第１または第２のブロックにあるかどうかを識別する助けとなるための同期情報を維持する。
【００２９】
好ましい一実施形態によれば、書き込みポインタという形態の同期情報は、スクラッチパッドブロックにバッファリングされている度に、ホストデータと共に保存される。書き込みポインタは、書き込みポインタがスクラッチパッドブロックに保存されているときに、更新ブロック内の次の書き込みのための位置のアドレスを与える、更新ブロック書き込みポインタである。特に、これは、ホストデータを記憶するためにいずれにしても使用されないスクラッチパッドブロックの部分に保存される。好ましくは、更新ブロック書き込みポインタは、スクラッチパッドブロックの部分ページに記憶されたインデックスＳＰＢＩ／ＣＢＩに含まれる。更新ブロック書き込みポインタにより、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができる。
【００３０】
本発明の他の実施形態によれば、同期情報は、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができるように維持される。これは、同期情報が更新ブロックのページに記憶されるときに、スクラッチパッドブロック内の次の書き込みについての位置のアドレスを与えるスクラッチパッド書き込みポインタを含むことによって達成される。
【００３１】
他の実施形態において、同期情報は、最新バージョンを正確に見つけることができるように、複数のストリームに対して書き込まれたデータセクタのタイムスタンプとして符号化することができる。
【００３２】
好ましい実施形態において、タイムスタンプ情報は、書き込まれているページ内のセクタのうちの少なくとも１つのオーバーヘッド部分に記憶される。
【００３３】
パイプライン化された動作を伴うマルチストリーム更新
本発明の他の態様によれば、不揮発性メモリを更新する方法は、更新データを記録するための第１のブロック（更新ブロック）と、更新ブロックに対する記録の前に更新ブロックのうちのいくつかを一時的に保存するための第２のブロック（スクラッチパッドブロック）とを使用することを含む。不揮発性メモリは、メモリユニットの消去可能なブロックに編成され、各メモリユニットは、データの論理ユニットを記憶するためのものであり、また、各ブロックは、１つ以上のページに編成され、各ページは、明確なページオフセットを有する複数の論理ユニットを記憶でき、消去後に共に一度プログラム可能である。この方法は、ホストから論理ユニットを受信することと、所定の条件が満たされる場合に受信された論理ユニットがページエンドオフセットを有するように、ページ毎に受信された論理ユニットを整列させることと、受信された論理ユニットと任意の先行する論理ユニットとを適切なページ整列で更新ブロック内のページに記憶することと、そうでなければ、スクラッチパッドブロック内の部分ページに残りの受信された論理ユニットを一時的に記憶することとをさらに含む。スクラッチパッドブロック内の論理ユニットは、所定の条件を満たす場合には、最終的には更新ブロックへ転送される。
【００３４】
好ましい一実施形態において、更新データは、ページ毎に受信および解析されて、第１のブロック（例えば、更新ブロック）へ転送される。受信されたデータの残りの部分ページは、第２のブロック（例えば、スクラッチパッドブロック）へ転送されて、データの完全ページが第１のブロックへ記録するのに利用可能になるまで、そこにとどまることになる。受信されたデータが第２のブロックへ転送されると、記録されたページが受信データで部分的に一杯になるだけであっても、ページ毎に記録される。部分ページ内の通常使用されない予備のスペースを使用して、第２および第１のブロック内のデータを探し当てるためのインデックスを記憶してもよい。
【００３５】
他の好ましい実施形態によれば、予測パイプライン化された動作が実施される。この動作においては、更新ブロックを記録するための所定の条件を確認するまで待機するのではなく、書き込まれることになっているデータユニットによって所定の条件が満たされる可能性があることをホスト書き込みコマンドが示すとすぐに、更新ブロックが書き込まれるように設定される。このように、当該設定は、ホストからデータユニットが来るのを待つ間にジャンプスタートが可能である。最終的に受信された実際のデータユニットが所定の条件を本当に満たしたときに、設定を待つ必要なく、ただちに更新ブロック内のページのプログラミングが生じることができ、これにより、書き込み性能が向上する。ホスト書き込みが中断されて受信された実際のデータユニットがもはや所定の条件を満たさない場合には、更新ブロックへの記録のための設定は廃棄され、代わりに、データユニットは、スクラッチパッドブロックに記録されることになる。
【００３６】
他の好ましい実施形態において、データが受信されるにつれて、第１または第２の記憶装置のいずれに受信されたデータを記録するかが最初は不明な場合には、受信されたデータを第１および第２の記憶装置の両方のプログラミング回路のデータラッチにロードする。このように、データは第１または第２の記憶装置のいずれかをプログラムするためにいつでもただちに利用可能となる。特別な場合には、第１および第２の記憶装置は、データラッチの同一のセットを共有する。例えば、第１および第２の記憶装置が同一のメモリプレーン内にある場合、これらは、センス増幅器およびデータラッチの同一のセットを伴うプログラミング回路の同一のセットを使用できる。この場合、第１または第２の記憶装置のいずれかがプログラムされるべきかに関わらず、デフォルトのデータラッチのセットにデータがロードされることになる。
【００３７】
本発明のさらなる特徴および利点は、添付の図面と共に解釈されるべきであるその好ましい実施形態の以下の説明から理解されるであろう。
【発明を実施するための最良の形態】
【００３８】
メモリ構造およびその動作
まず図１Ａを参照すると、フラッシュメモリは、メモリセルアレイと、コントローラとを含む。図に示されている例において、２つの集積回路装置（チップ）１１および１３は、メモリセルのアレイ１５と、様々な論理回路１７とを含む。論理回路１７は、データ、コマンド、および状態回路を通じて別個のチップ上のコントローラ１９のインターフェイスとなり、また、アドレス指定、データ転送、検知、および他のサポートをアレイ１３に対して提供する。提供された記憶容量によっては、１から多までの数多くのメモリアレイチップを形成可能である。代わりに、コントローラと、アレイ全体の一部とを単一の集積回路チップ上に結合することができるが、これは、現在、経済的な代案であるとはいえない。
【００３９】
典型的なコントローラ１９は、マイクロプロセッサ２１と、主にファームウェアとを記憶するための読み出し専用メモリ（ＲＯＭ）２３と、主にメモリチップ１１および１３へ書き込まれまたはそこから読み出されたユーザデータの一時記憶のためのバッファメモリ（ＲＡＭ）２５とを含む。回路２７は、（複数の）メモリアレイチップのインターフェイスとなり、回路２９は、接続３１を通じてホストのインターフェイスとなる。この例において、データの完全性は、コードの計算専用の回路３３でＥＣＣを計算することによって判断される。ユーザデータが記憶のためにホストからフラッシュメモリアレイへ転送されるにつれて、回路は当該データからＥＣＣを計算し、コードはメモリに記憶される。ユーザデータがメモリから後で読み出される場合には、ユーザデータは、再び回路３３を通じて渡され、この回路３３は、同一のアルゴリズムによってＥＣＣを計算して、当該コードを、計算されてデータと共に記憶されたコードと比較する。これらが同等であれば、データの完全性が確認される。これらが異なっていれば、使用される具体的なＥＣＣアルゴリズムによっては、アルゴリズムによってサポートされた数までのエラーのビットを識別および訂正できる。
【００４０】
図１Ａのメモリの接続３１は、ホストシステムの接続３１’に接続し、その例を図１Ｂに示す。ホストと図１Ａのメモリとの間のデータ転送は、インターフェイス回路３５を通じて行われる。また、典型的なホストは、マイクロプロセッサ３７と、ファームウェアコードを記憶するためのＲＯＭ３９と、ＲＡＭ４１とを含む。他の回路およびサブシステム４３は、特定のホストシステムによっては、大容量磁気データ記憶ディスクドライブ、キーボードのためのインターフェイス回路、モニタなどを含むことが多い。そのようなホストの例には、デスクトップコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、パームトップコンピュータ、個人用携帯情報端末（ＰＤＡ）、ＭＰ３および他のオーディオプレーヤ、デジタルカメラ、ビデオカメラ、電子ゲーム機、無線および有線電話通信装置、留守番録音装置、音声レコーダ、ネットワークルータなどが含まれる。
【００４１】
図１Ａのメモリは、コントローラとすべてのそのメモリアレイ回路装置とを図１Ｂのホストに着脱可能に接続可能な形態で含む小さな密閉カードとして実装されてもよい。すなわち、接続３１と３１’とを接続することにより、カードを接続解除して他のホストに移動させるか、または他のカードをホストへ接続することによって当該カードを置き換えることができる。代わりに、メモリアレイ装置は、コントローラと接続３１とを含むカードに電気機械的に接続可能な別個のカードに密閉されていてもよい。さらなる代案として、図１Ａのメモリは、図１Ｂのホストに埋め込まれていてもよく、接続３１および３１’は常時行われている。この場合、メモリは、通常、他の構成要素と共にホストの筐体内に収容されている。
【００４２】
図２は、メモリアレイの一部分を示し、メモリセルが、消去ブロックにグループ化され、各消去ブロック内のセルは、単一の消去動作の一部として共に通常同時に消去可能である。消去ブロックは、この形のメモリ内の最小消去単位である。
【００４３】
図２のそれぞれのメモリセル消去ブロックのサイズは様々でありうるが、ある市販の形態のものは、それぞれの消去ブロック内のデータの単一のセクタを含む。そのようなデータセクタの内容を図３に示す。ユーザデータ５１は、典型的には５１２バイトである。ユーザデータ５１に加えて、ユーザデータから計算されたＥＣＣ５３、セクタデータおよび／または内部にセクタがプログラムされた消去ブロックに関連するパラメータ５５、パラメータ５５から計算されたＥＣＣ５７、および含まれうる任意の他のオーバーヘッドデータがある。
【００４４】
また、１つ以上のフラグがステータスまたは状態を示すパラメータ５５に含まれてもよい。また、消去ブロックをプログラミングおよび／または消去するために使用される電圧レベルの表示をパラメータ５５内に記憶することもでき、これらの電圧は、消去ブロックによって経験された周期の数および他の要因が変化するに従って更新される。パラメータ５５の他の例には、消去ブロック内の任意の不良セルの表示、この物理消去ブロックにマッピングされた消去ブロックの論理アドレス、および一次消去ブロックが不良である場合の任意の代替の消去ブロックのアドレスが含まれる。任意のメモリシステムにおいて使用されるパラメータ５５の特定の組み合わせは、設計に従って様々となり得る。また、オーバーヘッドデータのいくつかまたはすべてを、ユーザデータを含むかまたはオーバーヘッドデータが関連する消去ブロック内ではなく、そのような機能専用の消去ブロック内に記憶することもできる。
【００４５】
図２の単一のデータセクタ消去ブロックと異なるのは、図４のマルチセクタ消去ブロックである。消去ブロック５９も、消去の最小単位であり、４つのページ０〜３を含み、それぞれがプログラミングの最小単位である。データの１つ以上のホストセクタが、通常、セクタのデータから計算されたＥＣＣを少なくとも含むオーバーヘッドデータと共に各ページ内に記憶され、また図３のデータセクタの形式であってもよい。
【００４６】
ブロック全体のデータの再書き込みは、通常、新しいデータを消去ブロックプールのブロック内にプログラムして、その後、元のブロックが消去されて消去プールに配置されることを伴う。ブロックのすべてのページより少ないデータが更新される場合には、更新データは、典型的には、消去済みブロックプールからのブロックのページに記憶され、残りの変更されなかったページ内のデータは、元のブロックから新しいブロックへコピーされる。その後、元のブロックは消去される。この大規模なブロック管理手法の変形例には、元のブロックからのデータを動かすことも消去することもせずに、他のブロックのページ内に更新されたデータを書き込むことが含まれる。この結果、複数のページが同一の論理アドレスを有することになる。データの直近のページは、セクタまたはページオーバーヘッドデータ内のフィールドとして記録されたプログラミング時間などの何らかの都合のよい手法によって識別される。
【００４７】
さらなるマルチセクタブロック配列を図５に示す。ここで、総メモリセルアレイは、物理的に２つ以上のプレーンに分割され、４つのプレーン０〜３が図に示されている。各プレーンは、他のプレーンからほとんど独立して動作できるように、自身のデータレジスタ、センス増幅器、アドレス指定デコーダなどを有するメモリセルのサブアレイである。すべてのプレーンは、単一の集積回路装置上または複数の装置上に設けられてもよく、一例では、１つ以上の別個の集積回路装置から各プレーンが形成される。図５のシステムの例における各ブロックは、１６個のページＰ０〜Ｐ１５を含み、各ページは、１、２、またはそれ以上のホストデータセクタおよび何らかのオーバーヘッドデータの容量を有する。
【００４８】
さらに他のメモリセル配列を図６に示す。各プレーンは、セルの数多くの消去ブロックを含む。動作の並列度を高めるために、互いに異なるプレーン内の消去ブロックを論理的にリンクさせて、メタブロックを形成する。そのようなあるメタブロックを、プレーン０の消去ブロック３と、プレーン１の消去ブロック１と、プレーン２の消去ブロック１と、プレーン３の消去ブロック２とから形成されるものとして、図６に示す。各メタブロックは、論理的にアドレス指定可能であり、メモリコントローラは、個々のメタブロックを形成する消去ブロックを割り当てて常時監視する。ホストシステムは、好ましくは、個々のメタブロックの容量に等しいデータ単位でメモリシステムのインターフェイスとなる。図６のそのような論理データブロック６１は、例えば、メタブロックを構成するブロックの物理ブロック番号（ＰＢＮ）にコントローラによってマッピングされた論理ブロックアドレス（ＬＢＡ）によって識別される。メタブロックのすべての消去ブロックは共に消去され、各消去ブロックからのページは、好ましくは同時にプログラムされかつ読み出される。メタブロックは、このように消去ブロックがリンクされたシステム内の消去単位とみなされてもよい。メタブロック構造を有するあるメモリアレイにおいて、ページは、メタブロックの他のページと並列にプログラムされるだけであってもよい。これらのメモリアレイにおいて、メタページは、メタブロックの各プレーンからのページからなるメタブロックのプログラミングの最小単位である。
【００４９】
図２〜図６に関して前述したメモリを実施するために使用されてもよいような、数多くの互いに異なるメモリアレイ構造、構成、および特定のセル構成がある。ＮＡＮＤ形のメモリアレイの消去ブロックの１つを図７に示す。直列接続されたメモリセルの数多くの縦向きの列が、電圧ＶSSの共通源６５とビット線ＢＬ０〜ＢＬＮのうちの１つとの間に接続され、さらには、ビット線は、アドレスでコーダ、ドライバ、読み出しセンス増幅器などを含む回路６７に接続されている。具体的には、そのようなある列は、列の向かい合わせの端部にある選択トランジスタ７７と７９との間に直列接続された電荷蓄積トランジスタ７０，７１，…７２，および７４を含む。この例において、各列は１６個の記憶トランジスタを含むが、他の個数も可能である。ワード線ＷＬ０〜ＷＬ１５が、各列の１つの記憶トランジスタに渡って伸び、ワード線のアドレスデコーダと電圧源ドライバとを含む回路８１に接続されている。線８３および８４上の電圧は、電圧源６５および／またはビット線ＢＬ０〜ＢＬＮのいずれかに対する、消去ブロック内のすべての列の、選択レジスタを通じた接続を合わせて制御する。データおよびアドレスは、メモリコントローラから生じる。
【００５０】
消去ブロックの電荷蓄積トランジスタ（メモリセル）の各行は、共にプログラムされかつ読み出されるページを形成してもよい。適切な電圧がそのようなページのワード線（ＷＬ）に印加されて、そのデータをプログラムしまたは読み出す一方で、残りのワード線に印加される電圧が、各蓄積トランジスタを導電状態にするために選択される。蓄積トランジスタの１つの行（ページ）をプログラムしまたは読み出す過程において、選択されていない行上の以前に記憶された電荷レベルが、すべての列に渡って印加された電圧とそのワード線に印加された電圧とによって乱される。これにより、特定の行のセルのプログラミングが当該行内の他のセルがプログラムされた後に妨げられる場合がある。多状態フラッシュメモリは、特に外乱の影響を受ける。論理状態の数が多くなる結果、個々の状態についてのしきい値電圧の範囲が狭くなり、これにより電荷レベルの小さな変化が、論理状態の変化を生じさせる場合がある。データ記憶密度がセル内の数の増えた論理状態を使用して増加されると、外乱に対する感度が増す。よって、行内のセルにデータをプログラムすることは、当該行内の他のセルがプログラムされた後では、当該プログラムされたセル内のデータを破損せずにはできない場合がある。よって、隣接するセルの後続のプログラミングからの外乱によってページサイズが規定されてもよい。ある行内のセルが同一の行内の他のセルのプログラミング後にプログラムできないような場合には、当該行によってプログラミングの最小単位が規定される。よって、セルの行は、データの１つのページを含んでもよい。そのようなメモリアレイにおいて、ある行のセル群をプログラムする場合に、当該行内のいくつかのセルがデータを含まない場合であっても、当該行はプログラムされたものとみなされる。後でメモリアレイ内にプログラムすることができない空のセルを有することは効率的でない。
【００５１】
プログラムされたページ内の空のセルは、一度にメモリシステムによって受信される少数のセクタから生じてもよい。例えば、単一のセクタは、ホストによってメモリシステムに送られてもよい。セクタは、フラッシュメモリアレイのページ内に記憶される。セクタは、当該ページに対する後続の書き込みを阻止する。これは、ページが複数のセクタを保持するメモリシステムにおいて、効率的でない場合がある。例えば、ページがデータの４つのセクタを含む場合に、単一のセクタがページへ書き込まれる場合には、データの３つのセクタを保持可能なメモリアレイの部分が空のままになっている。ページサイズが大きくなるにつれて、そのような部分的に一杯なページからの無駄なスペースが増加する。メタページは、数多くのセクタを含んでもよいので、メタブロックを使用するメモリアレイにおいて、特に非効率な記憶となる場合がある。同様の問題は、２つ以上のセクタが受信されるが受信セクタの数がページ内のセクタの数より少ない場合にも生じる。そのような部分ページは、データの完全なページが受信されるまで、スクラッチパッドブロック内に記憶されてもよい。
【００５２】
データが部分的に一杯のページへ書き込みを行った後で、記憶されたデータの統合を行って、部分的に一杯のページからのデータを一杯のページに結合してもよい。これは、周期的に行われるガーベッジコレクションの一部として行われてもよい。そのようなデータの統合により、部分的に一杯のページから、異なる消去ブロック内にある完全なページへデータがコピーされる。部分的に一杯のページを保持する消去ブロックは、その後、消去および再利用可能なように、古いものとしてマーク付けがなされる。そのような動作は、他の機能のためにも使用可能なシステムリソースを利用してもよい。
【００５３】
メモリへの単一セクタ書き込みの例
図８は、消去ブロックである、ページがデータの４つのセクタからなるメモリシステム内のメモリアレイの指定アクティブブロック８００を示す。ページ０〜５が示され、それぞれは水平方向に伸びている。各ページは、セクタ０，セクタ１，セクタ２，セクタ３として指定されたデータの４つのセクタを含んでもよい。ホストは、データの単一セクタをメモリシステムに送り、これらのセクタは、アクティブブロック８００に記憶される。セクタＸが受信されて、ページ０のセクタ０として記憶される。これにより、ページ０のプログラミングが阻害される。よって、ページ０のセクタ１，２，３はプログラムされず、空のままである（消去される）。ページ０がプログラムされた後に、セクタＸ＋１が受信される。セクタＸ＋１は、ページ１のセクタ０として記憶される。ページ１のセクタ１，２，３は空のままである。セクタＸ＋１がプログラムされた後に、セクタＸ＋２が受信される。セクタＸ＋２は、ページ２のセクタ０として記憶される。ページ２のセクタ１，２，３は空のままである。セクタＸ＋２がプログラムされた後に、セクタＸ＋３が受信される。セクタＸ＋３は、ページ３のセクタ０として記憶される。ページ３のセクタ１，２，３は空のままである。
【００５４】
図９は、指定アクティブロック９００である消去ブロック内にセクタを記憶するための一代替手法を示す。ここで、ページ毎に１つだけのセクタを記憶する代わりに、以前に記憶されたセクタが同一の消去ブロック内の新しいページへコピーされ、これらのセクタは、より最近受信されたセクタと共に記憶される。前述したのと同様に、セクタＸが、ページ０のセクタ０として記憶される。その後、セクタＸ＋１が受信され、セクタＸがページ０からページ１のセクタ０へコピーされた状態で、セクタＸ＋１は、ページ１のセクタ０として記憶される。よって、セクタＸおよびセクタＸ＋１は、共にページ１内に記憶される。その後、セクタＸ＋２が受信され、ページ２のセクタ２として記憶される。セクタＸは、ページ２のセクタ０として記憶され、セクタＸ＋１は、ページ２のセクタ１として記憶される。よって、セクタＸ，Ｘ＋１，Ｘ＋２は、共にページ２に記憶される。その後、セクタＸ＋３が受信され、ページ３のセクタ３として記憶される。セクタＸは、ページ３のセクタ０として記憶され、セクタＸ＋１はセクタ１として記憶され、セクタＸ＋２は、セクタ２として記憶される。よって、ページ３が完全にデータで埋まるように、データの４つのセクタが、ページ３内に記憶される。
【００５５】
図８または図９に示されているセクタの記憶に続いて、データは統合されてもよい。図８または図９のいずれかのセクタＸ，Ｘ＋１，Ｘ＋２，Ｘ＋３は、新しい消去ブロックの単一のページへコピーされてもよい。これは、都合がよいときにはガーベッジコレクションの一部として行われてもよい。図１０Ａは、指定アクティブブロック１０００のページ０に記憶されたセクタＸ，Ｘ＋１，Ｘ＋２，Ｘ＋３を示す。消去ブロック１０００のページ０は、データで埋まっている。アクティブブロック１１００のページ０がセクタＸ，Ｘ＋１，Ｘ＋２，Ｘ＋３でプログラムされる場合には、セクタＸ，Ｘ＋１，Ｘ＋２，Ｘ＋３は、コピー元である消去ブロックから消去されてもよい。アクティブブロック８００および９００は、その内容がガーベッジコレクション中に統合される場合には消去されて、新しいデータを記憶するために利用可能となってもよい。
【００５６】
ページ０のプログラミングの後に、セクタＸ＋４が受信され、アクティブブロック１０００のページ１のセクタ０として記憶される。その後、セクタＸ＋５，Ｘ＋６，Ｘ＋７がそれぞれ受信され、ページ２，３，４内にそれぞれ記憶される。セクタＸ＋４，Ｘ＋５，Ｘ＋６，Ｘ＋７を単一のページに統合するために、セクタの統合が再び必要であってもよい。そのようなセクタの統合には時間がかかり、その間ホストデータは書き込まれなくてもよい。データの他の消去ブロックへの第２の統合の後、コピー元の消去ブロック１０００は、古いものとしてマーク付けされて、その後に消去されてもよい。
【００５７】
図１０Ｂは、第２のガーベッジコレクション動作が以前のアクティブロック１０００からのデータを再配置した後のアクティブブロック１０１０を示す。セクタＸ＋４からＸ＋７が、アクティブブロック１０１０の単一のページ（ページ１）に統合される。その後、より多くのセクタが受信され、アクティブブロック１０１０内に記憶されてもよい。それらのセクタが単一セクタの形態で受信される場合には、単一セクタは、前述したようにあるページ内に記憶されてもよい。
【００５８】
図１０Ｃは、ページ２〜５内に記憶された追加のセクタＸ＋８からＸ＋１１を伴うアクティブブロック１０１０を示す。この時点でセクタＸ＋８からＸ＋１１を統合するために、他のガーベッジコレクション動作が必要であってもよい。よって、単一セクタとしてホストから受信されるセクタを効率的に記憶するために、この方法は、データをある消去ブロックから他の消去ブロックへ転送して最初の消去ブロックを消去することを要する複数のガーベッジコレクション動作を使用する。より大きな消去ブロックにおいては、ガーベッジコレクション動作の数はより多くなる。メタブロックを使用するメモリシステムにおいては、消去ブロックが共に消去されかつ共にプログラムされるように、消去ブロック群がリンクされてもよい。データは、数多くのセクタを含むメタページ内にプログラムされてもよい。したがって、単一セクタを記憶することは、必要なガーベッジコレクションの量によって、非常に非効率的になる。
【００５９】
図１１Ａは、データを記憶する代替方法を示す。図１１Ａは、メモリアレイの２つの消去ブロックを示す。アクティブブロック１１１０は、データが長期記憶のためにプログラムされるような消去ブロックである。スクラッチパッドブロック１１２０は、データが短期記憶のためにプログラムされるような消去ブロックである。少ない数のセクタが受信される場合、これらはスクラッチパッドブロック１１２０内にまず記憶される。セクタは、データのページを一杯にするのに充分なセクタが受信されるまで、スクラッチパッドブロック１１２０内に継続して記憶される。その後、これらのセクタは、アクティブブロック１１１０のページへコピーされる。
【００６０】
セクタＸが受信され、前述したように、スクラッチパッドブロック１１２０内のページ０のセクタ０としてプログラムされる。その後、セクタＸ＋１が受信され、セクタＸがページ１のセクタ０へコピーされた状態で、スクラッチパッドブロック１１２０のページ１のセクタ１として記憶される。その後、セクタＸ＋２が受信され、セクタＸおよびＸ＋１がページ２のセクタ０とセクタ１とにそれぞれ記憶された状態で、スクラッチパッドブロック１１２０のページ２のセクタ２として記憶される。セクタＸ＋２をスクラッチパッドブロック１１２０内に記憶した後に、セクタＸ＋３が受信される。この時点で、セクタＸ，Ｘ＋１，Ｘ＋２，Ｘ＋３は、アクティブブロック１１１０のページ０に書き込まれている。これら４つのセクタは、データの完全なページを形成する。よって、セクタＸ，Ｘ＋１，Ｘ＋２，Ｘ＋３は、アクティブブロック１１１０のページ０内に効率的に記憶される。その後、セクタＸ＋４，Ｘ＋５，Ｘ＋６，Ｘ＋７がそれぞれ受信される。セクタＸ＋４，Ｘ＋５，Ｘ＋６は、スクラッチパッドブロック１１２０のページ３，４，５内に記憶され、セクタＸ＋７が受信されると、アクティブブロック１１１０のページ１のセクタ０，１，２へコピーされる。セクタＸ＋７は、アクティブブロック１１１０のページ１のセクタ３へ直接プログラムされる。この時点で、スクラッチパッドブロック１１２０は、データを記憶するための利用可能なページを有しておらず、消去準備ができている（古いもの）として指定されてもよい。新しい消去ブロックを、受信される次のセクタまたはセクタ群用にスクラッチパッドブロックとして指定してもよい。この例は単一セクタが受信される様子を示すが、この方法は、セクタ群が、ページ内のセクタ数より少ない数のセクタを有するようなセクタ群用に使用されてもよい。また、前述した例は、データをスクラッチパッドブロックからアクティブブロックへ最大並列度で書き込むことを示すが、そのような書き込みは、最大未満の並列度で行われてもよく、それでも効率性の利点が提供される。よって、データがより高密度に詰め込まれ、かつガーベッジコレクションの頻度が少なくてすむように、セクタは、ある並列度でスクラッチパッドブロックへ書き込まれ、その後に、より高い並列度で他のブロックへ書き込まれる。
【００６１】
スクラッチパッドブロックは、メタブロックを使用するメモリアレイ内で使用されてもよい。例えば、図１１Ｂは、２つのメタブロックであるアクティブブロック１１３０およびスクラッチパッドブロック１１４０を示す。アクティブブロック１１３０およびスクラッチパッドブロック１１４０は共に、プレーン０〜３として示される４つのプレーンを有する。各プレーンは、幅が１セクタなので、４つのセクタがブロック１１３０または１１４０のメタページ内に記憶される。ブロックは共に、メタページ０〜５として示される６つのメタページを有する。データを効率的に記憶するための手法は、消去ブロックに関する前述したものと同一である。データの完全なメタページが利用可能になるまで、セクタは、スクラッチパッドブロック１１４０内に蓄積され、その時点で、完全なメタページが、アクティブブロック１１３０にプログラムされる。例えば、セクタＸ＋３が受信されると、完全なメタページ（セクタＸ，Ｘ＋１，Ｘ＋２，Ｘ＋３）が、アクティブブロック１１３０のメタページにプログラムされる。メタブロックは数多くのプレーンを有する場合があり、かつプレーンはその幅が数ページである場合があるので、メタページは、数多くのセクタを有する場合がある。そのような大きなメタページにとって、前述した手法は特に価値がある。なぜならば、そうでなければ無駄になってしまうメモリアレイ内のスペース量が大量だからである。図１１Ａおよび図１１Ｂに関して示されているように、消去ブロック構造を使用する例に関して説明した本発明の態様を、メタブロック構造に適用してもよいし、その逆であってもよい。「ブロック」という用語は、メモリアレイの構成により、消去ブロックまたはメタブロックのいずれを示してもよい。いずれの場合においても、ブロックは、当該構成において使用される消去単位である。同様に、「ページ」という用語は、単一の消去ブロック内のページまたはメタブロックのメタページのいずれを指してもよい。いずれの場合においても、ページは、当該構成のためのプログラミング単位である。
【００６２】
ページ内のセクタ数より多くを有するセクタ群が受信される場合、セクタは、スクラッチパッドブロック内にまず記憶されることなく、メモリアレイのアクティブブロックへ直接プログラムされてもよい。よって、データの完全なページが、高い並列度でアクティブブロックへ直接プログラムされてもよい一方で、データの部分ページは、完全なページのプログラミングの一部としてアクティブブロックへ書き込まれるようになるまで、低い並列度でスクラッチパッドブロックへプログラムされる。コントローラが、特定のセクタまたはセクタ群の宛先を判断してもよい。セクタ群をアクティブブロックへ書き込むことは、部分ページ書き込みおよび完全ページ書き込みの両方を含むことになり、完全ページは、アクティブブロックへ書き込まれ、部分ページはスクラッチパッドブロックへ書き込まれてもよい。
【００６３】
図１２Ａは、ホストからのセクタがスクラッチパッドブロック内に記憶されている間に更新される、さらなる例を示す。第１のセクタＸ0 が受信され、スクラッチパッドブロック１２５０のページ０に記憶される。この例におけるページは、データの４つのセクタを記憶する。その後、Ｘ1 として示されているＸ0 の代わりが受信される。この例におけるセクタは、その論理アドレスに従って番号付けされ、下付き文字は、セクタが更新版であるかどうか、そしてもしそうであればどのバージョンかを示す。よって、セクタＸ1 は、論理アドレスがＸのセクタであって、このセクタの第１の更新バージョンである。これは、Ｘ0 と同じ論理アドレスを有するデータのセクタであるが、何らかの更新された情報を反映している異なるデータを含む場合がある。セクタＸ1 は、スクラッチパッドブロック１２５０のページ１へ書き込まれる。コントローラは、どのセクタが現在のものでどれが古いものかを常時監視している。スクラッチパッドブロック１２５０において、特定の論理アドレスを有するセクタの直近に書き込まれたコピーが、現在のバージョンである。他のバージョンはどれも古いものである。よって、Ｘ1 がプログラムされると、セクタＸ0 は古いものとなる。Ｘ1 を受信後、セクタ（Ｘ＋１）0 が受信される。これは、セクタＸ1 と論理的に連続するセクタである。セクタＸ1 および（Ｘ＋１）0 は共に、ページ２へ書き込まれる。その後、セクタ（Ｘ＋１）0 は（Ｘ＋１）1 に置き換わる。これは、セクタ（Ｘ＋１）0 を置き換えるセクタ（Ｘ＋１）0 の更新バージョンである。セクタ（Ｘ＋１）1 は、セクタＸ1 と共にページ３へ書き込まれる。その後、セクタ（Ｘ＋２）0 が受信され、ページ４へ書き込まれる。（Ｘ＋２）0 は、その後セクタ（Ｘ＋２）1 に置き換わり、セクタＸ1 および（Ｘ＋１）1 と共にページ５へ書き込まれる。その後、セクタ（Ｘ＋３）0 が受信される。よって、データのページ（セクタＸ1 ，（Ｘ＋１）1 ，（Ｘ＋２）1 ，（Ｘ＋３）0 ）が利用可能である。セクタＸ1 ，（Ｘ＋１）1 ，（Ｘ＋２）1 ，（Ｘ＋３）0 は、アクティブブロック１２５２として指定されたブロックへ書き込まれる。セクタＸ1 ，（Ｘ＋１）1 ，（Ｘ＋２）1 ，（Ｘ＋３）0 は、完全ページ書き込みの並列度で、アクティブブロック１２５２へ書き込まれる。これは、この場合の予想最大並列度である。よって、セクタＸ1 ，（Ｘ＋１）1 ，（Ｘ＋２）1 ，（Ｘ＋３）0 が低い並列度でスクラッチパッドブロック１２５０へ書き込まれた場合であっても、後で高い並列度でアクティブブロック１２５２へ書き込まれる。これは、セクタＸ1 ，（Ｘ＋１）1 ，（Ｘ＋２）1 ，（Ｘ＋３）0 がアクティブブロック内により効率的に記憶されることを意味する。より効率的な記憶により、必要なガーベッジコレクションの頻度が減り、これによって性能が向上する。
【００６４】
一代替例が図１２Ｂに示されている。この例は、図１２Ａに示すものと類似しているが、ここでは、セクタ（Ｘ＋３）0 が、アクティブブロック１２５２へコピーされる前に、スクラッチパッドブロック１２５０内に記憶されている。これにより、セクタ（Ｘ＋３）0 をアクティブブロック１２５２へ書き込む前に更新することができる。図に示されているセクタ（Ｘ＋３）0 は、セクタ（Ｘ＋３）1 で置き換えることによって更新されている。データの完全ページ（セクタＸ1 ，（Ｘ＋１）1 ，（Ｘ＋２）1 ，（Ｘ＋３）1 ）は、スクラッチパッドブロック１２５０に保持されてもよく、何らかのトリガーイベントがあるまでは更新準備完了となっている。この場合、セクタ（Ｘ＋４）0 が受信されて、トリガーイベントが提供される。セクタＸ1 ，（Ｘ＋１）1 ，（Ｘ＋２）1 ，（Ｘ＋３）1 は、この時点で、最大並列度でアクティブブロック１２５２へ書き込まれる。セクタ（Ｘ＋４）0 は、スクラッチパッドブロック１２５０内の次に利用可能なページ（ページ８）へ書き込まれる。
【００６５】
図１２Ｃは、スクラッチパッドブロック１２５０を使用してデータを更新する他の例を示す。データＸ0 から（Ｘ＋１５）0 のセクタが、元ブロック１２５４に記憶されている。ホストは、論理アドレスがセクタ（Ｘ＋６）0 と同一の更新されたセクタであるセクタ（Ｘ＋６）1 を送る。よって、セクタ（Ｘ＋６）1 は、（Ｘ＋６）0 を置き換えるものである。セクタ（Ｘ＋６）0 を置き換えるために、元ブロック１２５４のページ１（セクタ（Ｘ＋４）0 から（Ｘ＋７）0 を含む）がセクタ（Ｘ＋６）1 と結合され、この結合が、スクラッチパッドブロック１２５０のページ０へ書き込まれる。これらのセクタを結合することは、コントローラＲＡＭ２５などのランダムアクセスメモリにおいて生じてもよく、メモリアレイに接続されているメモリレジスタ内で行われてもよい。更新されたページデータは、しばらくの間、アクティブブロックへ書き込むことなく、スクラッチパッドブロック１２５０内に保持されてもよい。後続の更新されたセクタ（Ｘ＋５）1 がホストから受信されると、セクタ（Ｘ＋５）1 がコピーされたセクタ（Ｘ＋４）0 ，（Ｘ＋６）1 ，（Ｘ＋７）0 と共にスクラッチパッドブロック１２５０の他のページ（この場合、ページ１）へ書き込まれることによって、データは、スクラッチパッドブロック１２５０において更新されてもよい。スクラッチパッドブロック１２５０内のデータのページの複数の更新がこのように行われてもよい。更新は、更新されたセクタまたは複数のセクタを置き換えて、スクラッチパッドブロック１２５０の新しいページにデータの変更されなかったセクタをコピーすることによって行われる。コピーされたセクタは、効率的にコピーを行うことができるように、同一のプレーン内でコピーされる。その後、データの更新されたページは、メモリアレイ内のアクティブブロック１２５２へコピーされてもよい。無秩序な更新ブロックを要せずに、非連続の更新がこのように行われてもよい。例えば、前述した例において、更新されたセクタ（Ｘ＋６）1 および（Ｘ＋５）1 が非連続で受信されているが、アクティブブロック１２５２は連続的である。データの複数のページがこのようにスクラッチパッドブロック内で同時に保持および更新されてもよい。ページがもはや更新されることが予想されない場合には、ページは、アクティブブロックへコピーされてもよい。
【００６６】
マルチレベルセルのプログラミングの例
ある種のメモリは、フローティングゲートメモリセルのしきい値電圧範囲を２つのレベルより多くに分割することによって、メモリアレイの各セル内に１ビットより多くのデータを記憶してもよい。図１３は、そのようなマルチレベルセル（ＭＬＣ）メモリを、互いに異なる論理状態を示す複数のしきい値電圧を提供するようにプログラムするやり方の例を示す。４つの互いに異なるしきい値電圧が、Ａ，Ｂ，Ｃ，Ｄで示されている。複数のセルは、各電圧へプログラムされる。図１３は、縦軸上に表されたセル数と共に、セル状態の分布を表している。各しきい値電圧Ａ，Ｂ，Ｃ，Ｄは、異なる論理状態を表す。４つの状態は、２ビットのデータを表し、図に示されているように、１ビットは下位ページのデータを、１ビットは上位ページのデータを表す。ある例においては、下位ページが最初にプログラムされてもよい。下位ページのプログラミングの後で、セルは状態ＡまたはＢとなる。その後、セルが状態ＡまたはＢ（上位ビット＝１なので）のいずれかのままであるように、または状態ＣまたはＤ（上位ビット＝０なので）に修正されるように、上位ページがプログラムされてもよい。これらの４つの状態は、それぞれ比較的狭い電圧ウィンドウを有するので、ＭＬＣメモリは、しきい値電圧の比較的小さな変化によるデータの破損を特に受けやすい。ある例では、下位および上位ページの両方を同時にプログラムするのが有利なこともある。これにより、上位ページデータのプログラミング中に生じるであろう破損といった、隣接するセルのプログラミングによって生じたセル内のデータの破損を減少させる助けとなりうる。
【００６７】
図１４は、スクラッチパッドブロック１４６０がＭＬＣメモリ内のデータの破損を減少させるためにどのように使用されうるかの一例を示す。図１４は、アクティブブロック１４６２およびスクラッチパッドブロック１４６０の両方をＭＬＣメモリのブロックとして示す。両方のブロックは、番号付けがなされ、どのしきい値電圧状態がページのデータのビットを記憶するために使用されるかによって、「上位」または「下位」のいずれかとして示されている。この例において、メモリは、セクタＸからＸ＋３をまず受信して、スクラッチパッドブロック１４６０の下位ページ０内にこれらのセクタを記憶する。その後、メモリはセクタＸ＋４からＸ＋７を受信する。このとき、下位ページ（セクタＸからＸ＋３）および上位ページ（セクタＸ＋４からＸ＋７）は、同時にアクティブブロック１４６２へ書き込まれる。これにより、アクティブブロック１４６２の上位ページ０のプログラミング中にアクティブブロック１４６２の下位ページ０が破損することを防止することができうる。典型的には、このシステムが時間的な不利益がないように、上位および下位ページを共にプログラムするのに必要な時間は、上位ページだけをプログラムするのに必要な時間と同一である。セクタＸからＸ＋７でのアクティブブロック１４６２の下位ページ０および上位ページ０のプログラミングの後、セクタＸ＋８からＸ＋１１が受信され、スクラッチパッドブロック１４６０の上位ページ０へプログラムされる。セクタＸ＋１２からＸ＋１５が受信されると、セクタＸ＋８からＸ＋１１およびセクタＸ＋１２からＸ＋１５は、アクティブブロックの上位ページ１および下位ページ１へ並列的にプログラムされる。このシステムは、図に示されているように、データの後続セクタに対して継続する。よって、データのページは、スクラッチパッドブロック１４６０へ書き込まれて、その後、このページは、メモリセルの同一群の上位および下位ページとして、追加のページと共にアクティブブロック１４６２へ書き込まれる。スクラッチパッドブロック１４６０へのプログラミングは、ページの並列度で生じる一方で、アクティブブロック１４６２へのプログラミングは、ページの並列度の２倍で生じる。
【００６８】
一代替の実施形態において、上位および下位ページがアクティブブロックへ互いに異なるときに書き込まれてもよいが、アクティブブロック内の下位ページが上位ページのプログラミング中に破損した場合には、下位ページのコピーは、スクラッチパッドブロックに保持される。図１４において、セクタＸからＸ＋３が受信されて、アクティブブロック１４６２の下位ページ０と、スクラッチパッドブロック１４６０の下位ページ０との両方へ同時にプログラムされてもよい。その後、セクタＸ＋４からＸ＋７が受信されて、アクティブブロック１４６２の上位ページ０へプログラムされる。セクタＸ＋４からＸ＋７は、スクラッチパッドブロック１４６０内に保存されない。セクタＸ＋４からＸ＋７のアクティブブロック１４６２の上位ページ０へのプログラミング中に何らかの問題（電力消失など）がある場合には、アクティブブロック１４６２の下位ページ０内のデータも破損している可能性がある。すなわち、プログラミング中のセルのしきい値電圧が、もはや下位ページのデータを表す状態でないはないが、上位ページのデータを表す状態になるまでは完全にプログラムされていないといったように修正されている可能性がある。例えば、図１３における状態Ａから状態Ｄへプログラムされているセルは、プログラミングが停止したときには状態ＢまたはＣである可能性がある。データがこのように破損される場合、書き込み中のデータの上位ページは、コピー元の位置から回復されてもよい。しかし、多くの場合、下位ページの他のコピーは存在しない。ここで、下位ページのコピーは、上位ページのプログラミングが完了するまで、スクラッチパッドブロック１４６０内に保持されている。よって、下位ページの破損されていないコピーが存在し、下位ページのデータを回復するために使用されてもよい。
【００６９】
複数ファイルの例
１つ以上のホストデータファイルからのデータが、単一ブロックに記憶されてもよい。ページの一部があるファイルからのデータを含み、ページの一部が他のファイルからのデータを含むように、ページ内でファイル間の区切りが生じる場合がある。図１５は、元ブロック１５７０のページ０からページｉ−１が第１のファイル（ファイル１）からのデータを含み、ページｉ＋１からページｎ−１が第２のファイル（ファイル２）からのデータを含む例を示す。ページｉは、ファイル１からのセクタ（ｉ＊４）および（ｉ＊４）＋１と、ファイル２からのセクタ（ｉ＊４）＋２および（ｉ＊４）＋３とを含む。２つのファイルからのセクタがあることを示すために、ファイル２のセクタは、網掛け表示されている。
【００７０】
図１５は、ファイル２が新しいブロック１５７２に更新される様子を示す。新しいブロック１５７２の第１のページ（ページ０）は、元ブロック１５７０のページｉの内容で書き込まれる。よって、新しいブロック１５７２のページ０は、ファイル２およびファイル１の両方からのセクタを含む。ファイル１からのセクタ（ｉ＊４）および（ｉ＊４）＋１は、この時点では更新されないが、データの完全ページをプログラムするためにコピーされてもよい。更新されたファイル２の残りは、新しいブロック１５７２のページ１からｉ−１へプログラムされる。その後、ファイル１が更新される。セクタ０からセクタ（ｉ＊４）−１は、ページｉからページｎ−１内に記憶される。しかし、セクタ（ｉ＊４）および（ｉ＊４）＋１は、ファイル１の一部でもあり、更新されなければならない。新しいブロック１５７２はこの時点で一杯なので、更新されたセクタ（ｉ＊４）および（ｉ＊４）＋１は、他のブロックへプログラムされる。その後、セクタ（ｉ＊４）および（ｉ＊４）＋１ならびに新しいブロック１５７２内のセクタは、ガーベッジコレクション動作の一部として、単一ブロックに統合されてもよい。しかし、これには時間とシステム資源がかかり、一般的には望ましくない。
【００７１】
図１６は、２つの互いに異なるファイルからのセクタを含む図１５の元ブロック１５７０のセクタを更新するための一代替手法を示す。この手法は、スクラッチパッドブロック１６７４を使用して、更新されたセクタを、完全に更新されたページの一部としてシステムの最大並列度で書き込まれてもよいようなときまで記憶する。ファイル２が更新されると、更新されたセクタ（ｉ＊４）＋２および（ｉ＊４）＋３は、スクラッチパッドブロック１６７４へ書き込まれる。ここで、これらのセクタは、スクラッチパッドブロック１６７４のページ０へ書き込まれ、低い並列度が使用される残りのページへはデータは書き込まれない。ファイル２の残りのセクタ（セクタ（ｉ＊４）＋４からＮ−１）は、新しいブロック１６７６のページ０からｎ−１へコピーされる。これらのセクタは、最大並列度を使用する完全ページ書き込みですべて書き込まれる。その後、ファイル１が更新される。セクタ０から（ｉ＊４）−１は、ページｎ−ｉ＋１からｎ−２へ最大並列度でプログラムされる。その後、ファイル１のセクタ（ｉ＊４）および（ｉ＊４）＋１は、セクタ（ｉ＊４）＋２および（ｉ＊４）＋３を新しいブロック１６７６のページｎ−１へコピーするのと並列して書き込まれる。よって、元ブロック１５７０内に以前保持されていたすべてのセクタの更新されたコピーは、現在、新しいブロック１６７６内に保持され、新しいブロック１６７６には古いデータは保持されていない。一般的に、新しいブロック１６７６などのブロックに対してガーベッジコレクションを行う必要はない。新しいブロック１６７６の各ページは、最大並列度でプログラムされて、ブロック内のデータの最大密度を達成する。スクラッチパッドブロック１６７４内のセクタ（ｉ＊４）＋２および（ｉ＊４）＋３は、この時点で古いものとしてマーク付けされてもよい。しかし、スクラッチパッドブロック１６７４は、ガーベッジコレクション動作を必要とせずにさらなる動作のために使用されてもよい。なぜならば、スクラッチパッドブロックは、定期的に現在および古いデータを両方含むからである。
【００７２】
データの非連続セクタの記憶の例
以前の例の中には、完全ページを書き込むよりも低い並列度でデータのセクタをスクラッチパッドブロックへ書き込むものがあった。そのような例において、書き込み中のスクラッチパッドブロックのページ内の残りのスペースは、空のままである場合がある。なぜならば、既に記憶されたデータを妨害せずに後にプログラムすることができないからである。ある場合には、このようなともすれば空のスペースと、ともすれば未使用のプログラミング帯域幅を使用して、同一のページ内に関連性のないデータを記憶することができる。例えば、メモリシステムが単一セクタまたはページより小さいセクタ群内のホストデータを受信する場合、ホストデータのこれらのセクタを、関連性のないホストデータなどの関連性のないデータまたは制御データのセクタも保持するページ内のスクラッチパッドブロック内に記憶してもよい。同様に、完全ページの一部として後に記憶されるスクラッチパッドブロック内に記憶中のファイルの最初からのセクタが、論理的に関連性のない、同一のスクラッチパッドブロックのページに記憶された追加のセクタを有していてもよい。
【００７３】
図１７は、以前の例のように、セクタＸ，Ｘ＋１，Ｘ＋２がスクラッチパッドブロック１７８０内に記憶される場合の一例を示す。しかし、ここで、セクタＸ，Ｘ＋１，Ｘ＋２を保持するスクラッチパッドブロックのページ内の残りのスペースを、他のデータを記憶するために使用する。セクタＹ，Ｙ＋１，Ｙ＋２が、ページ０内にセクタＸと共に記憶される。セクタＹ，Ｙ＋１，Ｙ＋２は、セクタＸ，Ｘ＋１，Ｘ＋２と論理的に関連性がなくてもよい。これらのセクタは、他のホストデータファイルからのものであってもよく、または同一のファイル内のセクタの他のクラスタからのものであってもよい。セクタＹ，Ｙ＋１，Ｙ＋２は、セクタＸ，Ｘ＋１，Ｘ＋２と連続していなくてもよく、論理アドレススペース内で分離されていてもよい。同様に、セクタＺおよびＺ＋１が、セクタＸおよびＸ＋１と共にページ１内に記憶される。セクタＺおよびＺ＋１は、セクタＸ，Ｘ＋１，Ｘ＋２およびセクタＹ，Ｙ＋１，Ｙ＋２の両方に論理的に関連性がなくてもよい。その後、Ｘ＋３が受信されると、セクタＸ，Ｘ＋１，Ｘ＋２，Ｘ＋３は、他のブロックのページへ書き込まれる。その後、Ｙ＋３が受信されると、セクタＹ，Ｙ＋１，Ｙ＋２，Ｙ＋３は、他のブロックのページへ書き込まれる。よって、利用可能な資源をより効率的に使用するために、関連性のないデータは、スクラッチパッドブロックの同一のページ内に記憶されてもよい。
【００７４】
図１８は、スクラッチパッドブロック１８９０内に記憶された関連性のないデータの他の例を示す。ここで、セクタＸ，Ｘ＋１，Ｘ＋２は、前述したように記憶され更新される。しかし、ここで、セクタＹも並列的に記憶され更新される。更新されたセクタは、どのバージョンが記憶されているかを示す下付き文字によって表される。例えば、セクタＸ0は、セクタＸの元バージョンである一方で、Ｘ1 は、セクタＸの第１の更新バージョンである。セクタＹは、頻繁に更新される制御データセクタまたはホストデータのセクタであってもよい。あるシステムにおいて、ＦＡＴ情報などの制御データは、ホストデータが記憶される際に更新される。少量のホストデータが受信される場合、スクラッチパッドブロック１８９０内の制御データを更新するのは利点でありうる。これにより、制御データの単一セクタのみが更新される制御構造を更新することを避けるようにしてもよい。後の時点で、スクラッチパッドブロックからの制御データを使用して、制御データ構造を更新してもよい。
【００７５】
スクラッチパッドブロック管理
スクラッチパッドブロックは、メモリアレイ内の指定されたブロックであってもよい。固定物理位置が、スクラッチパッドブロックとして選ばれてもよい。しかし、これは、メモリアレイを不均一に消耗させる結果となる場合がある。代わりに、スクラッチパッドブロックが古いデータで一杯になると他の消去ブロックがスクラッチパッドブロックとして選ばれるように、指定されたブロックは時々変更されてもよい。この場合において、メモリコントローラによって使用されるデータ構造により、スクラッチパッドブロックの位置が識別されてもよく、または、コントローラがメモリアレイの消去ブロックを走査した場合にどの消去ブロックがスクラッチパッドブロックであるかを判断するように、指定されたスクラッチパッドブロックがマーク付けされてもよい。スクラッチパッドブロックは、セクタを使用してマーク付けされて、それがスクラッチパッドブロックであると識別されるようにしてもよい。例えば、図１９は、スクラッチパッドブロック２１００の第１のセクタとしてのマーク付けセクタ２１１０を示す。カードに電源が投入されると、メモリアレイの消去ブロック（またはメモリアレイの一部分）が走査されて、１つのスクラッチパッドブロックまたは複数のスクラッチパッドブロックの位置を判断してもよい。図１９の例において、各消去ブロックの第１のセクタが読み出されて、スクラッチパッドブロックを示すマーク付けセクタかどうかが判断される。
【００７６】
データは、データ群としてスクラッチパッドブロックへ書き込まれてもよい。データ群は、ホストから受信されたセクタの論理的に連続した群である。データ群がスクラッチパッドブロック内に記憶される場合、記憶されたデータ群についての情報を提供するインデックスセクタも書き込まれる。データ群のセクタの位置が、インデックスセクタ内に記憶されてもよい。複数のデータ群を記憶するために、図１９のスクラッチパッドブロック２１００などのスクラッチパッドブロックを使用してもよい。図２０は、１つのデータ群を記憶するスクラッチパッドブロック２１００を示す。データ群１は、２つのセクタ２２２０および２２２１からなる。これらのセクタと、マーク付けセクタ２１１０と、インデックスセクタ２２３０とが、スクラッチパッド２１００に記憶される。インデックスセクタ２２３０は、群１についての情報を記憶する。
【００７７】
図２１は、２つのセクタ２３４０および２３４１からなるデータ群２がプログラムされた後の、図２０のスクラッチパッドブロック２１００を示す。インデックスセクタ２３５０は、群１および群２についての情報を記憶する新しいインデックスセクタである。よって、インデックスセクタ２２３０は、古いものである。なぜならば、インデックスセクタ２３５０は、群１を含むスクラッチパッドブロック２１００のデータ群の完全な記録を含むからである。
【００７８】
図２２は、３つのセクタ２４６０，２４６１，２４６２からなるデータ群３のプログラミング後の、図２１のスクラッチパッドブロック２１００を示す。インデックスセクタ２４７０は、群１，２，３についての情報を記憶する新しいインデックスセクタである。よって、インデックスセクタ２４７０は、スクラッチパッドブロック２１００のデータの完全な記録を含むので、インデックスセクタ２３５０は古いものとなる。
【００７９】
図２３は、データ群１およびデータ群２がスクラッチパッドブロック２１００から読み出されて、メモリアレイの他のブロック内の単一のページとして書き込まれた後の、図２２のスクラッチパッドブロック２１００を示す。インデックスセクタ２５６０は、データ群３についての情報を記憶する。スクラッチパッド２１００内のデータ群１およびデータ群２は、古いものであり、別のところに記憶されているので、インデックス付けは必要ない。よって、インデックスセクタ２５６０は、スクラッチパッドブロック２１００内にすべての現在のデータの完全な記録を含む。
【００８０】
ホストがメモリアレイに対してデータのあるセクタまたは複数のセクタを要求する場合、コントローラは、要求されたセクタがスクラッチパッドブロック内にあるかどうかをまずチェックしてもよい。セクタがスクラッチパッドブロック内にない場合には、セクタは、通常のやり方で探索されてもよい。よって、スクラッチパッドは、メモリアレイ内のデータのセクタの位置を常時監視するために使用される通常のメディア管理の変更を要求しない。
【００８１】
マルチストリーム更新およびインデックス付け
図２４は、従来の方法によって単一セクタのページを有する更新ブロック内に更新が記憶されることによって更新される、論理群内のセクタの例を示す。データは論理セクタにパッケージ化されて、メタブロック（「ブロック」とも略称される）に記憶され、ここでは、メタブロックのすべての論理セクタは共に消去可能である。データはブロックにページ毎に記録され、各ページ内のすべての論理セクタは共にプログラム可能である。この例は、各セクタは典型的には約５１２バイトのサイズである、単一セクタのページを示す。ある場合には、「元」ブロック１０が、昇順論理セクタ番号の順序などの所定の順序に従ってそこに記憶されたセクタの全論理群と共に形成される。例えば、ブロックは、好ましくは連続順で論理群のすべてのセクタをそのまま有するそのままの (intact) ブロックとみなされる。
【００８２】
その後、ホストが論理群の論理セクタのうちのいくつかの最新バージョンとして更新を送出すると、更新されたセクタは、論理群専用の更新ブロック２０に書き込まれる。更新データが所定の順序であることがわかると、更新ブロックに連続して記録できることがある。更新ブロックは、そのままのブロックになる可能性のある連続更新ブロックとみなされる。その一方で、更新セクタが連続順でない場合には、更新ブロックは非連続または「カオス的」とみなされる。この場合、セクタの最新バージョンが最終的にはどこか別の場所へコピーされて、新たなそのままのブロックを形成することになる。
【００８３】
ホスト書き込み＃１では、更新された論理セクタＬＳ１０’がメモリに送出されて、更新ブロック２０のページ０に記録される。ホスト書き込み＃２では、更新された論理セクタＬＳ１１’がメモリに送出されて、更新ブロック２０内の次に利用可能な位置であるページ１に記録される。ホスト書き込み＃３では、更新された論理セクタＬＳ６’およびＬＳ７’がページ２およびページ３にそれぞれ記録される。最後に、ホスト書き込み＃４では、更新された論理セクタＬＳ１０’’がメモリに送出されて、更新ブロックのページ４に記録される。論理群の更新は、更新ブロックからホストへの更新データストリーミングと共に、例えばストリーム１などのストリームを形成するといえる。一般的に、元ブロックおよび更新ブロックのうちで分配される論理セクタの複数のバージョンがある場合に、最新の書き込みバージョンのみが、すべての過去のバージョンを古いものにする有効なものとなる。例えば、図２４は、最新の書き込みバージョンである更新ブロックのページ４に記録されたＬＳ１０’’を示すので、これは論理セクタ番号１０のデータについての最新の有効セクタである。過去のバージョンである、元ブロック１０内のＬＳ１０および更新ブロック２０内のＬＳ１０’は、古いものである。
【００８４】
最終的に、更新ブロックは閉じられ、また更新ブロックと元ブロックとの間の有効セクタ（論理セクタの最新バージョン）が所定の順序で統合されて新しい元ブロックを形成することになる。古い元ブロックおよび更新ブロックは、再利用される。
【００８５】
図２５は、ページはマルチセクタでありかつ一度書き込み可能であると思われる、メモリに対して適用されるような図２４に示されている書き込みの同一シーケンスを示す。このページの構成例が図２４に示されているものと異なる点は、各ページが今度は１つではなく４つのセクタを含み、ある実施形態においては消去後に一度だけ書き込み可能なことである。既存の用語法に従って、メモリ装置が課するプログラミングの最小ユニットを「物理ページ」と称し、システムが課するプログラミングの最小ユニットを「メタページ」と称し、これが複数の物理ページから構成されてもよい。便宜上、「メタページ」および「ページ」は、別途規定のない限り交換可能に使用されるものとする。
【００８６】
前述したのと同様に、各論理セクタは、元々は、元ブロック１０に論理番号の昇順で連続して記憶されている。ブロックが４つのセクタのページ構成を有する場合には、ブロックは、さらにページに分割されることになり、各論理セクタは、好ましくは、各ページにおける明確なページオフセットを有する。例えば、ページＰ０は、論理セクタＬＳ０〜ＬＳ３を内部に記憶している。よって、ＬＳ０は、ページの４つのスロットの１番目に記憶され、ＬＳ１は、第２のスロットに記憶されている、といった具合である。４つのセクタページの例において、所定のセクタＬＳｎについてのページオフセットは、ブロックの第１の論理セクタがＬＳ０という番号が付されていた場合、ＭＯＤ［（ｎ＋１），４］によって与えられることになる。
【００８７】
ホストがメモリに書き込むたびに、データユニット、典型的には論理セクタの番号を書き込むための書き込みコマンドを発行し、その後、論理セクタ自体を送信する。データの損失を防止するために、ホストとメモリとの間のプロトコルは、現在の書き込みデータがうまくメモリに書き込まれた後でなければ次のホスト書き込みは開始しないようなものとなっている。
【００８８】
前に説明したように、マルチセクタページを伴うメモリ構造において、ページ内でセクタ整列を実施するのが好ましい。なぜならば、こうすれば、ガーベッジコレクション中に再整列をする必要性を回避するからである。よって、各ホスト書き込みから受信されたセクタは、整列の際には、ページの整数番号を更新ブロックに記入する必要はない。この結果、プログラミング中のページが部分的にしか一杯でないということになりうる。部分的に一杯のページは、ホストデータ前または後に空隙を有する場合がある。このような空隙は、できるだけ連続順序を維持するために、既存の論理セクタで前パディングまたは後パディングすることができる。次のホスト書き込みが次の論理セクタになるといけないので、部分ページを後パディングしないのが一般的に好ましい。しかし、一度書き込み可能なページを伴うメモリ構造の場合には、一旦書き込まれたら部分ページの一杯でない部分を再書き込みするというオプションはない。
【００８９】
前述した例において、更新ストリーム（ＳＰＢ）のうちの１つの中の有効なページ数がオプションとして１つに限定されていた。これは、原則を示すのには充分であるが、注意すべきなのは、１つより多くのページをＳＰＢに記憶することができ、そこにおいては、最新の書き込みセクタを見つけるためにさらに多くの情報（例えば、より古い書き込みポインタ）を分析する必要がある。
【００９０】
例えば図２５において、ホスト書き込み＃１では、更新されたセクタＬＳ１０’は更新ブロック２０のページＰ０の第３のオフセットに記憶される。オプションとして、完全性のためには、第１の２つのスロットを、元ブロック１０からのＬＳ８およびＬＳ９などの有効データでパディングすることができる。しかし、これでは、ページＰ０がホスト書き込み＃１の最後に保存される際に、第４のスロットはまだ一杯となっていない。オプションとして、部分ページをＬＳ１１の最新バージョンでパディングすることができる。ページは一度書き込み可能なので、一杯でない第４のスロットは、さらなるプログラミングのために閉じられることになる。
【００９１】
ホスト書き込み＃２では、コマンドは、受信され更新されたセクタＬＳ１１’を書き込むことであり、これは、最終セクタＬＳ１０’から連続順序であることがわかる。理想的には、これは、Ｐ０内のＬＳ１０’の後の次のスロットに記録されるべきである。しかし、Ｐ０はさらなる書き込みに対して閉じられたので、ＬＳ１１’が最終スロットにおける次の空ページＰ１に記憶され、これがその適切なページオフセットである。Ｐ１の第１の３つのスロットは、ＬＳ８，ＬＳ９，ＬＳ１０’でパディングし、これらは、ＬＳ１１’に連続して先行する論理セクタの有効バージョンである。
【００９２】
ホスト書き込み＃３では、コマンドは、ＬＳ６’およびＬＳ７’を書き込むことである。これらは、それぞれ第３および第４のスロットにおける更新ブロック内の次の空ページであるＰ２に書き込まれる。第１および第２のスロットは、ＬＳ４およびＬＳ５などの有効データでパディングされる。
【００９３】
最後に、ホスト書き込み＃４では、コマンドは、ＬＳ１０’’を書き込むことであり、これがＰ３、スロット３に記憶される一方で、スロット１および２は、ＬＳ８およびＬＳ９でそれぞれパディングされ、スロット４は、空のままとなる。
【００９４】
更新ブロックが多くのパディングおよび無駄なスペースと共に非効率に使用される一方で、一度プログラム可能な各ページ内でのセクタ整列を維持しようとしていることがわかる。好ましくない特徴の１つは、ホストが連続して書き込んでも（２つの別個の書き込みコマンドにおいてセクタ１０、その後１１）、更新ブロックは連続的であることを止めてしまい、なんらかの古いデータを有するので、そのままの状態になることができない。
【００９５】
前述した問題を回避して、部分的に一杯なページによる更新ブロック２０内への非効率な記憶および過度のパディングを最小限にするために、追加のスクラッチパッドブロック３０を使用することを前に説明した。スクラッチパッドブロック（ＳＰＢ）３０は、更新ブロック２０に書き込まれる前にデータの完全ページをステージすることができるように、入力データに対する一時バッファおよびステージ領域としての役割を果たす。前述した４つのセクタのページの例において、４つのセクタが書き込まれて更新ブロック内のページを完全に一杯にするように、セクタはステージされる。ホストが別個の書き込みで連続データを書き込む場合、ＳＰＢにより、部分ページ書き込みをバッファリングすることができ、更新ブロックの連続性を維持することができる。しかし、これは、元ブロックおよび更新ブロックに加えて今度は有効データが、ＳＰＢ上で分散してもよいことを意味する。
【００９６】
便宜上、スクラッチパッドブロックのページサイズは、更新ブロックのそれと一般的には異なりうるが、同一であるとする。例えば、メモリシステムが物理ページレベルにおけるプログラミングをサポートしている場合には、スクラッチパッドブロックのページは、物理ページのサイズを有することができる。
【００９７】
スクラッチパッドブロックおよび更新ブロックインデックス管理
ブロック管理を伴うメモリシステムが、２００４年８月１３日出願の米国特許出願第１０／９１７，７２５号（特許文献２２）に開示されている。この特許出願は、その全体が本願明細書において参照により援用されている。ブロック管理は、更新中のデータの各論理群と関連付けられる更新ブロックを提供する。開示されているのは、元ブロックまたは更新ブロック上のいずれかに存在するような有効データを捜し当てるための様々なインデックス付け手法例である。特に、更新ブロックが非連続順序の論理セクタを含む場合には、「カオス的更新ブロック」とみなされる。カオス的更新ブロックインデックス（「ＣＢＩ」）を使用して、カオス的更新ブロックに記録された論理セクタを追跡する。
【００９８】
スクラッチパッドブロックに保存されたＳＰＢＩ／ＣＢＩインデックス
本発明の他の態様によれば、更新ブロックに加えてスクラッチパッドブロックを使用する場合に、関連するスクラッチパッドブロックインデックス（ＳＰＢＩ）を使用して、スクラッチパッドブロックに記録された更新セクタを追跡する。これは、更新ブロックに記録された論理セクタを追跡するために使用されるインデックス（例えば、「ＣＢＩ」）に対する追加である。ユーザデータがスクラッチパッドブロックの部分ページに記憶される場合はいつでも、ページの少なくとも最終スロットが一杯ではないということになる。一実施形態において、スクラッチパッドブロック内の部分ページの最終スロットにＳＰＢＩを記憶することができる。好ましい一実施形態において、ＳＰＢＩおよびＣＢＩをＳＰＢＩ／ＣＢＩセクタ内にパッケージ化して、いずれにしても使用されないスクラッチパッドブロック内の部分ページの最終スロットに記憶することができる。新しい部分ページが書き込まれる度に、更新されたＳＰＢＩ／ＣＢＩセクタが終端スロットに書き込まれ、すべての過去のバージョンは古いものとなる。
【００９９】
図２６は、本発明の一般的な一実施形態に係る、第１のメモリブロックを第２のメモリブロックと共に使用し、記憶されたデータのインデックスを第２のブロックに保存することによって、データを更新する方法を示すフローチャートである。
【０１００】
ステップ８０：それぞれデータを連続的に記憶するための第１および第２の不揮発性記憶装置を提供する。
【０１０１】
ステップ８１：第１および第２の不揮発性記憶装置に記録されたデータの少なくとも１つのインデックスを保持する。
【０１０２】
ステップ８２：入力データを受信する。
【０１０３】
ステップ８４：バッファリングされた入力データを第１の記憶装置に記録するための第１の所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ８５へ進み、そうでなければステップ８６へ進む。
【０１０４】
ステップ８５：バッファリングされた入力データを第１の記憶装置に記録する。ステップ８８へ進む。
【０１０５】
ステップ８６：バッファリングされた入力データを少なくとも１つのインデックスと共に第２の記憶装置に記録する。ステップ８８へ進む。
【０１０６】
ステップ８８：処理すべき入力データがもうなければ、ステップ７２へ進み、そうでなければ処理を終了する。
【０１０７】
図２７Ａは、本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、データを更新してインデックスを保持する特定の一例を示す。各ブロックは、メタブロックであって、すべてのそのメモリ位置は共に消去可能である。ブロックはページに編成され、そこでは、ページ内のすべてのメモリ位置は共にプログラム可能である。さらに、各ページは、１つより多くのセクタを記憶するサイズを有し、ブロックが消去される度に一度書き込み可能である。
【０１０８】
スクラッチパッドブロック（「ＳＰＢ」）３０が、更新ブロック（「ＵＢ」）２０に加えて提供される。「ストリーム１」を使用して更新ブロック２０に対するデータのフローをラベル付けする場合には、スクラッチパッドブロック３０に対する対応するフローが「ストリーム０」にラベル付けされることになる。
【０１０９】
図２４および図２５における同一のホスト書き込みの例を使用して、図２７Ａに示されている本発明の利点を示すことにする。ホスト書き込み＃１では、コマンドは、ＬＳ１０’を書き込むことである。ＬＳ１０’はスロット３を占有しなければならないので、完全ページは更新ブロック２０に書き込むことはできない。代わりに、ＳＰＢ３０の新しいページにおいてバッファリングされることによって、ステージされる。よって、ＬＳ１０’は、ＳＰＢ３０の次に利用可能な部分ページＰＰ０のスロット３に記憶される。同時に、スロット１および２は、オプションとして、ＬＳ８およびＬＳ９でそれぞれパディングされる。また、本発明の特徴によれば、ＳＰＢＩおよびＣＢＩは両方とも、セクタ、すなわち、ＳＰＢＩ／ＣＢＩ1 ５０内にパッケージ化され、インデックスセクタ５０は、好都合なことに、部分ページＰＰ０の最後の未使用のスロットに記憶される。
【０１１０】
ホスト書き込み＃２では、コマンドは、ＬＳ１１’を書き込むことである。ＬＳ１１’はスロット４に属するので、ＳＰＢ３０から連続するＬＳ８，ＬＳ９，ＬＳ１０’で前パディングされた完全ページを、更新ブロック２０の次に利用可能なページＰ０に書き込むことができる。この場合、ＳＰＢＩ／ＣＢＩのためのインデックスセクタは更新されない。なぜならば、ＳＰＢ３０内の部分ページに対して書き込んでいないからである。整列は、ＳＰＢにおける前パディングと共に好ましいが、オプションである。
【０１１１】
ホスト書き込み＃３では、コマンドは、ＬＳ６’およびＬＳ７’を書き込むことである。これらはスロット３および４にそれぞれ属している。よって、先立つスロットがＬＳ４およびＬＳ５でパディングされると、更新ブロック２０の他の完全ページであるＰ１が書き込まれる。同様に、ＳＰＢＩ／ＣＢＩのためのインデックスセクタは更新されない。なぜならば、ＳＰＢ３０内の部分ページに対して書き込んでいないからである。
【０１１２】
ホスト書き込み＃４では、コマンドは、ＬＳ１０’’を書き込むことである。ＬＳ１０’’はスロット３に属するので、ＳＰＢ３０の次の部分ページＰＰ１に書き込まれることになる。同様に、先立つスロット１および２はＬＳ８およびＬＳ９でパディングされる一方、最終スロットも、インデックスセクタＳＰＢＩ／ＣＢＩ3 の最終更新と共に記憶されることになる。
【０１１３】
図２７Ａに示されている手法は、ホスト書き込み＃４の最後に更新ブロック２０を使用する場合と図２５に示されているものとを比較すると明らかなように、更新ブロックをより効率的に使用している。同一のホスト書き込みについて、図２７Ａに示されている手法は、費やす記憶装置は少なく、更新ブロック内で必要なパディングも少ないが、これはスクラッチパッドブロック３０を犠牲にするものである。同時に、インデックス付け手法は、スクラッチパッドブロック内の未使用の記憶装置を有利に利用して、不揮発性メモリにインデックスを記憶する。
【０１１４】
本発明の重要な特徴および利点の１つは、図２５に示されている例とは違って、更新ブロックにおける更新セクタの連続順序が、一連の連続した論理セクタの別個のホスト書き込み中に保持されることである。これは、図２７Ｂに示されている例から明らかである。
【０１１５】
図２７Ｂは、本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、保持されているデータを更新する連続順序付けの他の例を示す。この例において、論理セクタＬＳ１０’〜ＬＳ１６’は連続するが、数多くの別個のホスト書き込みに対して書き込まれる。
【０１１６】
ホスト書き込み＃１では、ＬＳ１０’が書き込まれる。これは、ページエンドスロットではないページのスロット３を占有することになるので、スクラッチパッドブロック３０のスロット３に記録される。同時に、インデックスＳＰＢＩ／ＣＢＩ１がページエンドスロットに記録される。
【０１１７】
ホスト書き込み＃２では、ＬＳ１１’が書き込まれる。これは、ページエンドスロットを占有することになるので、更新ブロック２０内の新しいページの最終スロットへ直接記録される。同時に、スクラッチパッドブロックに一時的に記憶されたＬＳ１０’は、スロット３に対してコピーされる一方で、スロット１および２は、元またはそのままのブロック１０からのＬＳ８およびＬＳ９で前パディングされる。
【０１１８】
ホスト書き込み＃３では、ＬＳ１２’〜ＬＳ１４’が書き込まれる。どれもエンドページオフセットを有しないので、スクラッチパッドブロック内の新しいページのスロット１〜３に記憶される。同時に、更新されたインデックスＳＰＢＩ／ＣＢＩ３がページエンドスロットに記録される。
【０１１９】
ホスト書き込み＃４では、ＬＳ１５’およびＬＳ１６’が書き込まれる。ＬＳ１５’はページエンドスロットに当てはまるので、更新ブロック内の次のページの最終スロットへ直接書き込まれる。同時に、スロット１〜３がスクラッチパッドブロックからのＬＳ１２’〜ＬＳ１４’で埋められる。
【０１２０】
連続論理セクタＬＳ１０’〜ＬＳ１６’は、いくつかの別個のホスト書き込みに渡って書き込まれるにもかかわらず、連続的なやり方で、更新ブロックに記録されることがわかる。
【０１２１】
好ましい実施形態において、１つの有効な部分ページ（例えば、最終書き込み部分ページ）が、スクラッチパッドブロックの論理群毎に保持される。本発明は、スクラッチパッドブロック内の論理群毎に保持される１つより多くの有効部分ページを有する場合にも等しく適用可能である。その場合には、記録されたセクタを探し当てるために、１つより多くのページからのインデックス情報を分析する必要がある。
【０１２２】
スクラッチパッドブロックのページ内のセクタ整列およびパディングは好ましいが、オプションである。整列およびパディングは、後続の更新ブロックへの転送を促進することになる。
【０１２３】
更新ブロックのページ内での絶対セクタ整列は、あるメモリ構造におけるインデックス付けおよびコピーを簡素化することになる。また、ページ内のセクタは、たとえページ内のすべての連続セクタがいくつかのスロット数だけ循環的にシフトされる場合であっても、ページ整列されているとみなされる。その場合に、ページ内の第１の論理セクタの位置を示すページタグが、オフセットアドレスを提供することになる。
【０１２４】
図に示されている好ましい実施形態は、２つの記憶装置を別々の消去可能なブロックとして有している。一般的に、本発明は、メモリの２つの部分である２つの記憶装置に対して等しく適用できる。
【０１２５】
また、本発明は、それぞれが１ビットのデータを記憶するメモリセルを有する２状態メモリと、それぞれが１ビットより大きなデータを記憶することができるメモリセルを有する多状態メモリとに対して等しく適用できる。マルチページ記憶装置をサポートする多状態メモリについて、スクラッチパッドブロックの記憶動作には下位ページが好ましくは使用される。書き込むための第１のセクタが複数スロットページのスロット１の位置から開始しない場合には、部分ページを前パディングするのが好ましい。
【０１２６】
カオス的ブロックにはページレベルインデックス付けが使用され、スクラッチパッドブロックにはセクタレベルインデックス付けが使用される。すべてのカオス的ブロックおよびスクラッチパッドブロック、すなわち、ＳＰＢＩ／ＣＢＩをアクセスするために必要なすべてのインデックス付け情報は、コントローラＳＲＡＭに保持されて、迅速なアクセスおよび処理に供される。当該情報は、新しい部分ページが書き込まれる度にスクラッチパッドブロックに周期的に書き込まれる。
【０１２７】
一般的に、部分メタページ再配置データは、入力データと共にプログラムされて、プログラミングサイクル数を減少させる。スクラッチパッドブロック（ＳＰＢ）は、一杯になるとコンパクト化される。ＳＰＢのコンパクト化は、すべての有効なデータを新しいブロックへ再配置することである。ＳＰＢにおいてＵＢ毎に有効なデータを伴うページは１つしか有していないので、それらのページを新しいブロックにコピーするだけでよい。更新ブロック毎に有効なデータが複数ページある場合には（互いに異なるまたは同一の論理アドレスを含む場合があり、後者の場合には、統合するのが好ましい）。
【０１２８】
部分ページに保存された更新ブロックインデックス
本発明のさらに他の態様によれば、メモリブロックに記憶されたデータは、データによって占有されていない部分ページの部分にインデックスを記憶する。よって、メモリユニットのページが共にプログラム可能であり、かつメモリページのブロックが共に消去可能であるようなメモリユニットに編成されたメモリにおいて、メモリユニットに記憶されたデータユニットが所定の順序に従ってページ内に配列される場合であって、特にページが各消去後に一度プログラム可能である場合に、部分的に一杯のページが存在することになる。そして、ブロックのインデックスは、更新データで埋められていない部分ページに記憶される。部分ページは、現在のブロックまたは他のブロック内にあってもよい。
【０１２９】
図２８は、ブロックの部分ページ内の更新データを記憶するためのメモリブロックのインデックスを保存するための好ましい手法を示す。
【０１３０】
ステップ９０：不揮発性メモリをそれぞれデータの論理ユニットを記憶するためのメモリユニットの消去可能なブロックに編成し、また、各ブロックを１つ以上のページに編成し、各ページ内のメモリユニットが所定のページオフセットを有し、かつ消去後に共に一度プログラム可能である。
【０１３１】
ステップ９２：データの論理ユニットの更新バージョンを記録するための更新ブロックとしてブロックを提供する。
【０１３２】
ステップ９４：データの論理ユニットをホストから受信する。
【０１３３】
ステップ９６：更新ブロック内のデータのインデックスを保持する。
【０１３４】
ステップ９８：更新ブロックに対してページ毎に記録し、受信されたデータをページオフセットに従ってページ内に整列させ、記録すべきページがデータに占有されていない部分を有する場合には、データに占有されていない部分に対してインデックスを記録する。
【０１３５】
マルチストリーム追跡および同期
図２９は、いくつかの論理群が現在更新を受けている、マルチストリーム更新において使用されるスクラッチパッドブロックを概略的に示す。例えば、更新中のｋ個の論理群がある場合には、ｋ個の更新ブロック２０−１，…，２０−ｋを使用してｋ個の更新ストリームがあることになる。更新ブロック内の部分ページを回避するために、スクラッチパッドブロック３０を他のストリーム（ストリーム０）において使用して、ｋ個の更新ブロックに対するｋ個の対応する部分ページにおけるデータをバッファリングする。よって、オープンなｋ＋１個のブロックがあることとなり、ｋ個の部分ページは、ｋ個の更新ブロック内の論理ユニットのｋ個の論理群の現在の更新を扱っている。図に示されている例は、スクラッチパッドブロック内の更新ブロック毎に１つの有効ページがあるという好ましい実施形態に関する。
【０１３６】
更新およびスクラッチパッドブロック内で分散された有効セクタによって、電源サイクルの場合のセクタの最新書き込みバージョンを識別する際に問題が生じる場合がある。なぜならば、同一の論理セクタの互いに異なるコピーが更新およびスクラッチパッドブロックの両方に見受けられるからである。電源リセット後の更新ブロックに対するメモリ走査により、論理セクタの複数のバージョン（あれば）の優先順位が確立される。なぜならば、更新ブロックの位置は、明確な順序で一杯になるからである。同様に、スクラッチパッドブロックを走査して、論理セクタの最終書き込みバージョンを識別できる。しかし、スクラッチパッドブロック内の最新バージョンと、更新ブロック内の最新バージョンとがある場合には、どちらがより新しいかは容易には判断されない。例えば、図２７Ａにおいて、セクタＬＳ８〜ＬＳ１０は、両方のストリームにおいて見受けられる。図２７Ａ上のようなデータの同一のパターンは、書き込みＬＳ８’〜ＬＳ１０’，書き込みＬＳ８’’〜ＬＳ１０’’，書き込みＬＳ８’’’〜ＬＳ１０’’’，書き込みＬＳ４’〜ＬＳ７’という互いに異なるコマンドシーケンスによって作成可能である。この場合、有効セクタは、スクラッチパッドブロックというよりもむしろ更新ブロック内にあることになる。
【０１３７】
本発明の他の態様によれば、複数のメモリブロック内に存在するであろうデータの最新書き込みバージョンを識別することができる同期情報を有する不揮発性メモリへ更新データを書き込む方法が提供される。
【０１３８】
図３０は、入力データのシーケンスをあるブロックに書き込む従来の場合を示す。不揮発性メモリブロック２２は、明確な順序で一杯になるように編成される。上から一杯になるように概略的に示す。よって、データ「Ａ」、「Ｂ」、「Ｃ」、「Ａ’」のセグメントの連続書き込みが、ブロック内で連続して置かれる。このように、例えば「Ａ’」が「Ａ」の他のバージョンである場合には、ブロック２２内にその記録された位置から、「Ａ」に取って代わる後続のバージョンであることが判断できる。以下の実施形態は、ある限定的なストリームの更新時にストリームがどのくらい一杯になったかについての情報を記憶する概略的な考え方の、有効ではあるが特別な場合である。
【０１３９】
図３１Ａは、本発明の好ましい実施形態に係る、異なる書き込みが２つのブロックに対してインターリーブされている場合であっても記録順序または優先順位を追跡する他の手法を示す。例えば、データセグメント「Ａ」、「Ｂ」、「Ｃ」、「Ａ’」などの各書き込みは、１つ以上の所定の条件によって、第１のブロック（例えば、ブロック２２）または第２のブロック（例えば、ブロック３２）に記録することができる。この例において、「Ａ」は、第２のブロック３２に対する第１の書き込みに記録される。これに続いて、「Ｂ」が第１のブロック２２に記録される第２の書き込みが生じ、「Ｃ」が第２のブロック３２に記憶される第３の書き込みが生じ、そして最後に「Ａ’」が第１のブロック２２に記録される第４の書き込みが生じる。
【０１４０】
図に示されているように、ストリーム０は、第２のブロック３２に対するデータ記録のストリームであり、ストリーム１は、第１のブロック２２に対するデータ記録のストリームである。２つ以上のストリームにおける同一の論理データのインターリーブされた更新の場合、更新の優先順位を追跡することが重要であり、それによって、最新の記録されたデータの位置が定義される。好ましい一実施形態において、これは、少なくとも所定のストリームが記録される度に、優先順位情報を保存することによって達成される。
【０１４１】
優先順位情報は、ストリーム０内の後者がブロック３２に記録される度に、書き込みデータと共に保存されている。好ましい実施形態において、優先順位情報は、第１のブロック２２内の次の空の位置（すなわち、次の記録位置のアドレス）をポイントする書き込みポインタ４０である。書き込みポインタは、ストリーム０に記憶されているデータと共に保存される。
【０１４２】
よって、書き込み「Ａ」動作では、ブロック２２内の次の空の位置をポイントするポインタＰA ４０−Ａが、ストリーム０内のブロック３２に「Ａ」と共に保存される。書き込み「Ｂ」動作では、書き込みはストリーム１内のブロック２２に対してなので、ポインタは保存されない。書き込み「Ｃ」動作では、ポインタＰC ４０−Ｃが、ストリーム０内のブロック３２に「Ｃ」とともに保存される。ブロック２２に対する書き込み「Ａ」において、ストリーム１に保存されるポインタはない。
【０１４３】
書き込み「Ａ」の終了時に、電源遮断後にメモリがリセットされると、コントローラＲＡＭ内のインデックスが失われ、メモリを走査することによって再構築しなければならない。逆方向に走査することによって、ブロック２２および３２の各々は、データ「Ａ」の最終書き込みバージョンを探し当てたことになる。書き込みポインタ４０は、２つのブロック間のまさしく最終バージョンを決定するために使用可能である。例えば、ポインタＰC は、「Ａ’」の記録の前のブロック２２における位置をポイントしている。よって、「Ａ’」は、「Ｃ」の後に記録される。また、「Ｃ」は「Ａ」の後の位置のブロック３２内に記録されるので、「Ａ’」は「Ａ」の後続バージョンであると結論付けることができる。
【０１４４】
ＵＢ毎にＳＰＢにおける１つより多い有効ページがある他の実施形態において、最新の書き込みデータを検出するために、１つより多い書き込みポインタを分析する必要があることになる。
【０１４５】
図３１Ｂは、書き込みが２つのブロックに対して記録される場合に記録順序を追跡する他の実施形態を示す。この実施形態は、図３１Ａに示されているものと同様であるが、書き込みポインタがブロック３２内の次の空の位置をポイントし、ブロック２２に保存される点が異なる。ストリーム０は、第２のブロック（例えば、ブロック３２）に記録されている一方で、ストリーム１は、第１のブロック（例えば、ブロック２２）に記録されている。ストリーム１が第１のブロックに記録される度に、第２のブロック２２における次の記録位置のアドレスを与える第２のブロック書き込みポインタ４０’が、それと共に保存されている。この例において、ポインタＰ’B ４０’−Ｂは、「Ｂ」と共に記録されている。同様に、ポインタＰ’A'４０’−Ａ’は、ストリーム１のブロック２２に「Ａ’」と共に記録されている。
【０１４６】
図３２Ａは、発明の一般的な実施形態に係る、２つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【０１４７】
ステップ１００：それぞれ連続的にデータを記録するための第１および第２の不揮発性記憶装置を提供する。
【０１４８】
ステップ１０２：第１または第２の記憶装置のいずれかを優先順位情報のための記憶装置として指定し、優先順位情報は、第１の記憶装置内の第１のデータユニットが第２の記憶装置内の第２のデータの前または後に記録されたかどうかを判断するために使用される。
【０１４９】
ステップ１１０：入力データを受信する。
【０１５０】
ステップ１２０：受信された入力データを第１の記憶装置に記録するための所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ１３０’へ進み、そうでなければステップ１４０’へ進む。
【０１５１】
ステップ１３０：受信された入力データを第１の記憶装置に記録する。同時に、第１の記憶装置が指定された記憶装置である場合は、優先順位情報を第１の記憶装置に追加的に記録する。ステップ１５０へ進む。
【０１５２】
ステップ１４０：受信された入力データを第２の記憶装置に記録する。同時に、第２の記憶装置が指定された記憶装置である場合は、優先順位情報を第２の記憶装置に追加的に記録する。ステップ１５０へ進む。
【０１５３】
ステップ１５０：受信すべき入力データがもうなければ、ステップ１１０へ進み、そうでなければ処理を終了する。
【０１５４】
好ましい一実施形態において、優先順位情報は、次の記録が指定されていない記憶装置内で生じる位置のアドレスである書き込みポインタである。
【０１５５】
図３２Ｂは、書き込みポインタを使用する一実施形態に係る、２つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【０１５６】
ステップ１００’：それぞれ連続的にデータを記録するための第１および第２の不揮発性記憶装置を提供する。
【０１５７】
ステップ１１０’：入力データを受信する。
【０１５８】
ステップ１２０’：受信された入力データを第１の記憶装置に記録するための所定の条件が満たされたかどうかを判断する。満たされていれば、ステップ１３０’へ進み、そうでなければステップ１４０’へ進む。
【０１５９】
ステップ１３０’：第２の記憶装置において次の記録が生じるであろう位置のアドレスを取得する。
【０１６０】
ステップ１３２’：当該アドレスを受信された入力データと共に第１の記憶装置に記録する。ステップ１５０’へ進む。
【０１６１】
ステップ１４０’：受信された入力データを第２の記憶装置に記録する。ステップ１５０’へ進む。
【０１６２】
ステップ１５０’：受信すべき入力データがもうなければ、ステップ１１０へ進み、そうでなければ処理を終了する。
【０１６３】
本発明は、メモリユニットの消去可能なブロックに編成される不揮発性メモリに対して特に適用可能であり、各メモリユニットは、データの論理ユニットを記録するためのものであり、各ブロックも、１つ以上のページに編成される。さらに、各ページは、複数の論理ユニットで消去後に一度プログラム可能であり、各論理ユニットは、所定のページオフセットを有して所定の順序となっている。この方法は、基本的には、論理ユニット群の更新データを記憶しまたはバッファリングするための２つのブロック（例えば、更新ブロックとスクラッチパッドブロック）を提供し、論理ユニットの最新の書き込みバージョンが第１または第２のブロックにあるかどうかを識別する助けとなるための同期情報を維持する。図２９に関して、複数のストリームがある場合には、図３１Ａに示されている実施形態が好ましい。なぜならば、ＳＰＢ内の１箇所にすべての書き込みポインタが記憶されればより好都合だからである。
【０１６４】
更新ブロック書き込みポインタの実施形態
好ましい一実施形態によれば、書き込みポインタという形態の同期情報は、スクラッチパッドブロックにバッファリングされている度に、ホストデータと共に保存される。書き込みポインタは、書き込みポインタがスクラッチパッドブロックに保存されているときに、更新ブロック内の次の書き込みのための位置のアドレスを与える、更新ブロック書き込みポインタである。特に、これは、ホストデータを記憶するためにいずれにしても使用されないスクラッチパッドブロックの部分に保存される。好ましくは、更新ブロック書き込みポインタは、スクラッチパッドブロックの部分ページに記憶されたインデックスＳＰＢＩ／ＣＢＩに含まれる。更新ブロック書き込みポインタにより、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができる。
【０１６５】
電源リセットがある場合で、当該論理セクタの２つのバージョンが２つのブロック内に見出される場合には、書き込みポインタは、どちらのバージョンが最新かを判断することができることになる。例えば、ポイントされた位置の後に更新ブロック内の論理セクタが記録されていれば、ＳＰＢ内の部分ページ内のバージョンに取って代わるものとなる。その一方で、論理セクタが更新ブロックに見出されないか、または前の位置に記録されていた場合には、スクラッチパッドブロックの部分ページにバッファリングされたバージョンがまだ有効であるという結論となることになる。
【０１６６】
図３３Ａは、第１のシーケンスに係る２つのホスト書き込み＃１および＃２の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。第１のシーケンスは、書き込みＬＳ１０’に対するホスト書き込み＃１と、書き込みＬＳ１０’’およびＬＳ１１’に対するホスト書き込み＃２とについてである。
【０１６７】
ホスト書き込み＃１では、コマンドは、ＬＳ１０’を書き込むことである。ＬＳ１０’はページ境界にないので、ＬＳ８およびＬＳ９で前パディングされたスクラッチパッドブロック３０内の部分ページＰＰ０に記録され、現在のインデックスＳＰＢＩ／ＣＢＩ1 で終端される。部分ページＰＰ０が書き込まれると、書き込みポインタ４０が、現在のインデックスＳＰＢＩ／ＣＢＩ1 ５０に含まれ、最終スロットに保存される。書き込みポインタ４０は、更新ブロック２０内の最初の空ページＰ０をポイントする。
【０１６８】
ホスト書き込み＃２では、コマンドは、ＬＳ１０’’およびＬＳ１１を書き込むことである。ＬＳ１１’はページエンドにあるので、更新ブロック２０におけるＰ０の最終スロット（スロット４）に直接書き込まれる。同時に、スロット３にはＬＳ１０’が書き込まれ、スロット１および２は、ＬＳ８およびＬＳ９でそれぞれパディングされる。
【０１６９】
今、メモリが電源遮断を受けてＲＡＭ内に保持されたインデックス付け情報が失われた場合には、物理メモリの逆方向の走査により、インデックス付け情報の再構築が試みられることになる。更新ブロックおよびスクラッチパッドブロック（ＳＰＢ）の両方がＬＳ１０の最新バージョン、すなわち、ＬＳ１０’およびＬＳ１０’’を生じさせることになることがわかる。しかし、ＬＳ１０’’は書き込みポインタがＳＰＢのＰＰ０に記録された後に記録されるので、ＬＳ１０’よりも遅いバージョンであると結論付けることができる。
【０１７０】
図３３Ｂは、図３３Ａに示されている第１のシーケンスの逆である第２のシーケンスに係る２つのホスト書き込み＃１および＃２の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。逆のシーケンスは、ＬＳ１０’およびＬＳ１１’を書き込むためのホスト書き込み＃１と、ＬＳ１０’’を書き込むためのホスト書き込み＃２とについてである。
【０１７１】
ホスト書き込み＃１では、コマンドは、ＬＳ１０’およびＬＳ１１’を書き込むことである。ＬＳ１１’はページエンドにあるので、更新ブロック２０内のＰ０の最終スロット（スロット４）に直接書き込まれる。同時に、スロット３にはＬＳ１０’が書き込まれ、スロット１および２は、ＬＳ８およびＬＳ９でそれぞれパディングされる。
【０１７２】
ホスト書き込み＃１に続くホスト書き込み＃２では、コマンドは、ＬＳ１０’’を書き込むことである。ＬＳ１０’’はページ境界にないので、ＬＳ８およびＬＳ９で前パディングされたスクラッチパッドブロック３０内の部分ページＰＰ０に記録され、現在のインデックスＳＰＢＩ／ＣＢＩ2 で終端される。部分ページＰＰ０が書き込まれると、書き込みポインタ４０が、現在のインデックスＳＰＢＩ／ＣＢＩ2 ５０に含まれ、最終スロットに保存される。書き込みポインタ４０は、更新ブロック２０内の次の空ページＰ１をポイントする。
【０１７３】
この場合、電源リセット後、例えば更新ブロック内の論理セクタＬＳ１０’が、更新ブロック２０内のポイントされた位置の前に記録されていることがわかる。そして、更新ブロック２０内のＬＳ１０’の最新バージョンは、スクラッチパッドブロック３０の部分ページ内にある他のバージョンＬＳ１０’’によって取って代わられるという結論を出すことができる。
【０１７４】
図３４Ａは、スクラッチパッドブロックインデックス（ＳＰＢＩ）の好ましい一データ構成を示す。ＳＰＢＩ情報は、ｋ個の更新ブロックの各々についての後続のフィールドを含む。これは、論理群／ＵＢ毎に１つの有効ページを有するＳＰＢの特別な場合である。
【０１７５】
論理群番号は、所定のストリーム内の更新中の論理群を識別する。好ましくは、ゼロ値「ＦＦＦＦ」が、空の更新ブロックか、または有効なスクラッチパッドデータがない更新ブロックに記憶される。
【０１７６】
ページ開始セクタは、スクラッチパッドブロックに書き込まれた部分ページの最初の論理セクタである。
【０１７７】
セクタラン長は、スクラッチパッドページへ書き込まれた部分ページの有効セクタの数である。
【０１７８】
有効ページ番号は、スクラッチパッドブロックに書き込まれた唯一有効（唯一有効）部分ページを識別する。これが、スクラッチパッドブロックに最後に書き込まれた部分ページとなる。代わりに、アドレス指定は、セクタオフセットを使用して実現することもでき、更新ブロックに対する部分ページの第１の有効セクタをポイントする。セクタオフセットは、ブロックの最初に対してカウントされる。好ましい実施形態において、１つの物理ページのみが、所定の更新ブロックについての有効データを含む。スクラッチパッドブロックに書き込まれなかったセクタに関しては、ＦＦＦＦが記憶される。
【０１７９】
更新ブロック書き込みポインタ４０は、スクラッチパッドが最後に書き込まれた場合に、対応する更新ブロックの最初の書き込まれていないセクタ位置のセクタアドレスである。このセクタ位置から更新ブロックに書き込まれたセクタはどれでも、スクラッチパッドブロックに書き込まれたセクタの代わりとなることになる。
【０１８０】
図３４Ｂは、図３３Ａに示されているホスト書き込み＃１についてのスクラッチパッドブロックインデックス内の値の例を示す。この例において、論理群番号は、「１」であり、論理セクタＬＳ０からＬＳＮ−１を含む。ストリーム１において、添付の更新ブロックおよびスクラッチパッドブロックで更新中である。部分ページはＰＰ０であり、ＬＳ８または「８」で始まり、「３」のランを有し、ＬＳ１０’で終了する。有効部分ページ番号は「０」である。最後に、書き込みポインタは、更新ブロック内の次の書き込み位置をポイントし、「０」のセクタオフセットを有する。
【０１８１】
更新されたインデックスがスクラッチパッドブロックに記録されるのみの場合であって、更新ブロックに直接データが書き込まれるときはいつもスクラッチパッドブロックは書き込まれることはない場合には、そのような状況下でインデックスが無効となるのは明らかである。
【０１８２】
一般的に、全ＳＰＢインデックス情報は、ＣＢＩインデックス情報と共に、常にコントローラＳＲＡＭ内のデータ構成に保持される。ＳＰＢ内の有効セクタは、セクタレベルのインデックス情報に基づいてアクセスされる。好ましい実施形態において、ＳＰＢＩ／ＣＢＩインデックスは、スクラッチパッドブロック内の不揮発性メモリに記憶される。特に、スクラッチパッドブロック（ＳＰＢ）に部分ページが書き込まれる度に、最新のＳＰＢＩ／ＣＢＩが部分ページの最終セクタに記憶される。
【０１８３】
ＳＰＢは、更新ブロックの所定の数（例えば、８）までをサポートする。ＳＰＢブロック内の部分ページデータは、ホストがページの最終セクタを書き込むと、関連する更新ブロックに統合される。所定の場合における論理群についてのＳＰＢ内の１つより多い部分ページ内にデータが存在することがあるが、最終書き込み部分ページについてのデータだけが有効である。同様に、ＳＰＢＩ／ＣＢＩセクタの複数のコピーがＳＰＢ毎に存在することがあるが、最終書き込みコピーのみが有効である。セクタをＳＰＢに書き込む必要があるがＳＰＢが一杯の場合には、ブロックをまず新しいＳＰＢブロックにコピーして、古いＳＰＢを消去し、その後にセクタを新しいＳＰＢに書き込む。ＳＰＢの書き込みは、連続更新ブロックがカオス的になったという理由で、または以前スクラッチパッドブロックを含んだ更新ブロックが閉じられたという理由で、ＳＰＢＩ／ＣＢＩが更新される必要がある場合にも行われる。
【０１８４】
好ましい実施形態において、スクラッチパッドブロック（ＳＰＢ）の書き込みは、一度に１ページ行われる。ストリーム／論理群／更新ブロック毎のページ数も１つに制限されているので、最新のＳＰＢＩのみが必要である。なぜならば、有効なコピーがＵＢにあるのか、またはＳＰＢにあるのかについて問題となるであろう１つの論理ページのみが存在するからである。同様に、ＳＰＢ内のＵＢ毎のページ数が１つ以上の場合、古いＳＰＢＩも分析する必要があることになる。
【０１８５】
前述した実施形態は、更新ブロック書き込みポインタを、ＳＰＢＩ／ＣＢＩセクタの一部として、スクラッチパッドブロックの最新の部分ページに記憶する。複数のブロック内に存在しうる複数のバージョンから論理セクタの有効バージョンを識別するための代替の実施形態が可能である。また、スクラッチパッドブロック内のストリーム毎に１つより多くのページを有するか、または論理群毎に１つより多くの更新ブロックまたはストリームを有することも可能である。
【０１８６】
スクラッチパッドブロック書き込みポインタの実施形態
本発明の他の実施形態によれば、同期情報は、スクラッチパッドブロックにバッファリングされた所定の論理セクタが更新ブロックに対する後続の書き込みによって古いものとなってしまったかどうかを判断することができるように維持される。これは、同期情報が更新ブロックのページに記憶されるときに、スクラッチパッドブロック内の次の書き込みについての位置のアドレスを与えるスクラッチパッド書き込みポインタを含むことによって達成される。
【０１８７】
図３５Ａおよび図３５Ｂは、図３３Ａおよび図３３Ｂの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッドブロック書き込みポインタに対する更新ブロックの中間状態をそれぞれ示す。
【０１８８】
図３５Ａは、ホスト書き込み＃１後のスクラッチパッドブロックおよび更新ブロックの状態を示す。ホスト書き込み＃１では、論理セクタＬＳ１０’は、ページのスロット３に属し、ページ境界にはないので、スクラッチパッドブロック３０内の部分ページＰＰ０に記録される。オプションとして、ＬＳ８およびＬＳ９で前パディングされて、現在のＳＰＢＩ／ＣＢＩ1 で終端される。電源遮断後にメモリが再開された場合には、論理セクタＬＳ１０’の有効バージョンは、最終のＳＰＢＩ／ＣＢＩ1 インデックスによって正しく探し当てられることになる。これが正しいのは、更新ブロック２０に対して何も書き込まれていないからである。
【０１８９】
図３５Ｂは、ホスト書き込み＃１に続くホスト書き込み＃２を示し、コマンドは、ＬＳ１１’を書き込むことである。ＬＳ１１’はページ境界（スロット４）に当たるので、一杯のページＰ０の第４スロットに記録され、ＬＳ８，ＬＳ９，ＬＳ１０で前パディングされる。同期情報は、ＳＰＢ３０における次の空位置をポイントするＳＰＢ書き込みポインタ４０’の形態を取る。前の実施形態と異なり、ＳＰＢ書き込みポインタ４０’は、ＳＰＢ３０内のＳＰＢＩ／ＣＢＩインデックスに含まれない。代わりに、更新ブロック２０に現在記録されているページ内のセクタのヘッダ部分に記憶される。電源遮断後にメモリが再開された場合には、論理セクタＬＳ１０’の有効バージョンは、更新ブロック２０内で正しく探し当てられることになる。なぜならば、ＳＰＢにおけるＬＳ１０のバージョンは、ＳＰＢ書き込みポインタ４０’によってポイントされた位置の前に記録されているからである。
【０１９０】
図３６は、更新ブロックに記録されているセクタのオーバーヘッド部分に記憶されているスクラッチパッド書き込みポインタを示す。スクラッチパッド書き込みポインタ４０’は、更新ブロックに現在記録されているページ内のセクタのうちの少なくとも１つに保存されている。好ましい実施形態において、書き込まれているページ内のセクタのうちの少なくとも１つのオーバーヘッド部分に保存される。
【０１９１】
タイムスタンプの実施形態
さらに他の実施形態において、同期情報は、最新バージョンを正確に見つけることができるように、複数のストリームに対して書き込まれたデータセクタのタイムスタンプとして符号化することができる。
【０１９２】
図３７は、２つの更新ストリーム間の記録シーケンスを追跡するためのタイムスタンプの使用を示す。前述したように、更新データの各セグメントは、第１のブロック（ストリーム１）または第２のブロック（ストリーム２）のいずれかに記録することができる。この例は、時間Ｔ１において「Ａ」が第１のブロックに記録され、時間Ｔ２において「Ｂ」が第２のブロックに記録され、時間Ｔ３において「Ｃ」が第１のブロックに記録され、時間Ｔ４において「Ａ’」が第２のブロックに記録されている。
【０１９３】
新しいデータの更新部分毎に少なくとも１つのタイムスタンプが記憶される。よって、「Ａ」はタイムスタンプＴＳ１を有し、「Ｂ」はタイムスタンプＴＳ２を有し、「Ｃ」はタイムスタンプＴＳ３を有し、「Ａ’」はタイムスタンプＴＳ４を有する。よって、例えば、「Ａ’」は、遅いタイムスタンプを有しているので、「Ａ」の後続バージョンである。好ましい実施形態において、タイムスタンプ情報は、書き込まれているページ内のセクタのうちの少なくとも１つのオーバーヘッド部分に記憶される。
【０１９４】
マルチセクタページを有するブロックのマルチストリーム更新
本発明の他の態様によれば、不揮発性メモリを更新する方法は、更新データを記録するための第１のブロック（更新ブロック）と、更新ブロックに対する記録の前に更新データのうちのいくつかを一時的に保存するための第２のブロック（スクラッチパッドブロック）とを使用することを含む。不揮発性メモリは、メモリユニットの消去可能なブロックに編成され、各メモリユニットは、データの論理ユニットを記憶するためのものであり、また、各ブロックは、１つ以上のページに編成され、各ページは、明確なページオフセットを有する複数の論理ユニットを記憶でき、消去後に共に一度プログラム可能である。この方法は、ホストから論理ユニットを受信することと、所定の条件が満たされる場合に受信された論理ユニットがページエンドオフセットを有するように、ページ毎に受信された論理ユニットを整列させることと、受信された論理ユニットと任意の先行する論理ユニットとを適切なページ整列で更新ブロック内のページに記憶することと、そうでなければ、スクラッチパッドブロック内の部分ページに残りの受信された論理ユニットを一時的に記憶することとをさらに含む。スクラッチパッドブロック内の論理ユニットは、所定の条件を満たす場合には、最終的には更新ブロックへ転送される。
【０１９５】
好ましい一実施形態において、更新データは、ページ毎に受信および解析されて、第１のブロック（例えば、更新ブロック）へ転送される。バッファリングされたデータの残りの部分ページは、第２のブロック（例えば、スクラッチパッドブロック）へ転送されて、データの完全ページが第１のブロックへ記録するのに利用可能になるまで、そこにとどまることになる。バッファリングされたデータが第２のブロックへ転送されると、記録されたページが受信データで部分的に一杯になるだけであっても、ページ毎に記録される。部分ページ内の通常使用されない予備の空間を使用して、第２および第１のブロック内のデータを探し当てるためのインデックスを記憶してもよい。
【０１９６】
図３８は、本発明の一般的な一実施形態に係る、それぞれ複数のセクタページを有する２つのメモリブロックに対して同時に更新データを記録しかつインデックス付けするための方法を示すフローチャートである。
【０１９７】
ステップ２００：不揮発性メモリをそれぞれデータの論理ユニットを記憶するためのメモリユニットの消去可能なブロックに編成し、また、各ブロックを１つ以上のページに編成し、各ページが複数のメモリユニットを含み、かつ消去後に共に一度プログラム可能である。
【０１９８】
ステップ２１０：データの論理ユニットの更新バージョンを完全ページ毎に記録するための第１のブロックを提供する。
【０１９９】
ステップ２２０：ホストから受信されたデータの論理ユニットの更新バージョンをバッファリングするための第２のブロックを提供する。
【０２００】
ステップ２３２：論理ユニット内のデータをホストから受信する。
【０２０１】
ステップ２３４：ページエンドオフセットを有する論理ユニットを探し当てることによって、受信された論理ユニットをページ毎に解析する。
【０２０２】
ステップ２３６：ページエンドオフセットを有する各論理ユニットを第１のブロック内の新しいページに記録する一方で、当該新しいページを先行する論理ユニットの最新バージョンで埋め、第２のブロック内の部分ページに残りの受信された論理ユニットを記録する。
【０２０３】
図３９は、スクラッチパッドブロックおよび更新ブロックを使用する図３７の方法のより特定的な実施例を示すフローチャートである。
【０２０４】
ステップ３１０：完全ページ毎に論理ユニットの更新バージョンを記録するための更新ブロック（ＵＢ）を提供し、各論理ユニットは、所定の順序に従って所定のページオフセットを有する。
【０２０５】
ステップ３２２：当該更新をページ毎に一時的にバッファリングするためのスクラッチパッドブロック（ＳＰＢ）を提供する。
【０２０６】
ステップ３２４：ＳＰＢ内の有効（最新バージョン）データを探し当てるためのＳＰＢインデックスを提供する。
【０２０７】
ステップ３３２：論理ユニット毎に現在の書き込み要求のデータを受信する。
【０２０８】
ステップ３３４：現在の論理ユニットがページエンドにおけるオフセットである場合、ステップ３４０へ進み、そうでなければステップ３３６へ進む。
【０２０９】
ステップ３３６：受信すべきさらなるデータを書き込み要求が有する場合、ステップ３３２へ進み、そうでなければステップ３５０へ進む。
【０２１０】
ステップ３４０：ＵＢの新しいページをページエンドにおける現在の論理ユニットと共に記録して、所定の順序に従って残りのページを有効（最新バージョン）論理ユニットで埋める。ステップ３３６へ進む。
【０２１１】
ステップ３５０：すべての受信されたデータが記録されている場合、ステップ１８０へ進み、そうでなければステップ３６０へ進む。
【０２１２】
ステップ３６０：未記録の受信されたデータがＳＰＢ内の既存の有効（最新バージョン）データと同一のページに属していない場合、ステップ３７０へ進み、そうでなければステップ３６２へ進む。
【０２１３】
ステップ３６２：ＳＰＢインデックスを更新する。
【０２１４】
ステップ３６４：未記録の受信されたデータおよびページオフセットにおける既存の有効データをＳＰＢの新しいページに記録して、ＳＰＢインデックスで終端する。ステップ３８０へ進む。
【０２１５】
ステップ３７０：既存の有効データをＳＰＢの現在のページからＵＢの新しいページへ統合により再配置する。
【０２１６】
ステップ３７２：ＳＰＢインデックスを更新する。
【０２１７】
ステップ３７４：ページオフセットにおける未記録の受信されたデータをＳＰＢの新しいページに書き込み、ＳＰＢインデックスで終端する。
【０２１８】
ステップ３８０：現在の書き込み要求を終了する。
【０２１９】
ＳＰＢは、更新ブロックの所定の数（例えば、８）までをサポートする。ＳＰＢブロック内の部分ページデータは、ホストがページの最終セクタを書き込むと、関連する更新ブロックに統合される。所定の場合における論理群についてのＳＰＢ内の１つより多い部分ページ内にデータが存在することがあるが、好ましい実施形態において、最終書き込み部分ページについてのデータだけが有効である。同様に、ＳＰＢＩ／ＣＢＩセクタの複数のコピーがＳＰＢ毎に存在することがあるが、最終書き込みコピーのみが有効である。同様の考慮により、ＳＰＢ内のＵＢ毎の有効ページの数が１つに限定されている場合には、最終書き込みポインタのみが必要である。セクタをＳＰＢに書き込む必要があるがＳＰＢが一杯の場合には、ブロックをまず新しいＳＰＢブロックにコピーして、古いＳＰＢを消去し、その後にセクタを新しいＳＰＢに書き込む。ＳＰＢの書き込みは、連続更新ブロックがカオス的になったという理由で、または以前スクラッチパッドブロックを含んだ更新ブロックが閉じられたという理由で、ＳＰＢＩ／ＣＢＩが更新される必要がある場合にも行われる。
【０２２０】
一般的に、前述したように、更新ブロック毎に１つより多くのＳＰＢ部分ページを使用して、有効データを記憶する。このように、次のホストがページの外部にセクタを書き込む場合には、部分ページを統合して新しいものに道を譲る必要はない。
【０２２１】
マルチストリーム更新手法により、更新ブロックのより効率的な使用が可能となる。これは、特に、一度書き込み可能なマルチセクタページを伴うブロックに当てはまる。この手法は、費やす記憶装置は少なく、更新ブロック内で必要なパディングも少ない。さらに重要なのは、更新ブロックにおける更新セクタの連続順序が、一連の連続した論理セクタの別個のホスト書き込み中に保持されることである。
【０２２２】
予測パイプライン化された動作を伴うマルチストリーム更新
前述したマルチストリーム更新手法において、ホスト書き込みがある度に、受信されたホストデータを更新ブロックまたはスクラッチパッドブロックのいずれかに記録するかに関する決断を行わなければならなかった。ホストからのデータユニットは、受信されながら、エンドページオフセットを有するものが受信されるまで１つずつ監視される。この点で、完全ページを書き込むための所定の条件が確認されるが、前パディングを伴ってもよい。
【０２２３】
更新ブロックを書き込むために、書き込むべきページがプログラミングのために設定される必要がある。これには、ページをアドレス指定することと、その後、ページについてのデータをデータラッチへロードすることとが含まれる。
【０２２４】
好ましい一実施形態によれば、予測パイプライン化された動作が実施される。この動作において、更新ブロックを記録するための所定の条件を確認するまで待機するのではなく、書き込まれることになっているデータユニットによって所定の条件が満たされる可能性があることをホスト書き込みコマンドが示すとすぐに、更新ブロックが書き込まれるように設定される。このように、当該設定は、ホストからデータユニットが来るのを待つ間にジャンプスタートが可能である。最終的に受信された実際のデータユニットが所定の条件を本当に満たしたときに、設定を待つ必要なく、ただちに更新ブロック内のページのプログラミングが生じることができ、これにより、書き込み性能が向上する。ホスト書き込みが中断されて受信された実際のデータユニットがもはや所定の条件を満たさない場合には、更新ブロックへの記録のための設定は廃棄され、代わりに、データユニットは、スクラッチパッドブロックに記録されることになる。
【０２２５】
図４０Ａは、本発明が実施される場合を提供する、読み出し／書き込み回路のバンクを有するメモリ装置を概略的に示す。メモリ装置は、メモリセル４００の２次元アレイと、制御回路４１０と、読み出し／書き込み回路４７０とを含む。メモリアレイ４００は、行デコーダ４３０を介してワード線により、列デコーダ４６０を介してビット線により、アドレス指定可能である。読み出し／書き込み回路４７０は、センスモジュール４８０（図示せず）のバンクとして実施され、これにより、メモリセル群（「ページ」とも称される）を並列的に読み出しまたはプログラムすることが可能である。並列的に動作するｐ個のセンスモジュール４８０のバンク全体により、行に沿ったｐ個のセルのページを並列的に読み出しまたはプログラムすることが可能である。メモリアレイの一例は、ｐ＝５１２バイト（５１２×８ビット）を有してもよい。好ましい実施形態において、ブロックは、セルの全行のランである。他の実施形態において、ブロックは、行のセルのサブセットである。例えば、セルのサブセットは、全行の２分の１または全行の４分の１であってもよい。セルのサブセットは、連続セルまたは１つおきのセル、または所定数毎のセルのランであってもよい。よって、好ましい一実施形態において、ページは、メモリセルの連続行から構成されている。他の実施形態において、メモリセルの行は、複数のページに分割され、読み出し／書き込み回路４７０を個々のページに多重化するために、ページマルチプレクサ３５０が提供される。
【０２２６】
制御回路４１０は、読み出し／書き込み回路４７０と協働して、メモリアレイ４００上でメモリ動作を行う。制御回路４１０は、状態マシン４１２と、オンチップアドレスデコーダ４１４と、電源制御モジュール４１６とを含む。状態マシン４１２は、メモリ動作のチップレベルの制御を提供する。オンチップアドレスデコーダ４１４は、ホストまたはメモリコントローラによって使用されるものと、デコーダ３３０および３７０によって使用されるハードウェアアドレスとの間のアドレスインターフェイスを提供する。電源制御モジュール４１６は、メモリ動作中にワード線およびビット線に対して供給される電力および電圧を制御する。
【０２２７】
図４０Ｂは、図４０Ａに示されているメモリ装置の好ましい配列を示す。様々な周辺回路によるメモリアレイ４００に対するアクセスは、各側のアクセス線および回路が半分に削減されるように、アレイの反対側同士において対称的なやり方で実施される。よって、行デコーダは、行デコーダ４３０Ａおよび４３０Ｂに分割され、列デコーダは、列デコーダ４６０Ａおよび４６０Ｂに分割される。メモリセルの行は複数のブロックに分割される実施形態において、ページマルチプレクサ４５０は、ページマルチプレクサ４５０Ａおよび４５０Ｂに分割される。同様に、読み出し／書き込み回路は、アレイ４００の下部からビット線に接続する読み出し／書き込み回路４７０Ａと、アレイ４００の上部からビット線に接続する読み出し／書き込み回路４７０Ｂに分割される。このように、読み出し／書き込みモジュールの密度、したがってセンスモジュール４８０のバンクの密度は、基本的に２分の１に減少する。アレイの上部に位置する読み出し／書き込みモジュールに向けられたデータは、上部の入出力を介して転送されることになる。同様に、アレイの下部に位置する読み出し／書き込みモジュールに向けられたデータは、下部の入出力を介して転送されることになる。
【０２２８】
図４１は、図４０Ａに示されているセンスモジュールをより詳細に示す。各センスモジュール４８０は、基本的には、メモリセルの導電状態を検知するためのセンス増幅器４８２と、検知されたデータまたはプログラムすべきデータを記憶するためのデータラッチ４８４のセットと、外部と通信するための入出力回路４８６とを含む。好ましいセンス増幅器が、米国公開特許出願第２００４／０１０９３５７号（特許文献２３）に開示されている。この特許出願は、その全体が本願明細書において参照により援用されている。
【０２２９】
プログラミング動作中に、まず、選択されたワード線およびビット線がアドレス指定される。これに続いて、プログラムされるべきデータを入出力ポートを介してそれぞれのデータラッチへ転送する。その後、プログラミング電圧をワード線に印加することによってプログラミングが開始する前に、ビット線がプレチャージされる。プログラミング電圧の実際の印加に先立つステップは、プログラム設定とみなすことができる。ページサイズがかなり大きい場合には、プログラムデータをデータラッチへ転送するのに必要な時間がかかる。
【０２３０】
ホスト書き込み中に、ホストは、まず、書き込もうとするデータユニットの範囲をメモリ装置に示すホスト書き込みコマンドを送出する。その後、これに続いて、当該範囲におけるデータユニットの送信が、範囲の終端に到達するまでデータユニット毎に行われる。プロトコルによっては、当該送信は不意に中断されてもよく、残りのデータユニットが新しい書き込みコマンドにおいて送出されてもよい。
【０２３１】
書き込み性能を向上させるためには、データユニットがまだ受信中にプログラム設定処理が生じることができるようなパイプライン動作を有するのが望ましいことになる。しかし、あるデータユニットが受信されるかどうかによって、複数の記憶装置のいずれかにデータユニットが記録されるであろうマルチストリーム手法において、所定の記憶装置に対して記録するためのアドレス指定は、あるデータユニットが中断なく実際に受信されるまでは確実でないことになる。
【０２３２】
この問題を克服するために、予測パイプライニング手法が使用される。所定の記憶装置に対する記録を生じさせるようなあるデータユニットがホスト書き込みコマンドによって指示された範囲内で見つかる場合には、所定の記憶装置が直ちに設定されてプログラミングに供されることになる。そのようなあるデータユニットが実際に受信されると、所定の記憶装置は、プログラム設定による遅延なく、データユニットをプログラムすることになる。その一方で、そのようなあるデータユニットが中断によって具体化に失敗した場合には、当該所定の記憶装置用に設定されたプログラムは廃棄され、代わりに他の記憶装置が選択されて、設定および後続のプログラミングに供されることになる。
【０２３３】
図４２は、好ましい一実施形態に係る、予測パイプライニング手法を使用するマルチストリーム更新を示すフロー図である。
【０２３４】
ステップ５００：ホストデータユニットを記録するための第１および第２の記憶装置を提供する。例えば、第１の記憶装置は、更新データを記憶する専用の消去可能なブロックであり、第２の記憶装置は、更新ブロックを通過して更新データを一時的にバッファリングするための他の消去可能なブロックであるスクラッチパッドブロックである。
【０２３５】
ステップ５１０：書き込むべきデータユニットの範囲を示すホスト書き込みコマンドを受信する。
【０２３６】
ステップ５１２：データユニットの範囲が、データユニットを第１の記憶装置に記録するための所定の条件を満たすものを含んでいる場合には、ステップ５２０へ進み、そうでない場合には、ステップ５３０へ進む。例えば、消去可能なブロックはページに編成され、各ページは、共にプログラム可能な複数のデータユニットを記憶可能である。各データユニットが所定のページオフセットを有するように、データユニットは、論理的に連続した順序でページ内に記憶される。更新ブロックに記録するための所定の条件は、完全ページが記録できる場合である。充分な条件は、エンドページオフセットを有するデータユニットが存在する場合であり、完全ページは、必要があればページ内にある任意の先行するデータを前パディングすることによって形成される。所定の条件が満たされない場合には、ホストデータは、スクラッチパッドブロックに記録されることになる。
【０２３７】
ステップ５２０：第１の記憶装置に対する記録のための準備としてアドレスを設定する。例えば、範囲がエンドページオフセットを有するデータユニットを含む場合には、完全ページが更新ブロックに記録されると推定されることになる。この場合、更新ブロック内の新しいページがアドレス指定されて記録されることになる。
【０２３８】
ステップ５２２：第１の記憶装置に対する記録のための準備として、受信されたデータをデータラッチにロードする。データユニットがホストから受信されるとすぐに、新しいページをプログラムするためにデータラッチへロードされることになる。
【０２３９】
ステップ５２４：所定の条件を満たすデータユニットが実際に受信されると、ステップ５４０へ進み、そうでなければステップ５２６へ進む。例えば、エンドページオフセットを有するデータユニットがホストから実際に受信される場合には、予測された完全ページを確実に形成することができる。
【０２４０】
ステップ５２６：第１の記憶装置に対する記録のための設定を中止する。ステップ５３０へ進む。例えば、エンドページオフセットを有する予測されたデータユニットが中断のために到着しない場合には、更新ブロックへ記録されるべき完全ページの予測はもはや真ではない。その場合に、更新ブロックのためのプログラム設定は中止されなければならなくなる。代わりに、今度はスクラッチパッドブロックがプログラム用に設定されることになる。
【０２４１】
ステップ５３０：第２の記憶装置に対する記録のための準備としてアドレスを設定する。例えば、完全ページを更新ブロックに記録するための所定の条件が満たされない場合には、ホストデータは、スクラッチパッドブロックに記録されることになる。この場合に、スクラッチパッドブロック内の新しいページが記録用にアドレス指定されることになる。
【０２４２】
ステップ５３２：第２の記憶装置に対する記録のための準備として、受信されたデータをデータラッチにロードする。データユニットがホストから受信されるとすぐに、新しいページをプログラムするためにデータラッチへロードされることになる。
【０２４３】
ステップ５４０：データラッチ内のデータをアドレス指定された記憶装置にプログラムする。例えば、更新ブロックまたはスクラッチパッドブロックに対する予測された記録が受信されたデータユニットによって確認されると、遅延なく設定ブロックをプログラムできる。
【０２４４】
ステップ５５０：現在のホスト書き込みを終了する。
【０２４５】
メモリ構造によっては、ステップ５２０および５３０は、ステップ５２２またはステップ５３２においてデータラッチのロード後にアドレスが選択されてもよいといった、異なる順序であってもよい。
【０２４６】
他の好ましい実施形態において、データが受信されるにつれて、第１または第２の記憶装置のいずれかに受信されたデータを記録するかが最初に不明な場合には、受信されたデータを第１および第２の記憶装置の両方のプログラミング回路のデータラッチにロードする。このように、データは第１または第２の記憶装置のいずれかをプログラムするためにいつでもただちに利用可能となる。特別な場合には、第１および第２の記憶装置は、データラッチの同一のセットを共有する。例えば、第１および第２の記憶装置が同一のメモリプレーン内にある場合、これらは、センス増幅器およびデータラッチの同一のセットを伴うプログラミング回路の同一のセットを使用できる。この場合、第１または第２の記憶装置のいずれかがプログラムされるべきかに関わらず、デフォルトのデータラッチのセットにデータがロードされることになる。
【０２４７】
第１および第２の記憶装置がデータラッチの互いに異なるセットを使用する場合に、例えば、同一のプレーンの互いに異なるメモリページにおける場合または互いに異なるメモリプレーンにおける場合と同様に、データをデータラッチの両方のセットにロードしてもよい。
【０２４８】
図４３は、他の実施形態に係る、正しい宛先アドレスが送出される前にプログラムデータがロードされるマルチストリーム更新を示すフロー図である。
【０２４９】
ステップ６００：ホストデータユニットを記録するための第１および第２の記憶装置を提供する。
【０２５０】
ステップ６１０：ホストデータを受信する。
【０２５１】
ステップ６２０：受信されているままのデータを、第１の記憶装置をプログラムするために使用されるデータラッチおよび第２の記憶装置をプログラムするために使用されるデータラッチにロードする。
【０２５２】
ステップ６３０：受信されたデータが所定の条件を満たすかどうかによって、第１または第２の記憶装置をアドレス指定して記録する。
【０２５３】
ステップ６４０：アドレス指定された記憶装置に対して、そのデータラッチからデータをプログラムする。
【０２５４】
ステップ６５０：現在のホスト書き込みを終了する。
【０２５５】
本発明を様々な例示的な実施形態に関連して説明してきたが、本発明が、添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解できよう。
【図面の簡単な説明】
【０２５６】
【図１Ａ】ホストシステムと共に動作する不揮発性メモリのブロック図である。
【図１Ｂ】不揮発性メモリと共に動作するホストシステムのブロック図である。
【図２】図１Ａのメモリアレイの第１の編成例を示す。
【図３】図１Ａのメモリアレイ内に記憶されるようなオーバーヘッドデータを有するホストデータセクタの例を示す。
【図４】図１Ａのメモリアレイの第２の編成例を示す。
【図５】図１Ａのメモリアレイの第３の編成例を示す。
【図６】図１Ａのメモリアレイの第３の編成例を拡張したものを示す。
【図７】ある特定の構成における図１Ａのアレイのメモリセル群の回路図である。
【図８】図１Ａのメモリアレイなどのメモリアレイのブロック内にデータのセクタを記憶する様子を示す。
【図９】図１Ａのメモリアレイなどのメモリアレイのブロック内にデータのセクタを記憶する他の様子を示す。
【図１０Ａ】ガーベッジコレクション動作中に他のブロックへコピーした後の図８または図９のデータのセクタを示す。
【図１０Ｂ】第２のガーベッジコレクション動作中に他のブロックへコピーした後の図１０Ａのデータのセクタを示す。
【図１０Ｃ】さらにデータのセクタを受信した後の図１０Ｂのブロックを示す。
【図１１Ａ】２つの消去ブロックであるアクティブブロックとスクラッチパッドブロックとを使用して図１０Ａおよび図１０Ｂのデータのセクタを記憶する、他の記憶構成を示す。
【図１１Ｂ】２つのメタブロックであるアクティブブロックとスクラッチパッドブロックとを使用して図１０Ａおよび図１０Ｂのデータのセクタを記憶する、他の記憶構成を示す。
【図１２Ａ】ガーベッジコレクション動作をトリガーせずにデータのセクタを記憶中に更新してもよいように、データのセクタを記憶するために使用される２つのブロックであるアクティブブロックとスクラッチパッドブロックとを示す。
【図１２Ｂ】ガーベッジコレクションをトリガーせずにページのすべてのセクタを記憶中に更新することができる、図１２Ａの他の記憶システムを示す。
【図１２Ｃ】スクラッチパッドブロック１２５０を使用してデータを更新する他の例を示す。
【図１３】マルチレベルセル内に２ビットのデータを記憶するために使用される４つのしきい値電圧の範囲を示す。
【図１４】スクラッチパッドブロックがアクティブブロックの下位ページのコピーを保持する、マルチレベルセルの２つのブロックと、アクティブブロックと、スクラッチパッドブロックとを示す。
【図１５】あるブロックに記憶された２つのファイルからのデータのセクタと、その後に当該２つのファイルがメモリアレイ内に１ブロックより多くののスペースを必要として更新される場合の当該データのセクタを記憶する様子とを示す。
【図１６】アクティブブロックへコピーされる前のいくつかのセクタをスクラッチパッドブロックが記憶する場合の、図１５のデータのセクタの更新の他のシステムを示す。
【図１７】同一のページ内に無関係なデータのセクタを記憶するスクラッチパッドブロックと、その後にこのデータを互いに異なる場所へコピーする様子とを示す。
【図１８】複数の更新を受けている無関係なデータのセクタを記憶するスクラッチパッドブロックを示す。
【図１９】マーク付けセクタによって識別されるスクラッチパッドブロックを示す。
【図２０】セクタ群と、インデックスセクタとを記憶する図１９のスクラッチパッドブロックを示す。
【図２１】セクタの第２群と、第１のインデックスセクタに取って代わる第２のインデックスセクタとを記憶する、図２０のスクラッチパッドブロックを示す。
【図２２】セクタの第３群と、第２のインデックスセクタに取って代わる第３のインデックスセクタとを記憶する、図２１のスクラッチパッドブロックを示す。
【図２３】ある群が他のブロックにコピーされる場合に、第３のインデックスセクタに取って代わる第４のインデックスセクタを有する図２２のスクラッチパッドブロックを示す。
【図２４】従来の方法によって更新されかつ単一セクタのページを有する更新ブロック内に記憶される、論理群内のセクタの例を示す。
【図２５】ページはマルチセクタでありかつ一度書き込み可能であると思われる、メモリに対して適用されるような図２４に示されている書き込みの同一シーケンスを示す。
【図２６】本発明の一般的な一実施形態に係る、第１のメモリブロックを第２のメモリブロックと共に使用し、記憶されたデータのインデックスを第２のブロックに保存することによって、データを更新する方法を示すフローチャートである。
【図２７Ａ】本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、データを更新してインデックスを保持する特定の一例を示す。
【図２７Ｂ】本発明の好ましい一実施形態に係る、更新ブロックをスクラッチパッドブロックと共に使用することによって、保持されているデータを更新する連続順序付けの他の例を示す。
【図２８】ブロックの部分ページ内の更新データを記憶するためのメモリブロックのインデックスを保存するための好ましい手法を示す。
【図２９】いくつかの論理群が現在更新を受けている、マルチストリーム更新において使用されるスクラッチパッドブロックを概略的に示す。
【図３０】入力データのシーケンスをあるブロックに書き込む従来の場合を示す。
【図３１Ａ】本発明の好ましい実施形態に係る、異なる書き込みが２つのブロックに対してインターリーブされている場合であっても記録順序または優先順位を追跡する他の手法を示す。
【図３１Ｂ】書き込みが２つのブロックに対して記録される場合に記録順序を追跡する他の実施形態を示す。
【図３２Ａ】本発明の一般的な実施形態に係る、２つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【図３２Ｂ】書き込みポインタを使用する一実施形態に係る、２つのデータストリーム間の記録シーケンスを同期させる方法を示すフローチャートである。
【図３３Ａ】第１のシーケンスに係る２つのホスト書き込み＃１および＃２の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。
【図３３Ｂ】図３３Ａに示されている第１のシーケンスの逆である第２のシーケンスに係る２つのホスト書き込み＃１および＃２の後のスクラッチパッドブロックおよび更新ブロックの状態を示す。
【図３４Ａ】スクラッチパッドブロックインデックス（ＳＰＢＩ）の好ましい一データ構成を示す。
【図３４Ｂ】図３３Ａに示されているホスト書き込み＃１についてのスクラッチパッドブロックインデックス内の値の例を示す。
【図３５Ａ】図３３Ａの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッド書き込みポインタに対する更新ブロックの中間状態を示す。
【図３５Ｂ】図３３Ｂの連続ホスト書き込み後のスクラッチパッドブロックおよびスクラッチパッド書き込みポインタに対する更新ブロックの中間状態を示す。
【図３６】更新ブロックに記録されているセクタのオーバーヘッド部分に記憶されているスクラッチパッド書き込みポインタを示す。
【図３７】２つの更新ストリーム間の記録シーケンスを追跡するためのタイムスタンプの使用を示す。
【図３８】本発明の一般的な一実施形態に係る、それぞれ複数のセクタページを有する２つのメモリブロックに対して同時に更新データを記録しかつインデックス付けするための方法を示すフローチャートである。
【図３９】スクラッチパッドブロックおよび更新ブロックを使用する図３７の方法のより特定的な実施例を示すフローチャートである。
【図４０Ａ】本発明が実施される場合を提供する、読み出し／書き込み回路のバンクを有するメモリ装置を概略的に示す。
【図４０Ｂ】図４０Ａに示されているメモリ装置の好ましい配列を示す。
【図４１】図４０Ａに示されているセンスモジュールをより詳細に示す。
【図４２】好ましい一実施形態に係る、予測パイプライニング手法を使用するマルチストリーム更新を示すフロー図である。
【図４３】他の実施形態に係る、正しい宛先アドレスが送出される前にプログラミングデータがロードされるマルチストリーム更新を示すフロー図である。
【図１Ａ】
2008524711.tif 000003
【図１Ｂ】
2008524711.tif 000004
【図２】
2008524711.tif 000005
【図３】
2008524711.tif 000006
【図４】
2008524711.tif 000007
【図５】
2008524711.tif 000008
【図６】
2008524711.tif 000009
【図７】
2008524711.tif 000010
【図８】
2008524711.tif 000011
【図９】
2008524711.tif 000012
【図１０Ａ】
2008524711.tif 000013
【図１０Ｂ】
2008524711.tif 000014
【図１０Ｃ】
2008524711.tif 000015
【図１１Ａ】
2008524711.tif 000016
【図１１Ｂ】
2008524711.tif 000017
【図１２Ａ】
2008524711.tif 000018
【図１２Ｂ】
2008524711.tif 000019
【図１２Ｃ】
2008524711.tif 000020
【図１３】
2008524711.tif 000021
【図１４】
2008524711.tif 000022
【図１５】
2008524711.tif 000023
【図１６】
2008524711.tif 000024
【図１７】
2008524711.tif 000025
【図１８】
2008524711.tif 000026
【図１９】
2008524711.tif 000027
【図２０】
2008524711.tif 000028
【図２１】
2008524711.tif 000029
【図２２】
2008524711.tif 000030
【図２３】
2008524711.tif 000031
【図２４】
2008524711.tif 000032
【図２５】
2008524711.tif 000033
【図２６】
2008524711.tif 000034
【図２７Ａ】
2008524711.tif 000035
【図２７Ｂ】
2008524711.tif 000036
【図２８】
2008524711.tif 000037
【図２９】
2008524711.tif 000038
【図３０】
2008524711.tif 000039
【図３１Ａ】
2008524711.tif 000040
【図３１Ｂ】
2008524711.tif 000041
【図３２Ａ】
2008524711.tif 000042
【図３２Ｂ】
2008524711.tif 000043
【図３３Ａ】
2008524711.tif 000044
【図３３Ｂ】
2008524711.tif 000045
【図３４Ａ】
2008524711.tif 000046
【図３４Ｂ】
2008524711.tif 000047
【図３５Ａ】
2008524711.tif 000048
【図３５Ｂ】
2008524711.tif 000049
【図３６】
2008524711.tif 000050
【図３７】
2008524711.tif 000051
【図３８】
2008524711.tif 000052
【図３９】
2008524711.tif 000053
【図４０Ａ】
2008524711.tif 000054
【図４０Ｂ】
2008524711.tif 000055
【図４１】
2008524711.tif 000056
【図４２】
2008524711.tif 000057
【図４３】
2008524711.tif 000058
【手続補正書】
【提出日】平成18年12月8日(2006.12.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ホストからのデータユニットを記録する方法において、
第１および第２の不揮発性記憶装置を提供するステップと、
書き込むべきデータユニットを示すホスト書き込みコマンドを受信するステップと、
書き込むべきデータユニットに基づいて所定の条件が満たされたかどうかにより、第１または第２の記憶装置のいずれかを記録用に設定するステップと、
データユニットがホストから受信されるにつれて、設定されている記憶装置へデータユニットを送出するステップと、
受信されたデータユニットに基づいて所定の条件が確認された場合に、設定された記憶装置にデータユニットを記録し、そうでない場合には、まだ設定されていないならば第２の記憶装置を設定して、受信されたデータユニットを第２の記憶装置に記録するステップと、
を含むホストからのデータユニットを記録する方法。
【請求項２】
請求項１記載のホストからのデータユニットを記録する方法において、
前記設定するステップは、選択された記憶装置をアドレス指定するステップを含む方法。
【請求項３】
請求項１記載のホストからのデータユニットを記録する方法において、
前記記憶装置へデータユニットを送出するステップは、選択された記憶装置をプログラムするためにデータラッチのセットへデータユニットを送出するステップを含む方法。
【請求項４】
請求項１記載のホストからのデータユニットを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第１および第２の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、を含み、
前記所定の条件は、データユニットのうちの１つがページエンドオフセットを有する場合であり、
前記データを第１の記憶装置に記録するステップは、第１の記憶装置のページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録するステップを含む方法。
【請求項５】
請求項４記載のホストからのデータユニットを記録する方法において、
第１および第２の記憶装置の各々は、共に消去可能なメモリユニットのブロックを記憶するためのものである方法。
【請求項６】
請求項４記載のホストからのデータユニットを記録する方法において、
ホストからの前記データは、データユニット群についての更新データであり、
前記第１の記憶装置は、前記更新データを記憶するためのものであり、
前記第２の記憶装置は、第１の記憶装置へ転送される前に前記更新データをバッファリングするためのものである方法。
【請求項７】
請求項４記載のホストからのデータユニットを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第１および第２の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、
をさらに含む方法。
【請求項８】
請求項７記載のホストからのデータユニットを記録する方法において、
各ページは、消去後に一度プログラム可能である方法。
【請求項９】
請求項７記載のホストからのデータユニットを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録するステップを含む方法。
【請求項１０】
請求項９記載のホストからのデータユニットを記録する方法において、
第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される方法。
【請求項１１】
請求項７記載のホストからのデータユニットを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第１および第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記憶するステップを含む方法。
【請求項１２】
請求項１１記載のホストからのデータユニットを記録する方法において、
第１および第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される方法。
【請求項１３】
請求項７記載のホストからのデータユニットを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第１の記憶装置の次の記録位置をポイントするポインタを記録するステップを含む方法。
【請求項１４】
請求項１３記載のホストからのデータユニットを記録する方法において、
前記ポインタは、前記ページエンドオフセットを有するページの位置に記録される方法。
【請求項１５】
請求項１〜１４にいずれか記載のホストからのデータユニットを記録する方法において、
第１および第２の不揮発性記憶装置は、１ビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項１６】
請求項１〜１４にいずれか記載のホストからのデータユニットを記録する方法において、
前記第１および第２の不揮発性記憶装置は、１つより多くのビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項１７】
不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
前記ブロックの動作を制御するためのコントローラと、
それぞれがホストからのデータを記録するための第１および第２のブロックと、
ホストからデータを受信するためのバッファと、を備え、
前記コントローラは、書き込むべきデータユニットに基づいて所定の条件が満たされたかどうかにより、第１または第２の記憶装置のいずれかを記録用に設定し、
データユニットがホストから受信されるにつれて、設定されている記憶装置へデータユニットを送出し、
受信されたデータユニットに基づいて所定の条件が確認された場合に、設定された記憶装置にデータユニットを記録し、そうでない場合には、まだ設定されていないならば第２の記憶装置を設定して、受信されたデータユニットを第２の記憶装置に記録する不揮発性メモリ。
【請求項１８】
請求項１７記載の不揮発性メモリにおいて、
前記不揮発性メモリは、着脱可能なメモリカードの形態を取る不揮発性メモリ。
【請求項１９】
請求項１７記載の不揮発性メモリにおいて、
ホストからの前記データは、データユニット群についての更新データであり、
前記第１のブロックは、前記更新データを記憶するためのものであり、
前記第２のブロックは、第１のブロックへ転送される前に前記更新データをバッファリングするためのものである不揮発性メモリ。
【請求項２０】
請求項１７記載の不揮発性メモリにおいて、
データは、所定の順序を有するデータユニットに編成され、
前記第１および第２のブロックは、ページに編成され、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである不揮発性メモリ。
【請求項２１】
請求項２０記載の不揮発性メモリにおいて、
各ページは、消去後に一度プログラム可能である不揮発性メモリ。
【請求項２２】
請求項１７記載の不揮発性メモリにおいて、
前記所定の条件は、受信されたデータユニットのうちの１つがページエンドオフセットを有する場合であり、
前記コントローラが前記第１のブロックへのデータの記録を制御することは、前記第１のブロックのページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録することを含む不揮発性メモリ。
【請求項２３】
請求項１７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録することを含む不揮発性メモリ。
【請求項２４】
請求項２３記載の不揮発性メモリにおいて、
第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される不揮発性メモリ。
【請求項２５】
請求項１７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第１および第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録することを含む不揮発性メモリ。
【請求項２６】
請求項２５記載の不揮発性メモリにおいて、
第１および第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される不揮発性メモリ。
【請求項２７】
請求項１７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第１の記憶装置の次の記録位置をポイントするポインタを記録することを含む不揮発性メモリ。
【請求項２８】
請求項２７記載の不揮発性メモリにおいて、
前記ポインタは、前記ページエンドオフセットを有するページの位置に記録される不揮発性メモリ。
【請求項２９】
不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
前記ブロックの動作を制御するためのコントローラと、
それぞれがホストからのデータを連続的に記録するための第１および第２のブロックと、
ホストからデータを受信するためのバッファと、
所定の条件が満たされる場合の前記第１のブロックへのデータの記録または所定の条件が満たされない場合の前記第２のブロックへのデータの記録のいずれかを制御するための手段と、
を備える不揮発性メモリ。
【請求項３０】
請求項１７〜２９のいずれか記載の不揮発性メモリにおいて、
第１および第２の不揮発性記憶装置は、１ビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項３１】
請求項１７〜２９のいずれか記載の不揮発性メモリにおいて、
第１および第２の不揮発性記憶装置は、１つより多くのビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項３２】
ホストからのデータを記録する方法において、
第１および第２の不揮発性記憶装置を提供するステップと、
ホストからデータを受信するステップと、
受信されたそのままのデータを、第１の記憶装置をプログラムするためのデータラッチのセットと、第２の記憶装置をプログラムするためのデータラッチのセットとにロードするステップと、
受信されたデータに基づいて所定の条件が満たされるかどうかにより、第１または第２の記憶装置のいずれかをアドレス指定するステップと、
データラッチのセットからアドレス指定された記憶装置へデータを記録するステップと、
を含むホストからのデータを記録する方法。
【請求項３３】
請求項３２記載のホストからのデータを記録する方法において、
第１の記憶装置をプログラムするためのデータラッチの前記セットは、第２の記憶装置をプログラムするためのものと同一である方法。
【請求項３４】
請求項３２記載のホストからのデータを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第１および第２の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、を含み、
前記所定の条件は、データユニットのうちの１つがページエンドオフセットを有する場合であり、
前記データを第１の記憶装置に記録するステップは、第１の記憶装置のページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録するステップを含む方法。
【請求項３５】
請求項３４記載のホストからのデータを記録する方法において、
第１および第２の記憶装置の各々は、共に消去可能なメモリユニットのブロックを記憶するためのものである方法。
【請求項３６】
請求項３４記載のホストからのデータを記録する方法において、
ホストからの前記データは、データユニット群についての更新データであり、
前記第１の記憶装置は、前記更新データを記憶するためのものであり、
前記第２の記憶装置は、第１の記憶装置へ転送される前に前記更新データをバッファリングするためのものである方法。
【請求項３７】
請求項３４記載のホストからのデータを記録する方法において、
データを所定の順序を有するデータユニットに編成するステップと、
第１および第２の不揮発性記憶装置をページに編成するステップであって、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである、編成するステップと、
をさらに含む方法。
【請求項３８】
請求項３７記載のホストからのデータを記録する方法において、
各ページは、消去後に一度プログラム可能である方法。
【請求項３９】
請求項３７記載のホストからのデータを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録するステップを含む方法。
【請求項４０】
請求項３９記載のホストからのデータを記録する方法において、
第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される方法。
【請求項４１】
請求項３７記載のホストからのデータを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第１および第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記憶するステップを含む方法。
【請求項４２】
請求項４１記載のホストからのデータを記録する方法において、
第１および第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される方法。
【請求項４３】
請求項３７記載のホストからのデータを記録する方法において、
前記第２の記憶装置にデータを記録するステップは、そのページに対して、第１の記憶装置の次の記録位置をポイントするポインタを記録するステップを含む方法。
【請求項４４】
請求項４３記載のホストからのデータを記録する方法において、
前記ポインタは、前記ページエンドオフセットを有するページの位置に記録される方法。
【請求項４５】
請求項３２〜４４のいずれか記載のホストからのデータを記録する方法において、
第１および第２の不揮発性記憶装置は、１ビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項４６】
請求項３２〜４４のいずれか記載のホストからのデータを記録する方法において、
前記第１および第２の不揮発性記憶装置は、１つより多くのビットのデータを個別に記憶するメモリセルから構成される方法。
【請求項４７】
不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
前記ブロックの動作を制御するためのコントローラと、
それぞれがホストからのデータを記録するための第１および第２のブロックと、
ホストからデータを受信するためのバッファと、を備え、
前記コントローラは、受信されたそのままのデータを、第１の記憶装置をプログラムするためのデータラッチのセットと、第２の記憶装置をプログラムするためのデータラッチのセットとにロードすることを制御し、
受信されたデータに基づいて所定の条件が満たされるかどうかにより、第１または第２の記憶装置のいずれかをアドレス指定し、
データラッチのセットからアドレス指定された記憶装置へデータをプログラムする不揮発性メモリ。
【請求項４８】
請求項４７記載の不揮発性メモリにおいて、
前記不揮発性メモリは、着脱可能なメモリカードの形態を取る不揮発性メモリ。
【請求項４９】
請求項４７記載の不揮発性メモリにおいて、
ホストからの前記データは、データユニット群についての更新データであり、
前記第１のブロックは、前記更新データを記憶するためのものであり、
前記第２のブロックは、第１のブロックへ転送される前に前記更新データをバッファリングするためのものである不揮発性メモリ。
【請求項５０】
請求項４７記載の不揮発性メモリにおいて、
データは、所定の順序を有するデータユニットに編成され、
前記第１および第２のブロックは、ページに編成され、各ページは、所定のページオフセットを有する複数のデータユニットを共にプログラムするためのものである不揮発性メモリ。
【請求項５１】
請求項４９記載の不揮発性メモリにおいて、
各ページは、消去後に一度プログラム可能である不揮発性メモリ。
【請求項５２】
請求項４７記載の不揮発性メモリにおいて、
前記所定の条件は、受信されたデータユニットのうちの１つがページエンドオフセットを有する場合であり、
前記コントローラが前記第１のブロックへのデータの記録を制御することは、前記第１のブロックのページに対して、前記ページエンドデータユニットおよびページ内の任意の先行するデータユニットを記録することを含む不揮発性メモリ。
【請求項５３】
請求項４７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録することを含む不揮発性メモリ。
【請求項５４】
請求項５２記載の不揮発性メモリにおいて、
第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される不揮発性メモリ。
【請求項５５】
請求項４７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第１および第２の記憶装置に記憶されたデータの少なくとも１つのインデックスを記録することを含む不揮発性メモリ。
【請求項５６】
請求項５４記載の不揮発性メモリにおいて、
第１および第２の記憶装置に記憶されたデータの前記少なくとも１つのインデックスは、ページエンドオフセットを有する前記ページの位置に記録される不揮発性メモリ。
【請求項５７】
請求項４７記載の不揮発性メモリにおいて、
前記コントローラが前記第２の記憶装置へのデータの記録を制御することは、そのページに対して、第１の記憶装置の次の記録位置をポイントするポインタを記録するステップを含む不揮発性メモリ。
【請求項５８】
請求項５６記載の不揮発性メモリにおいて、
前記ポインタは、前記ページエンドオフセットを有するページの位置に記録される不揮発性メモリ。
【請求項５９】
不揮発性メモリにおいて、
複数のブロックに編成されたメモリであって、各ブロックは、共に消去可能な複数のメモリユニットであり、各メモリユニットは、データの論理ユニットを記憶するためのものである、メモリと、
それぞれがホストからのデータを連続的に記録するための第１および第２のブロックと、
ホストからデータを受信するためのバッファと、
受信されたそのままのデータを、第１の記憶装置をプログラムするためのデータラッチのセットと、第２の記憶装置をプログラムするためのデータラッチのセットとにロードするための手段と、
受信されたデータに基づいて所定の条件が満たされるかどうかにより、第１または第２の記憶装置のいずれかをアドレス指定するための手段と、
データラッチのセットからアドレス指定された記憶装置へデータを記録するための手段と、
を備える不揮発性メモリ。
【請求項６０】
請求項４７〜５９のいずれか記載の不揮発性メモリにおいて、
第１および第２の不揮発性記憶装置は、１ビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【請求項６１】
請求項４７〜５９のいずれか記載の不揮発性メモリにおいて、
前記第１および第２の不揮発性記憶装置は、１つより多くのビットのデータを個別に記憶するメモリセルから構成される不揮発性メモリ。
【国際調査報告】
2008524711.tif 000059
2008524711.tif 000060
2008524711.tif 000061