(57)【特許請求の範囲】
【請求項１】
ホストプロセッサに接続するためのメモリシステムであって、前記システムは、
個別にアドレス可能で、かつ、複数のセクタから構成される消去可能ブロック内に設けられた不揮発メモリセクタを有する固体メモリであって、前記セクタは、各々、前記メモリ内の自身の物理的位置を定義する物理アドレスを有する、固体メモリと、
データ構造の前記メモリへの書き込みおよびデータ構造の前記メモリからの読出しを行い、かつ、消去用として処理されるブロックと非消去用として処理されるブロックとに、複数のセクタから構成されるブロックを分別するためのコントローラと
を備え、
前記コントローラは、
前記ホストプロセッサから受け取った論理アドレスを前記メモリ内の前記メモリセクタの物理アドレスに翻訳する手段と、
前記ホストプロセッサからのデータが書き込まれるセクタの物理アドレスを指示するライトポインタ（ＷＰ）と
を備え、
前記ライトポインタ（ＷＰ）は、消去用として処理される任意のブロックにおける前記メモリセクタの物理アドレスをくまなく所定の順番で移動するように、また、ブロックが満杯の場合は、別の消去ブロックに移動するように前記コントローラによって制御され、
前記コントローラは、前記ホストプロセッサからセクタ書き込みコマンドを受けると、前記ライトポインタ（ＷＰ）がその時点で指示する物理アドレスを論理アドレスに割当てることによって、前記コントローラが、前記ホストプロセッサから受け取った論理アドレスをデータが書き込みされる物理アドレスに翻訳するように、構成され、
前記コントローラは、前記セクタの前記論理アドレスに対応して当該論理アドレスが翻訳される物理アドレスが格納されるセクタ割当てテーブル（ＳＡＴ）を生成することであって、各論理アドレスは、前記コントローラによって前記ＳＡＴ内の対応する物理アドレスに割当てられる、ことと、前記ホストプロセッサからのデータがメモリセクタに書き込みされる頻度より少ない頻度で前記ＳＡＴを更新することとを実行するように構成され、
前記コントローラは、さらに、開始物理セクタアドレスと、ＳＡＴブロックが最後に更新されてから前記コントローラによりデータが書き込みされたセクタを含んでいるブロック間のリンクとを前記固体メモリの制御ブロックに記憶するように構成され、前記開始物理セクタアドレスは、前記ＳＡＴが最後に書き込みされたときの前記ライトポインタ（ＷＰ）の位置である、システム。
【請求項２】
前記ライトポインタ（ＷＰ）は、消去用に処理されるブロック中を所定の順序で移動するように前記コントローラによって制御されている、請求項１に記載のメモリシステム。
【請求項３】
前記ＳＡＴの物理セクタアドレスは、論理セクタアドレス（ＬＳＡ）の順序に配置されており、Ｎ番目のＳＡＴエントリーは、論理アドレスＮを有するデータが書き込みされたセクタの物理アドレスを含む、請求項１または２に記載のメモリシステム。
【請求項４】
前記コントローラは、前記ホストプロセッサからセクタ読出しコマンドを受け取ると、前記コントローラが以前前記論理セクタアドレスに割当てた物理セクタアドレスを得るために、前記コントローラが前記ＳＡＴ内において、前記ホストプロセッサから受け取った論理セクタアドレス（ＬＳＡ）を検索するように、構成される、請求項３に記載のメモリシステム。
【請求項５】
前記ＳＡＴが、前記固体メモリの複数のメモリセクタから構成される前記ブロックのうちの少なくとも１つのブロックに記憶されている、請求項１〜４の何れかに記載のメモリシステム。
【請求項６】
前記コントローラは、前記ＳＡＴが記憶されている前記ブロックのうちの前記少なくとも１つのブロックのうちの１つ以上のブロック全体を再書き込みすることにより、前記ＳＡＴを更新するように構成されている、請求項５に記載のメモリシステム。
【請求項７】
ＳＡＴブロックの個別セクタの修正バージョンを含んでいる、複数のセクタから構成される少なくとも１つのブロック（ＡＳＢ）が提供される、請求項５または６に記載のメモリシステム。
【請求項８】
前記ＡＳＢブロックのセクタが各々、それが更新するＳＡＴブロックのセクタの物理アドレスと、前記ＳＡＴブロックのセクタの修正バージョンとを含む、請求項７に記載のメモリシステム。
【請求項９】
前記ＡＳＢブロックの全てのセクタがＳＡＴセクタの修正バージョンを書き込まれるとき、それぞれのＳＡＴブロックは、前記ＡＳＢブロック内の全ての修正バージョンを含むように再書き込みされ、かつ、前記ＡＳＢブロックが消去される、請求項７または８に記載のメモリシステム。
【請求項１０】
前記コントローラは、前記ライトポインタ（ＷＰ）を制御することにより、各ブロックが書き込みデータで満杯になると、物理アドレスの番号昇順で、消去ブロック中を連続的に移動するように、構成されている、請求項１〜９の何れかに記載のメモリシステム。
【請求項１１】
物理アドレス順で最高位のブロックのセクタがひとたびデータで満杯になると、前記コントローラにより現在消去用として処理されている全てのブロック中、番号的に最下位の物理ブロックアドレスを有するセクタから構成されるブロックを取り囲むように前記ＷＰが前記コントローラによって制御されるという意味から、前記ライトポインタ（ＷＰ）の制御が循環式である、請求項１０に記載のメモリシステム。
【請求項１２】
前記コントローラは、前記ライトポインタ（ＷＰ）を制御することにより、消去ブロック中を物理アドレス順で非連続的に移動するように、構成されている、請求項１〜９の何れかに記載のメモリシステム。
【請求項１３】
前記メモリセクタ（１）はそれぞれ、物理的にデータエリア（３００）とスペアエリア（３０２）とに分割され、前記コントローラは、セクタのデータエリア（３００）の始めからオフセットされるセクタ位置において、ヘッダデータおよびエラー修正コードデータ（ＥＣＣ）を含むオーバーヘッドデータ（ＯＤ）を書き込みし、かつ、前記ホストプロセッサから受け取ったユーザデータを前記オーバーヘッドデータ（ＯＤ）の何れか一方の側のセクタにおける残りスペースに書き込みするように、構成されている、請求項１〜１２の何れかに記載のメモリシステム。
【請求項１４】
前記オーバーヘッドデータ（ＯＤ）は、前記セクタに書き込みされるユーザデータのうち少なくとも１ビットによって決定される量によってオフセットされる、請求項１３に記載のメモリシステム。
【請求項１５】
前記複数のセクタを構成するブロックの各々におけるメモリセクタは、ユニットとしてまとめて消去できる、請求項１〜１４の何れかに記載のメモリシステム。
【請求項１６】
前記複数のセクタを構成するブロックの各々におけるメモリセクタは、個別に消去することもできる、請求項１５に記載のメモリシステム。
【請求項１７】
前記コントローラは、前記メモリの消去操作を制御することにより、複数のメモリセクタから構成されるブロック全体のみを消去するように構成され、複数のセクタから構成されるブロックは、その中のメモリセクタが全て消去セクタである場合は、前記コントローラによって消去ブロックとして処理される、請求項１〜１６の何れかに記載のメモリシステム。
【請求項１８】
１つのブロックが１個または２個以上の不良セクタを含んでいる場合、前記コントローラがそのブロック全体を不良と定義し、非消去ブロックとして処理し、それによりデータがそのブロックに書き込みされない、請求項１７に記載のメモリシステム。
【請求項１９】
１つのブロックが１個または２個以上の不良セクタを含んでいる場合、前記コントローラがそのブロックを消去ブロックとして処理し、それにより前記コントローラは前記ブロック内の良好セクタをデータ保存用に使用することができ、前記メモリシステムは不良セクタを識別するテーブルを含み、前記コントローラは、前記ライトポインタ（ＷＰ）が移動する次のセクタアドレスが不良セクタのアドレスであるかどうかをチェックし、不良セクタのアドレスである場合は、前記ライトポインタを、その不良セクタをスキップし、書き込みが行われるセクタの所定の順序に従って次のセクタアドレスに移動するように制御するように、構成される、請求項１６に記載のメモリシステム。
【請求項２０】
前記複数のセクタから構成されるブロックは各々、前記メモリ内での自身の物理的位置を定義する物理ブロックアドレスを有し、前記メモリセクタの各々の物理アドレスは、それが位置するブロックの物理ブロックアドレスを含み、前記コントローラは、消去用として処理されるセクタから構成されるブロックの少なくとも何個かの物理ブロックアドレスのリストであって、ブロック内を前記ＷＰが移動する順番に並べられたリストを生成するように構成され、前記リストは、前記コントローラにより使用されて、書き込みが行われるセクタから構成される次のブロックを素早く識別し、前記メモリシステムは、一時的記憶手段をさらに含み、前記リストは、前記コントローラにより、前記一時的記憶手段に保存される、請求項１〜１９の何れかに記載のメモリシステム。
【請求項２１】
前記コントローラは、以前に別のセクタに書き込みされた旧データを伝えるセクタ書き込みコマンドを前記ホストプロセッサから前記コントローラが受け取ると、その時点の旧データを含んでいるセクタのアドレスを前記コントローラが前記メモリシステムの一時的記憶域に保存するように、構成される、請求項１〜２０の何れかに記載のメモリシステム。
【請求項２２】
前記コントローラは、前記ホストプロセッサからユーザにより生成されたセクタ除去コマンドを前記コントローラが受け取ると、除去すべきセクタを前記コントローラが廃棄としてマークし、かつ、前記セクタのアドレスを前記一時的記憶域に保存するように、さらに構成されている、請求項２１に記載のメモリシステム。
【請求項２３】
前記コントローラは、いかなる場合も、前記ライトポインタ（ＷＰ）によって書き込みされた旧データを含んでいる１個または２個以上のセクタを含むブロック（以下、これをカレントオブソリートブロック（ＣＯＢ）と称す）を予め決められた数しか容認せず、その結果、前記ＣＯＢ内の全てのセクタが旧データを含むと、前記ＣＯＢは即座に消去されるように、構成される、請求項２１または２２に記載のメモリシステム。
【請求項２４】
前記コントローラは、前記ＣＯＢ以外のブロックにあるセクタが旧データを含む場合、前記コントローラが前記ＣＯＢ内の有効（非廃棄）セクタにある任意のデータを別のブロックに再配置し、その後前記ＣＯＢを消去し、前記ＣＯＢ以外のブロックにある前記セクタを廃棄としてマークし、前記別のブロックを新しいＣＯＢとして指定するように、構成される、請求項２３に記載のメモリシステム。
【請求項２５】
前記予め決められたＣＯＢの数が１である、請求項２３または２４に記載のメモリシステム。
【請求項２６】
前記コントローラが前記有効データを再配置するブロックは、前記ＷＰがその時点で位置するブロックである、請求項２４に記載のメモリシステム。
【請求項２７】
前記メモリシステムは、前記有効データが再配置されるセクタの物理アドレスを指し示すために別のライトポインタ（以下、リロケーションポインタ（ＲＰ）と称す）を備え、前記ＲＰは常に前記ライトポインタ（ＷＰ）とは異なる複数のセクタから構成されるブロックに位置する、請求項２４に記載のメモリシステム。
【請求項２８】
前記メモリシステムは、前記ホストプロセッサからのシステムデータが書き込まれるセクタの物理アドレスを指し示すためにさらに別のライトポインタ（以下、システムライトポインタ（ＳＷＰ）と称す）を備え、前記ＳＷＰは常に前記ライトポインタ（ＷＰ）とは異なるブロックに位置する、請求項２７に記載のメモリシステム。
【請求項２９】
前記コントローラは、１つまたは２つ以上の廃棄セクタを含む少なくとも２個のブロックが任意のときに存在することを容認するように構成され、一方は前記ＣＯＢであり、他方は１つまたは２つ以上の旧システムデータセクタを含むカレント・オブソリート・システム・ブロック（ＣＯＳＢ)であり、前記ＣＯＳＢの消去を容認するために任意のシステムデータセクタを再配置することが必要になった場合、前記再配置されたシステムデータは、前記システムライトポインタ（ＳＷＰ）がその時点で指示するアドレスに送られる、請求項２８に記載のメモリシステム。
【請求項３０】
前記メモリシステムは、有効システムデータが再配置されるセクタの物理アドレスを指し示すためにさらに別のライトポインタ（以下、システムリロケーションポインタ（ＳＲＰ）と称す）を備え、前記ＳＲＰは常に前記ライトポインタ（ＷＰ）および前記システムライトポインタ（ＳＷＰ）とは異なる複数のセクタから構成されるブロックに位置する、請求項２８に記載のメモリシステム。
【請求項３１】
データが既に別のブロックにおいて廃棄されていることが理由で前記コントローラによる前記ＣＯＢの消去が必要なときに前記ＣＯＢが前記ライトポインタのうち１つを含んでいる場合、前記コントローラは新しいＣＯＢの作成を実行する一方、旧ＣＯＢの消去を保留する（以下、保留オブソリートブロック（ＰＯＢ）と称す）ように構成され、これは前記ＰＯＢ内の全消去セクタが充填され、かつ、前記コントローラの定義に従って前記ポインタが次に使用される消去ブロックに移動するまで保留され、ポインタが次に使用される消去ブロックに移動するとき前記ＰＯＢ内の任意の有効（非廃棄）データは前記コントローラによって再配置され、前記ＰＯＢが消去される、請求項２８〜３０の何れかに記載のメモリシステム。
【請求項３２】
前記コントローラは、前記メモリシステムの一時的記憶域に、前記ＳＡＴが最後に更新されてから、再配置されたデータが前記ＲＰにより書き込まれた前記メモリ内のセクタに対応する論理セクタアドレスのリスト（以下、リロケーションセクタリストまたはＲＳＬと称す）と、前記ＳＡＴが最後に更新されてから、再配置されたデータが前記ＳＷＰにより書き込まれた前記メモリ内のセクタに対応する論理セクタアドレスのリスト（以下、ライトシステムセクタリストまたはＷＳＳＬと称す）と、前記ＳＡＴが最後に更新されてから、再配置されたデータが前記ＳＲＰにより書き込まれた前記メモリ内のセクタに対応する論理セクタアドレスのリスト（以下、システムリロケーションセクタリストまたはＳＲＳＬと称す）とを保存するように、構成され、前記コントローラはさらに、前記一時的記憶域に、前記ＲＰにより使用されたブロックの順序のリスト（以下、リロケーションブロックリスト（ＲＢＬ）と称す）と、前記ＳＷＰにより使用されたブロックの順序のリスト（以下、ライトシステムブロックリスト（ＷＳＢＬ）と称す）と、前記ＳＲＰにより使用されたブロックの順序のリスト（以下、システムリロケーションブロックリスト（ＳＲＢＬ）と称す）とを保存するように構成される、請求項３０に記載のメモリシステム。
【請求項３３】
前記ホストプロセッサからの前記メモリへのデータ構造の書き込みに加えて、前記コントローラは、制御情報として示されるメモリデータの生成および書き込みを行い、前記コントローラはまた、前記ホストプロセッサから受け取ったデータ構造が書き込まれる複数のメモリセクタから構成されるブロックのうち、１個または２個以上の異なるブロック（制御ブロックまたはＣＢ）に前記制御情報を書き込むように構成される、請求項１〜３２の何れかに記載のメモリシステム。
【請求項３４】
前記コントローラは、全ＳＡＴブロックのブロックアドレスのリストを少なくとも１個の前記制御ブロックに記憶するように構成される、請求項３３に記載のメモリシステム。
【請求項３５】
前記コントローラは前記１個または２個以上の制御ブロックのブロックアドレスを前記メモリの専用ブロック（ブートブロックまたはＢＢ）に記憶するように構成され、前記専用ブロックは、メモリセクタがいかなる不良セクタも含んでいない、前記メモリの複数のセクタから構成される最初のブロックである、請求項３３または３４に記載のメモリシステム。
【請求項３６】
ＳＡＴブロックの個別セクタの修正バージョンを含んでいる、複数のセクタから構成される少なくとも１つのブロック（ＡＳＢ）が提供され、全ＳＡＴブロックアドレスの前記リストは複数のリスト部（テーブルブロックリストまたはＴＢＬ）の形式であり、かつ、各リスト部が論理的に連続する一群のＳＡＴブロックおよびそれに対応するＡＳＢのブロックアドレスを含む、請求項３４に記載のメモリシステム。
【請求項３７】
前記コントローラは、前記ＳＡＴが最後に更新されてから前記ライトポインタ（ＷＰ）によって書き込みされたデータ構造用の論理セクタアドレスのリスト（ライトセクタリストまたはＷＳＬ）を前記メモリシステムの一時的記憶域に保存するように構成される、請求項７〜９の何れかに記載のメモリシステム。
【請求項３８】
前記コントローラは、前記ＳＡＴが最後に更新されてからデータを書き込むために前記ライトポインタ（ＷＰ）によって使用されたブロックの順番を前記一時的記憶域に保存するように構成され、この順番は、アドレスが前記ＷＳＬに保持された更新されたセクタが配置されるブロックのブロックアドレスのリスト（ライトブロックリストまたはＷＢＬ）の形式で記憶される、請求項３７に記載のメモリシステム。
【請求項３９】
前記ＷＳＬは、予め決められた大きさを有し、ひとたび前記ＷＳＬが一杯になると、少なくとも１個のＳＡＴブロックまたはＡＳＢブロックが更新され、前記ＷＳＬおよび前記ＷＢＬが空になる、請求項３８に記載のメモリシステム。
【請求項４０】
前記セクタは各々メモリの単一“ページ”、すなわち、メモリセクタから構成される前記ブロックにあるメモリセルの一列から成る、請求項１〜３９の何れかに記載のメモリシステム。
【請求項４１】
前記コントローラは、均一にサイズ設定されたデータセグメント内のメモリセクタに対してデータを書き込み、また、前記メモリセクタからデータを読み込むように構成される、請求項１〜４０の何れかに記載のメモリシステム。
【請求項４２】
全てのメモリセクタが同一サイズであり、前記データセグメントは各々、前記メモリセクタと均等なサイズである、請求項４１に記載のメモリシステム。
【請求項４３】
一時的キャッシュメモリをさらに備え、前記コントローラは、前記コントローラがＳＡＴから最も新しくアクセスしたＳＡＴを含む一群の連続ＳＡＴエントリーを前記一時的キャッシュメモリに記憶させるように構成される、請求項１〜４２の何れかに記載のメモリシステム。
【請求項４４】
ＳＡＴブロックの個別セクタの修正バージョンを含んでいる、複数のセクタから構成される少なくとも１つのブロック（ＡＳＢ）が提供され、前記ＡＳＢブロックのセクタが各々、それが更新するＳＡＴブロックのセクタの物理アドレスと、前記ＳＡＴブロックのセクタの修正バージョンとを含み、前記コントローラは、ＳＡＴセクタの書き込み操作が実行されるたびに更新される全てのＡＳＢブロックとこれらのＡＳＢブロックと関連するＳＡＴブロックの物理アドレスのリスト（ＡＳＢＬ）を前記一時的キャッシュメモリ内に作成するように構成される、請求項４３に記載のメモリシステム。
【請求項４５】
前記固体メモリは単一のメモリチップの形式の単一のメモリアレイを含む、請求項１〜４４の何れかに記載のメモリシステム。
【請求項４６】
前記固体メモリは複数のメモリチップで形成されたメモリアレイを含む、請求項１〜４４の何れかに記載のメモリシステム。
【請求項４７】
前記固体メモリは複数のメモリチップの形式の複数のメモリアレイを含み、前記コントローラは、複数のメモリチップにあるメモリセクタを複数の仮想ブロックへと形成するように構成され、前記仮想ブロックはそれぞれ、前記メモリチップの各々からのメモリセクタから構成される１個の消去可能ブロックを含み、前記コントローラは、前記仮想ブロックを消去用として処理するものと、非消去用として処理するものとに分別するように構成される、請求項１〜４４の何れかに記載のメモリシステム。
【請求項４８】
前記コントローラは、消去用として処理される仮想ブロックのリストを生成することと、これを前記メモリシステムの一時的記憶域に保存することと、また、各々の連続セクタ書き込み操作のために１つのチップから別のチップに移動するように前記ライトポインタ（ＷＰ）を制御することであって、この移動は、前記仮想ブロックの１つの消去可能ブロックにある１個のセクタから始まり、前記仮想ブロックの各消去可能ブロックにあるセクタの書き込みが完了するまで、前記仮想ブロック内にあるその他の各消去可能ブロックのセクタを連続して移動し、次に最初のセクタが書き込みされたチップに戻って、前記仮想ブロックがデータで満杯になるまで同様の方法で前記仮想ブロック内の各消去可能ブロックにある別のセクタへの書き込みを続ける、ことと、その後、前記消去用として処理される仮想ブロックのリストに載っている次の仮想ブロックに前記ライトポインタ（ＷＰ）を移動することと、この次の仮想ブロックを同様の手法で書き込みすることとを実行するように構成される、請求項４７に記載のメモリシステム。
【請求項４９】
前記コントローラは、ｎ回の連続セクタ書き込み操作のたびに前記コントローラが前記ホストプロセッサから受け取った多重セクタ書き込みコマンドを実行するように構成され、ｎが、前記メモリシステムの固体メモリチップの数より少ないかまたは等しい場合、前記コントローラが前記チップのうちのｎ個のチップの各々における１個のセクタに実質的に同時に書き込みする、請求項４８に記載のメモリシステム。
【請求項５０】
前記コントローラは、前記仮想ブロックにある全ての消去可能ブロックを同時に消去することで任意の前記仮想ブロックの消去を実行するように構成される、請求項４８または４９に記載のメモリシステム。
【請求項５１】
個別にアドレス可能で、かつ、複数のセクタから構成される消去可能ブロックに配置される非揮発性メモリセクタを有する固体メモリに対して、データ構造の書き込みおよび読み出しを行うコントローラであって、各セクタは、前記メモリ内で自身の物理的位置を定義する物理アドレスを有し、
前記コントローラは、
前記コントローラが使用されるメモリシステムのホストプロセッサから受け取った論理アドレスをメモリ内の前記メモリセクタの物理アドレスに翻訳する手段と、
前記複数のセクタから構成されるブロックを消去用として処理されるブロックと非消去用として処理されるブロックとに分別する手段と、
前記ホストプロセッサからのデータが書き込まれるセクタの物理アドレスを指示するライトポインタ（ＷＰ）と
を備え、
前記ライトポインタ（ＷＰ）は、消去用として処理される任意のブロックにおけるメモリセクタの物理アドレスをくまなく所定の順番で移動するように、また、ブロックが満杯の場合は、別の消去ブロックに移動するように前記コントローラによって制御され、
前記コントローラは、前記ホストプロセッサからセクタ書き込みコマンドを前記コントローラが受けると、前記ライトポインタ（ＷＰ）がその時点で指示する物理アドレスを論理アドレスに割当てることによって、前記コントローラが、前記ホストプロセッサから受け取った論理セクタアドレスをデータが書き込みされる物理アドレスに翻訳するように構成され、
前記コントローラは、前記セクタの前記論理アドレスに対応して当該論理アドレスが翻訳される物理アドレスが格納されるセクタ割当てテーブル（ＳＡＴ）を生成するように構成され、各論理アドレスは、前記コントローラにより、前記ＳＡＴ内に対応する物理アドレスを有するように割当てられており、前記コントローラは、前記ホストプロセッサからのデータがメモリセクタに書き込みされる頻度より少ない頻度で前記ＳＡＴを更新するように構成され、
前記コントローラは、さらに、開始物理セクタアドレスと、ＳＡＴブロックが最後に更新されてから前記コントローラによりデータが書き込みされたセクタを含んでいるブロック間のリンクとを前記固体メモリの制御ブロックに記憶するように構成され、前記開始物理セクタアドレスは、前記ＳＡＴが最後に書き込みされたときの前記ライトポインタ（ＷＰ）の位置である、コントローラ。
【請求項５２】
個別にアドレス可能で、かつ、複数のセクタから構成される消去可能ブロックに配置される非揮発性メモリセクタを有する固体メモリに対するデータ構造の書き込みおよび読み出しを行うコントローラを制御する方法であって、各セクタは、前記メモリ内で自身の物理的位置を規定する物理アドレスを有し、
前記方法は、
前記複数のセクタから構成されるブロックを消去用として処理されるブロックと非消去用として処理されるブロックとに分別するステップと、
データが書き込まれるセクタの物理アドレスを指示するライトポインタ（ＷＰ）を提供し、少なくともライトポインタ（ＷＰ）を、消去用として処理される任意のブロックにおけるメモリセクタの物理アドレスをくまなく所定の順番で移動するように、また、ブロックが満杯の場合は、別の消去ブロックに移動するように制御し、ホストプロセッサからセクタ書き込みコマンドを受けると、前記ライトポインタ（ＷＰ）がその時点で指示する物理アドレスを論理アドレスに割当てることによって、前記ホストプロセッサから受け取った論理アドレスをデータが書き込みされる物理アドレスに翻訳するステップと、
前記セクタの前記論理アドレスに対応して当該論理アドレスが翻訳される物理アドレスが格納されるセクタ割当てテーブル（ＳＡＴ）を非揮発性固体メモリに記憶するステップであって、各論理アドレスは、前記コントローラにより、前記ＳＡＴ内に対応する物理アドレスを有するように割当てられている、ステップと、
前記ホストプロセッサからのデータがメモリセクタに書き込みされる頻度より少ない頻度で前記ＳＡＴを更新するステップと、
開始物理セクタアドレスと、ＳＡＴブロックが最後に更新されてから前記コントローラによりデータが書き込みされたセクタを含んでいるブロック間のリンクとを前記固体メモリの制御ブロックに記憶し、前記開始物理セクタアドレスは、前記ＳＡＴが最後に書き込みされたときの前記ライトポインタ（ＷＰ）の位置であるステップ
を含む、方法。
【発明の詳細な説明】
【０００１】
本発明は、データ記憶および検索のための半導体メモリシステムに関し、また、半導体メモリシステムの不揮発性メモリへのアクセスを制御するメモリコントローラに関する。より具体的には、本発明は、フラッシュメモリシステム及びフラッシュメモリ用のコントローラに関する。
【０００２】
フラッシュＥＥＰＲＯＭ（電気的消去書き込み可能な読出し専用メモリ）装置は不揮発性データ記憶装置用に電子工業界で一般的に用いられている。ＮＡＮＤ型メモリセル、ＡＮＤ型メモリセルあるいはＮＯＲ型メモリセルに基づく装置を含む様々なタイプのフラッシュメモリ装置が存在する。こうした装置は、それぞれインタフエースするように設計されたホストプロセッサシステムに対して異なる型のインタフエースを有し、例えば、順次アクセス型インタフエース（多くのＮＡＮＤ型及びＡＮＤ型装置で一般的に使用）、または、ランダムアクセス型インタフエース（複数のＮＯＲ型装置で使用）などが使用されている。本発明は、適切な形で、これらの異なるタイプの記憶装置の少なくともいくつかに、好ましくは全てに利用できることを目的とする。
【０００３】
磁気ディスク記憶装置をコンピュータシステムにエミュレーションするために半導体メモリシステムを使用することは周知である。当業界では、半導体メモリシステムの演算速度を増して、磁気ディスク記憶装置をより良くエミュレートすることを目指している。
【０００４】
本発明の第1の態様によれば、個別にアドレス可能で、かつ、セクタの消去可能ブロック内に設けられた不揮発メモリセクタを有し、前記セクタは、各々、メモリ内の自身の物理的位置を定義する物理アドレスを含む半導体メモリと；
データ構造のメモリへの書き込みとメモリからの読出し、及び消去用として処理されるブロックと非消去用として処理されるブロックとにセクタのブロックをソートするためのコントローラと；
を具備するホストプロセッサに接続するためのメモリシステムであって、
前記コントローラは、
ホストプロセッサから受け取った論理アドレスをメモリ内の前記メモリセクタの物理アドレスに変換する手段と；
ホストプロセッサからのデータが書き込まれる物理セクタアドレスを指示する書き込みポインタ（以下、ライトポインタ（ＷＰ）と称す）であって、消去用として処理される任意のブロックにおけるメモリセクタの物理アドレスを所定の順番で移動するように、また、ブロックが満杯の場合は別の消去ブロックに移動するようにコントローラによって制御されるライトポインタ（ＷＰ）とを含み、
こうした構成とすることで、ホストプロセッサからセクタ書き込みコマンドを受け取ると、前記ライトポインタ（ＷＰ）が指し示す物理アドレスを論理アドレスに割当てることによって、コントローラはホストプロセッサから受け取った論理アドレスをデータが書き込みされる物理アドレスに変換し、かつ、コントローラによって既に割当てられている各々の物理アドレスとともに論理アドレステーブルをコンパイルし（このテーブルは、以下、セクタ割当てテーブルまたはＳＡＴと称す）、コントローラはホストプロセッサからのデータがメモリセクタに書き込みされる頻度より少ない頻度でＳＡＴを更新するよう構成されたメモリシステムが提供される。
【０００５】
ホストプロセッサからのデータがメモリ内のセクタに書き込まれる度にＳＡＴを更新するのでなく、それより少ない頻度でＳＡＴを更新することにより、本発明は、例えばフラッシュメモリなどの半導体メモリの超高速処理を提供し、従って、磁気ディスク記憶装置の良好なエミュレーションを可能にする。
【０００６】
ＳＡＴの物理セクタアドレスは、好ましくは、論理セクタアドレスによって命令され、これにより、Ｎ番目のＳＡＴエントリーは、論理アドレスＮを有するデータが書き込みされたセクタの物理アドレスを含む。セクタ読出しコマンドをホストプロセッサから受け取ると、コントローラは、ホストプロセッサから受け取った論理セクタアドレスをＳＡＴ内で検索して、過去にコントローラが前記論理セクタアドレスに割当てた物理セクタアドレスを得る。ＳＡＴは、好ましくは、半導体メモリのメモリセクタの１または複数の前記ブロック内に記憶される。各ブロックは、以下ＳＡＴブロックと称されるＳＡＴの任意の部分を含んでいる。ＳＡＴは、ＳＡＴにおける１つまたは複数のブロックを書き換えることによって更新される。ＳＡＴセクタのブロック全体を一時に更新することで、メモリシステムの演算スピードが著しく向上する。
【０００７】
少なくとも1つのセクタブロック（以下、追加ＳＡＴブロック（ＡＳＢ）と称す）が提供され、これは前記ＳＡＴブロックの個別セクタの修正バージョンを含む。前記ＡＳＢブロックの各セクタは、好ましくは、それが更新するＳＡＴブロックにおけるセクタの物理アドレスと、前記ＳＡＴブロックセクタの修正バージョンとを含む。ＡＳＢの目的は、ＳＡＴの半導体メモリ修正セクタに個別に隠して（キャッシュして）、ＳＡＴプロックの書き換え回数を減らすことにある。前記ＡＳＢブロックの全てのセクタがＳＡＴセクタの修正バージョンで書き込みされると、ＡＳＢブロック内の全ての修正バージョンを含むように個々のＳＡＴブロックが書き換えられて、ＡＳＢブロックは消去される。
【０００８】
本発明のメモリシステムにおいては、ホストプロセッサから受ける任意の論理アドレスに割当てられる物理アドレスが論理アドレスその物に従属していないことは理解されよう。コントローラは、単に、ライトポインタがそのとき指し示す物理セクタアドレスを割当てる。
【０００９】
上述したように、コントローラは、ライトポインタ（ＷＰ）を他のブロックに移動させる前に、消去処理される前記1つのブロックを充填する。コントローラは、ライトポインタ（ＷＰ）を消去処理されるブロック内をくまなく所定の順番で移動させるように好適に構成されている。
【００１０】
コントローラは、ライトポインタ（ＷＰ）を好適に制御して、消去ブロック中くまなく物理アドレスを番号順に上昇しながら連続して移動させ、このとき、各ブロックは書き込みされたデータで充填されている。ひとたび物理アドレス順による最高位ブロックのセクタがデータで充填されると、ＷＰはコントローラによって消去処理される全てのブロック中、番号的に最下位の物理アドレスを有するセクタのブロックを取り囲むようにコントローラによって制御されるという意味において、ライトポインタ（ＷＰ）の制御は循環式である。
【００１１】
コントローラは、あるいは、メモリセクタデ−タを書き込みするのに別の所定の順番を用いる。例えば、コントローラは、ライトポインタ（ＷＰ）を制御して、消去処理されるブロック中を物理アドレスによる番号順に連続して下るように移動させる。もしくは、物理セクタアドレスを非連続順に移動することも可能である。例えば、ＷＰが消去処理される各ブロックにおいて物理セクタアドレス中をアドレスの数字を下るように移動したり、例えば、前記ブロックの各々において、第1セクタの物理アドレスにしたがって番号順に上るなど、何らかの所定の順序でブロックからブロックへ移動したりすることもできる。
【００１２】
消去処理されるブロックにおけるセクタにデータを書き込むためにその他にも多くの所定の順番が実行可能なことは理解されよう。さらに、予め決定する必要のない、または、一部のみ決定させた任意の順序でコントローラが消去ブロックを使用することも可能である。一般的には好ましくないが、消去ブロックは、無作為な順序で使用することもできる。
【００１３】
前記セクタブロックの個々におけるメモリセクタは、好ましくは、ユニットとして消去可能である。セクタは、また、個別消去も可能である（例えば、半導体記憶装置がＡＮＤ型メモリの場合）。コントローラは、好ましくは、メモリセクタのブロック全体のみを消去するように記憶装置の消去演算を制御するように構成される。メモリセクタ内の全てのセクタが消去セクタである場合は、セクタのブロックは、消去ブロックとしてコントローラによって処理される。ブロックが1つまたは２つ以上の不良（すなわち、欠陥）セクタを含んでいる場合、コントローラは、ブロック全体を不良と定義し、そのブロックを非消去ブロックとして処理し、それによりこのブロックへのデータの書き込みは行われない。もしくは、ブロックが1つまたは２つ以上の不良セクタを含んでいる場合、コントローラは、そのブロックを消去ブロックとして処理し、それによりそのブロック内の良好セクタをデータ保存に使用する。しかし、後者の場合、好ましくは、メモリシステムが不良セクタを識別するテーブルを備え、コントローラは、ライトポインタ（ＷＰ）が次に移動するセクタアドレスが不良セクタアドレスか否かをチェックし、それが不良セクタのアドレスだった場合、ライトポインタを制御してこの不良セクタをスキップさせ、セクタが書き込みされる所定の順番に従って、次のセクタアドレスに移動するように構成される。
【００１４】
疑念を回避するため、既に書き込みされた任意の良好（すなわち、非欠陥）セクタを含む任意のブロックは非消去ブロックとしてコントローラによって処理される。さらに、“消去”セクタなる用語は消去されたセクタのみでなく、書き込みされていない状態のセクタ及び消去前のセクタも含む。従って、書き込み前のセクタのブロックは、コントローラによって消去ブロックとして処理される。
【００１５】
好ましくは、セクタブロックは各々、メモリ内での自身の物理的位置を定義する物理ブロックアドレスを有する。前記メモリセクタの各々の物理アドレスは、好ましくは、それが位置するブロックの物理ブロックアドレスを含む。新規なコントローラは、好適に、消去処理されるセクタブロックの少なくとも何個かの物理ブロックアドレスのリストをコンパイルするように構成され、これを利用して次に書き込みが行われるセクタブロックを素早く識別する。この消去ブロックのアドレスリストは、好ましくは、コントローラによってメモリシステムに設けられた一時的記憶域に記憶され、一時的記憶域は、好適に、コントローラのマイクロプロセッサのＳＲＡＭであり、各セクタブロックの消去状況を識別するコントローラによって半導体メモリに既に記憶されている情報からもたらされる（この情報は、好ましくは、半導体メモリにおいてビットマップの形式で保持され、各ブロックは消去ブロックまたは非消去ブロックとして記録される）。
【００１６】
コントローラを好適に構成することで、以前に別のセクタに書き込みされた旧データを伝えるセクタの書き込みコマンドをホストプロセッサからコントローラによって受けると、コントローラは、現時点の旧データを備えるセクタのアドレスを一時的記憶域に保存する。この一時的記憶域は、好適に、コントローラのマイクロプロセッサに設けられたＳＲＡＭまたはＤＲＡＭである。通常はユーザによって発せられる、セクタ削除コマンドをホストプロセッサからコントローラによって受け取ると、コントローラは、好ましくは、削除すべきセクタを廃棄としてマークする（このとき、物理的にセクタを消去することはない）。コントローラは、ライトポインタ（ＷＰ）によって書き込みされた旧データを含む1つまたは２つ以上のセクタを有するブロック（以下、カレントオブソリートブロック（ＣＯＢ）と称す）をいかなる場合も1個しか容認しない。ＣＯＢ内の全てのセクタが旧データを含むと、ＣＯＢは即座に消去される。これは、ライトポインタ（ＷＰ）が次のブロックに移動する前に、消去処理される各ブロック内のメモリセクタアドレスを連続して移動する場合に特に好都合である。このような場合、削除される一連の廃棄セクタ（例えば、書き換えられたユーザデータファイルの一部を含む）は、多くの場合、全て同一のブロック内にある。一連のセクタが、それらが過去に書き込みされた順序と違う順番で書き換えられると、２個以上のブロックに廃棄セクタが生じることがある。ＣＯＢ以外のブロックにあるセクタが旧データを含む場合、コントローラは、好ましくは、ＣＯＢ内の有効（非廃棄）セクタにある任意のデータを、ライトポインタ（ＷＰ）がその時点で指し示す別のブロックに再配置し、その後ＣＯＢを消去する。ＣＯＢ以外のブロックにある前記セクタが、その後、廃棄としてマークされ、このブロックが今度はＣＯＢになる。ライトポインタの現在位置に再配置したデータを書き込みするというよりむしろ、メモリシステムは、そうしたリロケーションデータを書き込むセクタの物理アドレスを指示するための第２のライトポインタ（以下、リロケーションポインタ（ＲＰ）と称す）を備え、リロケーションポインタ（ＲＰ）は、常にライトポインタ（ＷＰ）とは異なるセクタブロックにある。これは、ホストプロセッサによって書き込みするように直接命令された、すなわち、ライトポインタ（ＷＰ）によって書き込みされるデータ構造と、リロケーションデータとが交じり合うことを阻止するという効果をもたらす。
【００１７】
通常、２つのタイプのデータのみがホストプロセッサから半導体メモリに書き込みされる。すなわち、ファイルデータとシステムデータである。再配置及び消去の回数をさらに減じるために、本発明のメモリシステムは、第３のライトポインタ（以下、システムライトポインタ（ＳＷＰ）と称す）をさらに備える。これはホストプロセッサからのシステムデータを書き込みするセクタの物理アドレスを指示し、ＳＷＰは、常に、ライトポインタ（ＷＰ）とは別のブロックにある（さらに、リロケーションポインタがある場合は、これとも違うブロックにある）。好ましくは、システムデータは、システムの初期化中に識別され、かつ、必要に応じて演算中に更新される。
【００１８】
ライトポインタ（ＷＰ）とシステムライトポインタ（ＳＷＰ）の両方が備えられている場合、ファイルデータは、常にライトポインタ（ＷＰ）によって指示されたアドレスに書き込みされる。好ましくは、リロケーションポインタ（ＲＰ）とシステムライトポインタ（ＳＷＰ）の双方がライトポインタ（ＷＰ）に類似の方法で消去処理される前記ブロックにおけるメモリセクタの物理アドレス中を移動するように制御される。従って、前記ブロックの（良好）セクタの全てがリロケーションデータまたはシステムデータで充填された場合、対応するリロケーションポインタ（ＲＰ）およびシステムライトポインタ（ＳＷＰ）の一方が、消去処理されるブロックにおける全セクタの物理アドレスからコントローラによって使用されるように定義された次のアドレスに移動する。
【００１９】
システムライトポインタ（ＳＷＰ）が設けられている場合、好ましくは、コントローラは、1つまたは２つ以上の廃棄セクタを含む少なくとも２個のブロックが任意のときに存在することを容認する。このとき、一方は前記ＣＯＢであり、他方は、1つまたは２つ以上の旧システムデータセクタを含むカレントオブソリートシステムブロック（ＣＯＳＢ）である。ＣＯＳＢの消去を容認するために任意のシステムデータセクタを再配置することが必要になった場合、好ましくは、再配置されたシステムデータはシステムライトポインタ（ＳＷＰ）がその時点で指示するアドレスに送られる。
【００２０】
事実、任意の一時に旧データを有する２個以上のブロック（ＣＯＢ及びＣＯＳＢ）が一時的に存在することがある。例えば、ＣＯＢの消去が必要な場合（旧データがちょうど別のブロックに作り出された後）、ライトポインタ（ＷＰ）の1つはこれを指し示す。すなわち、ＷＰは、現在ＣＯＢであるブロックにまだ書き込みを行っている。このような場合、コントローラは、好ましくは、新しいＣＯＢの作成処理を行い、一方、コントローラの定義に従って、古いＣＯＢ内にある全ての消去セクタが充填され、かつ、ライトポインタ（ＷＰ）が次に使用する消去ブロックに移動するまで古いＣＯＢ（以下、保留オブソリートブロック（ＰＯＢ）として扱う）の消去を保留する。このとき、ＰＯＢ内の任意の有効（非廃棄）データは再配置され、ＰＯＢが消去される。
【００２１】
ホストプロセッサからのデータ構造をメモリに書き込みすることに加えて、コントローラは、制御情報として指定されたメモリデ−タの生成および書き込みを行う。好ましくは、コントローラは、そうした制御情報をホストプロセッサから受け取ったデータ構造が書き込まれたメモリのセクタブロックとは別個のブロックに書き込む。こうした制御情報を記憶するためのブロックを以下、制御ブロック（ＣＢｓ）と称する。これらの制御ブロックはコントローラによって周期的に更新され、初期化中、および時にメモリシステムの演算中にアクセスされる。
【００２２】
好ましくは、ＳＡＴが最後に更新された後、コントローラは、ライトポインタ（ＷＰ）によって書き込まれたデータ構造用の論理セクタアドレスのリストを一時的記憶域（これは、メモリシステムに設けられたＲＡＭ、または、コントローラのマイクロプロセッサに好適に埋め込まれたＳＲＡＭあるいはＤＲＡＭ）に記憶させる。ＳＲＡＭに記憶されたこのリストは、以下、ＷＳＬの論理アドレスとして言及される。これは、メモリ内の不揮発性セクタに書き込みされた順番に好適に記億される。連続して書き込みされたセクタ群にとって好都合なことに、ＷＳＬエントリーは、従って、第1セクタの論理アドレスとして、かつ、セクタ群の長さ、すなわち、セクタが書き込みされた数だけ書き込みされる。前記セクタ群の各々は、セクタの1つのブロックより広がらないように定義される。
【００２３】
コントローラは、また、ＳＡＴの最終更新の後、好適に、ブロックがデータ書き込み用にライトポインタ（ＷＰ）によって使用された順番を前記一時的記憶域に記憶する。これは、アドレスがＷＳＬに保存された更新されたセクタが位置するブロックのブロックアドレス表の形式で保存される。このブロックアドレス表は、以下、書き込みブロックリスト（ＷＢＬ）として言及する。メモリシステムは、ＷＳＬおよびＷＢＬによって、前記連続して書き込みされたセクタ群の第1論理アドレスに割当てられた物理メモリ内に記憶場所の知識を有するものであるから、コントローラは、ＷＳＬ及びＷＢＬを使用して、ＳＡＴの最終更新の後、前記連続して書き込みされたセクタ群における各論理セクタアドレスの各々について、常に正しい物理セクタにアクセス可能である。好ましくは、ＷＳＬは所定の大きさを有し、ひとたびＷＳＬが一杯になると、1つまたは２つ以上のＳＡＴブロック（及び／又はＡＳＢｓ）が更新され、ＷＳＬとＷＢＬとが空になる。
【００２４】
好ましくは、物理セクタアドレスの開始と、最後のＳＡＴ更新後にコントローラによってデータが書き込みされたセクタを有するブロック間のリンクとが、半導体メモリの制御ブロックに記憶される。各セクタに記憶されたユーザデータ用の論理セクタアドレスを、セクタそれ自身、例えばセクタに設けられたヘッダーフィールドに記憶することにより、システムに対する任意の電力の除去および回復後、ＷＳＬおよびＷＢＬを容易に再構成できる。これは、一杯になっていないブロックに到達するまで、半導体メモリをくまなく走査し、ＳＡＴが最後に更新されてから書き込まれたセクタ内の論理アドレスを読出すことによって達成される。これは、電力の除去あるいは損失前にライトポインタ（ＷＰ）を含むブロックである。これにより、メモリシステムから予期せぬ電力除去が生じた際にも、高度なデータセキュリティが提供される。
【００２５】
リロケーションポインタおよびシステムライトポインタがメモリシステム内に含まれている場合、コントローラは、移動されたデータもしくはシステムデータが書き込まれたメモリ内のセクタに対応する類似の論理セクタアドレスリストを、前記一時的記憶域に記憶することが望ましい。以下、これらのリストをそれぞれ、再配置セクタリスト（ＲＳＬ）、ライトシステムセクタリスト（ＷＳＳＬ）と称する。また、コントローラは、ＲＰおよびＳＷＰによって使用され且つライトブロックリストに類似する対応するブロック順位リストを前記一時的記憶域内に記憶しても良い。以下、これら２つのリストを、再配置ブロックリスト（ＲＢＬ）およびライトシステムブロックリスト（ＷＳＢＬ）と称する。また、物理セクタアドレスの開始と、最後のＳＡＴ更新後に移動データもしくはシステムデータが書き込まれたセクタを有するブロック間のリンクとが、半導体メモリの前記制御ブロック（ＣＢｓ）の少なくとも１つに記憶されても良い。これにより、メモリを単に走査し且つ最後のＳＡＴ更新後にＲＰおよびＳＷＰのそれぞれによって書き込まれたセクタ内の論理アドレスを読み込むことによって、ホストプロセッサに対する電力の除去および回復後に、ＲＳＬおよびＷＳＳＬを再構成することができる。
【００２６】
前述した任意の実施例における前記各セクタは、メモリの単一の「ページ」、すなわち、メモリセクタにおける前記ブロック内の1列のメモリセルから成る。しかしながら、本発明は、そのようなセクタフォーマットのみに限定されるものではなく、時として（例えば、ＮＯＲ型のＲＡＭを使用する場合）、前記各セクタが１ページよりも少なく、あるいは、１ページより多くても良い。また、後者の場合、前記セクタの全てが必ずしも同じサイズである必要はない。例えば、本出願人の過去の国際特許出願ＰＣＴ／ＧＢ９９／００１８８号に開示されているようなデータ編成スキームをコントローラによって使用して、半導体メモリ中に存在する個々の欠陥を避けるように適切なサイズ（サブセクタサイズ）のセクタを形成することができる。
【００２７】
前述したように、各セクタは個々にアドレス可能である。各セクタは、それぞれ個々にアクセス可能な複数のセクタ部を備え、コントローラが、各セクタ部に対して個々に書き込んだり、各セクタ部から個々に読み込んだりしても良い。無論、可能な最も小さいセクタ部のサイズが、アドレス可能な最小のメモリユニットである。ＮＯＲ型メモリにおいて、例えば、アドレス可能な最小のメモリユニットは、一般に、１バイトである。
【００２８】
好ましくは、コントローラは、均一にサイズ設定されたデータセグメント内のメモリセクタに対してデータを書き込み、また、前記メモリセクタからデータを読み込む。全てのメモリセクタが同じサイズである場合、前記各データセグメントは、前記メモリセクタのサイズと同じサイズであることが望ましい。各データセグメントは、ホストプロセッサからのデータ構造（例えば、ファイルまたはシステムデータ）や、コントローラによって形成されるデータを備えていても良い。
【００２９】
半導体メモリがＮＡＮＤ型デバイスに基づく場合、コントローラは、不良セクタを含む不揮発性メモリ内のブロックのブロックアドレスリスト（以下、不良ブロックリスト（ＢＢＬ）と称する）を、１または複数の前記制御ブロックに記憶することが望ましい。この場合、コントローラは、そのようなブロックのそれぞれを「非消去」ブロックとして処理する。これにより、そのようなブロックは、一時的記憶域内に記憶される消去ブロックのリスト内に現れず、コントローラは、データをそのブロックに書き込まない。
【００３０】
メモリがＡＮＤ型デバイスに基づく場合、コントローラは、任意の不良セクタのアドレスリストを、１または複数の前記制御ブロック（ＣＢｓ）に記憶することが望ましい。この場合、コントローラは、少なくとも１つの不良セクタを含む任意のブロック内の良好なセクタを使用するため、また、任意の不良セクタをスキップするために、１または複数の前記ライトポインタ（ＷＰ）を制御する。無論、１または複数の不良セクタを含む１つのブロックが消去される後者の場合、そのブロック内の良好（すなわち、非欠陥）なセクタは、ブロック消去操作中に個々に消去される。
【００３１】
また、コントローラは、好適に、全てのＳＡＴブロックのブロックアドレスのリストを、１または複数の前記制御ブロック内に記憶する。このリストは複数のリスト部分から成ることが望ましく、以下、各リスト部分をテーブルブロックリスト（ＴＢＬ）と称する。前記各リスト部分は、論理的に連続するＳＡＴブロックおよび対応する任意のＡＳＢｓから成る群のブロックアドレスを含んでいる。
【００３２】
コントローラは、１または複数の前記制御ブロックを、以下にブートブロック（ＢＢ）と称する専用のメモリブロック内に記憶することが望ましい。また、データセキュリティのために必要な他の重要な情報は、ブートブロック内、例えば不良ブロック（あるいは、不良セクタ）のリスト内に記憶されても良い。好ましくは、不良セクタを全く含まないメモリセクタの第１のブロックが、ブートブロック（ＢＢ）として指定される。
【００３３】
好ましくは、コントローラは、全ての良好なセクタを含むブロックを、単に、ＳＡＴブロック、制御ブロック、ＡＳＢｓ、ＢＢｓとして使用する。
【００３４】
一時的記憶域（例えば、コントローラマイクロプロセッサ内のＳＲＡＭやＤＲＡＭのような、メモリシステム内のＲＡＭ）内にキャッシュが設けられても良い。この場合、コントローラは、ＳＡＴから（コントローラによって）最も新しくアクセスしたＳＡＴエントリーを含む連続するＳＡＴエントリーの群をキャッシュ内に記憶する。また、これによって、アドレス変換速度が向上する。また、アドレス変換速度の向上は、全てのＡＳＢ及びこれらが関連付けられるＳＡＴブロックの物理アドレスのリストであって、ＳＡＴセクタ書き込み操作が実行される度に更新されるリスト（以下、ＡＳＢリストすなわちＡＳＢＬと称する）を前記一時的記憶域内に形成することによって達成されても良い。同様に、非常に高速の論理−物理セクタアドレス変換を可能にするため、制御ブロック内のＴＢＬの部分は、前記一時的記憶域に記憶されても良い。
【００３５】
半導体メモリは、単一のメモリチップの形態を成す単一のメモリアレーを備えていても良く、あるいは、複数のメモリチップの形態を成す複数のメモリアレーを備えていても良い。メモリが複数のチップから成る場合、コントローラは、好適に、複数のメモリチップ内のメモリセクタを、多数の仮想ブロックへと形作る。前記各仮想ブロックは、前記各メモリチップから消去可能な１つのメモリセクタブロックを備え、好ましくは、コントローラは、前記仮想ブロックを、消去処理されるブロックおよび消去処理されないブロックにソートする。コントローラは、好ましくは、消去処理される仮想ブロックのリストを備えるとともに、これを、コントローラのマイクロプロセッサのＳＲＡＭであっても良いメモリシステム内の一時的記憶域に記憶する。コントローラは、連続セクタ書き込み操作のそれぞれにおいて、ライトポインタ（ＷＰ）（設けられている場合には、ＲＰおよびＳＷＰ）を１つのチップから他のチップへと移動するように制御することが望ましい。この場合、ライトポインタは、仮想ブロックの消去可能な１つのブロック内の１つのセクタから移動し始め、１つのセクタが仮想ブロックの消去可能な各ブロック内に書き込まれるまで、仮想ブロックの消去可能な他の各ブロック内の１つのセクタへと連続的に移動するとともに、その後、最初のセクタが書き込まれたチップへと戻り、同様の方法で進んで、仮想ブロックの消去可能な各ブロック内の他の１つのセクタを一杯にする。その後も同様に移動し、結果的に、仮想ブロックをデータで一杯にする。その後、ライトポインタ（ＷＰ）は、消去処理される前記仮想ブロックリスト内の次の仮想ブロックへと移動して、この次の仮想ブロックを同様の方法によって一杯にする。コントローラは、それ自身が実行するｎ回の連続セクタ書き込み操作（この場合、ｎは、メモリシステム内の半導体メモリチップの数以下）の度に、ｎ個の各チップ内の１つのセクタに対して略同時に書き込むことができるように構成されていることが望ましい。好ましくは、コントローラは、仮想ブロック内の消去可能な全てのブロックを同時に消去することによって、任意の仮想ブロックの消去を実行する。
【００３６】
言うまでもなく、メモリシステムのコントローラは、コントローラデバイスとして回路内に実質的に実装されていても良いが、少なくとも部分的には、コントローラデバイスのメモリ内に保持されるファームウエアとして具現化されることが望ましい。コントローラは、半導体メモリとして、同じチップ（あるいは、同じ複数のチップのうちの１つ）上に一体形成されていても良い。
【００３７】
本発明の第２の態様によれば、複数の半導体メモリチップを備え、各チップは、個々にアドレス可能で且つセクタの消去可能なブロック内に配置される複数の不揮発性メモリセクタを有し、前記各セクタは、メモリ内におけるその物理的な位置を規定する物理アドレスを有する半導体メモリと；
データ構造をメモリに書き込み、また、データ構造をメモリから読み込むためのコントローラと；
を具備するホストプロセッサに接続するためのメモリシステムであって、
前記コントローラは消去可能なブロックを仮想ブロックへと形作り、前記各仮想ブロックは各メモリチップから消去可能なブロックを備え、コントローラは、仮想ブロックを、消去処理されるブロックと消去処理されないブロックとにソートし、コントローラは、満たすべき次の仮想ブロックへと移動する前に、１つの仮想ブロックをデータで満たし、各仮想ブロックは、仮想ブロックの消去可能な各ブロック内の１つのメモリセクタにコントローラが次々と書き込む繰り返しシーケンス（循環シーケンス）により、そのメモリセクタに書き込むことによって満たされ、これにより、異なるチップにセクタが連続的に書き込まれるよう構成されたメモリシステムが提供される。
【００３８】
好ましくは、コントローラは、ホストプロセッサから得られる複数のセクタ書き込みコマンドによって実行するｎ回の連続セクタ書き込み操作（この場合、ｎは、メモリシステム内の半導体メモリチップの数以下）の度に、ｎ個の各チップ内の１つのセクタに対して略同時に書き込むことができるように構成されている。
【００３９】
本発明の第３の態様によれば、個々にアドレス可能で且つセクタの消去可能なブロック内に配置される不揮発性メモリセクタを有する半導体メモリに対してデータ構造を書き込むとともに、前記半導体メモリからデータ構造を読み込み、メモリ内におけるその物理的位置を規定する物理アドレスを前記各セクタが有するコントローラが提供される。このコントローラは、
コントローラが使用されるメモリシステムのホストプロセッサから受け取った論理アドレスを、メモリ内の前記メモリセクタの物理アドレスに変換するとともに、セクタのブロックを、消去処理されるブロックと消去処理されないブロックとにソートするための手段と；
書き込まれるセクタの物理アドレスをホストプロセッサから指し示すライトポインタ（ＷＰ）とを有し、前記ライトポインタ（ＷＰ）は、コントローラによって制御されて、消去処理される任意のブロック内のメモリセクタの物理アドレスを介して所定の順序で移動し、ブロックが一杯になると、他の消去ブロックへと移動し、
セクタ書き込みコマンドがホストプロセッサからコントローラによって受けられると、コントローラは、前記ライトポインタ（ＷＰ）が指し示す物理アドレスを論理アドレスに割当てることによって、ホストプロセッサから受け取った論理アドレスを、データが書き込まれる物理アドレスに変換し、また、そのためにコントローラによって割当てられている各物理アドレスとともに論理アドレスのテーブルをコンパイルするとともに、ホストプロセッサからのデータがメモリセクタに書き込みされる頻度より少ない頻度でＳＡＴを更新するようにコントローラが構成されている。
【００４０】
本発明の第４の態様によれば、個々にアドレス可能で且つセクタの消去可能なブロック内に配置される不揮発性メモリセクタを有する半導体メモリに対してデータ構造を書き込むとともに、前記半導体メモリからデータ構造を読み込み、メモリ内におけるその物理的位置を規定する物理アドレスを前記各セクタが有する方法が提供される。この方法は、
セクタのブロックを、消去処理されるブロックと消去処理されないブロックとにソートし；
書き込まれるセクタの物理アドレスをホストプロセッサから指し示すライトポインタ（ＷＰ）を提供し；
少なくとも１つの前記ライトポインタ（ＷＰ）を制御して、消去処理される任意のブロック内のメモリセクタの物理アドレスを介して所定の順序でライトポインタを移動するとともに、ブロックが一杯になると、他の消去ブロックへとライトポインタを移動させ；
セクタ書き込みコマンドがホストプロセッサからコントローラによって受けられると、前記ライトポインタ（ＷＰ）が指し示す物理アドレスを論理アドレスに割当てることによって、ホストプロセッサから受け取った論理アドレスを、データが書き込まれる物理アドレスに変換し；
変換のためにコントローラによって割当てられている各物理アドレスとともに、論理アドレスのテーブルを、不揮発性半導体メモリ内に記憶し；
ホストプロセッサからのデータがメモリセクタに書き込みされる頻度より少ない頻度でＳＡＴを更新する。
【００４１】
以下、添付図面を参照しながら、本発明の好ましい実施例を単なる一例として説明する。
【００４２】
図１は、ＮＡＮＤ型メモリセルを基本とするフラッシュメモリアレーの１ブロック４における物理的なページ構造を概略的に示している。図１は、ブロック４内の３つのページ１，２，３を示している。物理的な観点からすれば、ページ１は、メモリブロック内の１列のメモリセルから成る。メモリは、複数のブロックに分割されており、各ブロックは、メモリセルの多数の列（すなわち、多数のページ）から成る。各ページ１，２，３は、後述する５２８バイトのフラッシュメモリシステムにおいて、物理的なメモリ空間の１セクタとして扱われる。メモリ内の各ページ１は、個々にアドレス可能（読み込み／書き込み、および、オペレーションの削除）であり、また、これらのページはブロック内で消去することができる。以下、そのようなメモリアレーを組み込むメモリシステムについて説明する。また、ＡＮＤ型もしくはNOR型のフラッシュメモリに基づくメモリシステムについても、別途、後述することにする。
【００４３】
図２は、フラッシュメモリチップ５およびコントローラチップ８を組み込んだメモリシステム１０を示している。フラッシュメモリチップ５は、フラッシュメモリアレー６と、コントローラチップ８のコントローラバッファ９に接続されたリード／ライトバッファ７とを備えている。また、コントローラチップ８は、コントローラマイクロプロセッサ１１と、エラー修正コード（ECC）ジェネレータチェッカ１２とを有している。コントローラバッファ９はホストコンピュータプロセッサ（図示せず）に接続しており、ホストコンピュータプロセッサは、コントローラチップ８の出力部Ｏ／Ｐを介して、メモリシステム１０に接続されている。コントローラチップ８（以下、コントローラと称する）は、メモリアレー６に対するデータ構造の読み込み及び書き込みを制御する。メモリシステム１０に接続されたホストプロセッサ２は、読み込み及び書き込みコマンドを、コントローラ８に送る。データは、５１２バイト部分すなわち「ホストデータセクタ」の状態で、ホストによりアクセス可能であり、各ホストデータセクタは論理セクタアドレス（LA）を有している。コントローラ８は、ホストプロセッサからLAを受けて、これを後述するように物理アドレスに変換する。この場合（NAND型メモリの場合）、各物理アドレス（PA）は、アレー６内のフラッシュメモリのページ１の物理的な位置を規定する。各LAは、１つの２４ビット領域の形態を成している。LAを使用してPAを入手することは、アドレス変換と称されており、一般に、リード／ライドのアクセスを行なう度に必要となる最も頻繁な演算である。コントローラ８は、データセグメントの状態でデータをメモリアレー６に書き込む。各セグメントは５２８バイトの大きさを有している。ホスト（例えば、ユーザファイルまたはシステムデータ）から受け取った５１２バイトの各データのため、コントローラは、マイクロプロセッサ１１によって形成された４バイトのヘッダーと、ECCジェネレータチェッカ１２によって形成された１２バイトのECCとから成る１６バイトのデータを形成する。コントローラは、フラッシュバッファ７を介して、この１６バイトのデータを、メモリアレー６の１ページに書き込まれる５２８バイトのデータセグメントへと編成する。
【００４４】
ホストデータセクタの論理アドレス（LA）は、４バイトのヘッダーの状態で、ホストデータセクタが書き込まれるフラッシュセクタ１内に記憶される。読み込み操作時、フラッシュメモリアレーの関連するセクタ内に記憶されたデータは、フラッシュリード／ライトバッファ７を介して、アレー６からコントローラバッファ９へと読み込まれる（同時に、データ内のエラーをチェックするために、ECCジェネレータチェッカへと読み込まれる）。そして、コントローラは、記憶されたLAがホストコンピュータによって要求されているLAと一致していることをチェックするため、ホストコンピュータによるコントローラバッファ９からのデータの読み込みを許容する前に、４バイトのヘッダーを読み込む。
【００４５】
コントローラ８は、個々のセクタベーシス上でメモリ６に書き込まれるデータの物理的な場所を管理する。更に詳細に後述するように、コントローラは、消去されたブロックのビットマップをメモリ６内に記憶するとともに、消去されたブロックが書き込みのために使用されるブロックの物理アドレスの昇順で順序付けられた少なくとも幾つかの消去されたブロックのリスト（ネクストイレーズドブロック（Next Erased Block(NEB)）リスト）を、マイクロプロセッサ１１内のSRAM内にコンパイルする。ホストデータセクタが書き込まれる物理的なページの場所は、ホストから受ける論理アドレスに依存しない。各ホストデータセクタは、サイクリックライトポインタによって規定されるアドレスに書き込まれる。異なるタイプの書き込み操作のため、特定のライトポインタが使用される。すなわち、ホストファイルデータの書き込みは、データライトポインタ（WP）によって指し示されたアドレスで実行され、ホストシステムデータの書き込みは、システムライトポインタ（SWP）によって指し示されたアドレスで実行される。リロケーションポインタ（RP）は、ホストによって直接に順序付けられなかったセクタを書き込むために使用される。これらの各ライトポインタは同じ性質を有している。すなわち、各ポインタは、ブロックの複数のページにわたって連続的に移動し、その後、ネクストイレーズドブロック（NEB）リスト内の次に消去されたブロックの第１のページへと移動する。消去されないファイルを含むブロックは、「非消去」ブロックとして処理され、ポインタが１つのブロックから他のブロックへと移動する際に読み飛ばされる（そして、NEB内に含められることはない）。
【００４６】
セクタリロケーションアルゴリズム
セクタのブロック４を消去して、旧データを含むセクタ空間を回復させる場合には、ブロックを消去できるように、有効セクタと廃棄セクタとの組み合わせを含むブロックからセクタを再配置しなければならない。原理的には、コントローラ８により、特定のライトポインタに対応する１つのブロックだけが、旧データセクタを常時収容することができる。ホストによって書き込まれるセクタが第２のブロック内で廃棄セクタを形成する場合には、有効セクタを再配置した後、必要に応じて、既存のブロックをまず最初に消去しなければならない。
【００４７】
したがって、大部分のブロックが有効セクタと廃棄セクタとを有している場合には、多数のセクタの消去および広範囲にわたるセクタの再配置は避けられない。これは、ファイルの一部としてホストにより書き込まれたセクタの順序が、以前にセクタが書き込まれた順序と異なる場合にだけ、生じる。これは、殆どのアプリケーションにおいて、通常のケースではない。しかしながら、通常のファイルの書き込み操作の場合であっても、関連しないデータを、ファイルの「先端（head）」や「末端（tail）」を含むブロックからリロケーションしなければならない。他のファイルデータと混合されたシステムデータの再配置によって他のブロックの消去が別途に引き起こされ、これによって、このブロックからの更なる再配置が引き起こされるといった可能性が高い。
【００４８】
したがって、再配置および消去の総数を減少するために、システムデータは、厳密に識別され、常に、システムライトポインタ（SWP）のアドレスに書き込まれ或いはリロケーションされる。システムデータに関する情報は、初期化プロセス中に得られ、マイクロプロセッサのSRAM１３内に記憶される。無論、データファイルは、ホストコンピュータプロセッサ内のファイルシステムによって、フラッシュメモリに書き込まれる。ファイルデータは、ファイルシステムによって、複数のクラスタに分割される。この場合、各クラスタは、（一般には）５１２バイトの連続ホストデータセクタの群である。ファイルシステムは、メモリに記憶されたファイルの属性および各ファイルを形成するクラスタの場所に関するテーブルおよびデータ構造を維持する。これらのテーブルおよび構造は、フラッシュメモリ内に（システムデータとして）記憶されるとともに、ファイルデータが書き込まれる場合にはいつでも、ファイルシステムによって更新される。ファイルデータは、メモリに記憶される際、ファイルに関連するシステムデータ（ディレクトリおよびFAT（file allocation table）に関する）を伴う。一般に、メモリに書き込まれるシステムデータは、BIOSパラメータコンフィギュレーション情報、各エントリーが特定のクラスタに関連するファイルアロケーションテーブル（FAT）の１つ又は２つのコピー、ルートディレクトリ、サブディレクトリを含んでいる。コントローラは、ホストシステムデータセクタを書き込むための操作を認識するように構成されており、これにより、このホストデータセクタを、ファイルデータのホストデータセクタと異なるように取り扱うことができる。システムセクタの書き込みを認識するため、以下のように、多数の方法を単独で或いは組み合せて使用しても良い。
１．システムデータは、単一のセクタ書き込みコマンドを用いて書き込まれる。一方、ファイルデータは、複数のセクタ書き込みコマンドを用いて書き込まれても良い。
２．ファイルシステムルートディレクトリ内で最後のセクタアドレスよりも下位にあるLAを有する全てのセクタが、システムセクタである。このアドレスは、ホストファイルシステムによってメモリ内に記憶されたＢＩＯＳパラメータブロック内に保持された情報から決定することができる。
３．サブディレクトリ内の全てのセクタがシステムセクタである。サブディレクトリアドレスおよびサイズは、全てのルートディレクトリおよびサブディレクトリのエントリーを読み込むことによって認識することができる。
４．システムセクタは、しばしば、それらが再度書き込まれる直前に、ファイルシステムによって読み込まれる。
【００４９】
同じ目的のため、再配置されるファイルデータセクタは、リロケーションポインタ（ＲＰ）によって規定されるアドレスに書き込まれ、したがって、ホストによって書き込まれたセクタと混合されない。
【００５０】
本発明の変形例においては、再配置されたシステムデータが書き込まれる場所を指し示すために、別のライトポインタを準備しても良い。この別個のポインタは、システムリロケーションポインタ（ＳＲＰ）と称され、常に、ＷＰおよびＳＰと異なるブロック内に配置される
【００５１】
ブロック消去アルゴリズム
本発明において、消去されるブロックの任意選択や、バックグラウンド消去のスケジューリングは、全く実行されない。第２のブロック内の廃棄セクタが、保留のホストセクタ書き込みコマンドによって生じる場合には、通常、廃棄セクタを含むブロックのリスト消去が即座に実行される。同様に、制御ブロックの書き換えの結果として、ブロックが廃棄制御データを全体として含む場合には、ブロックは即座に消去される（詳しく後述するが、制御ブロックは、コントローラ８が特定の制御データを書き込む場所である）。
【００５２】
したがって、通常、再配置によって旧データを形成することはできないため、旧データを有する存在可能なブロックは、たった２つにすぎない。すなわち、データライトポインタ（ＷＰ）に対応し且つ廃棄ファイルデータを含むカレントオブソリートブロック（Current Obsolete Block(COB)）、および、システムライトポインタ（ＳＷＰ）に対応し且つ廃棄システムデータを含むカレントオブソリートシステムブロック（Current Obsolete System Block(COＳB)）だけである。しかしながら、各タイプのもう１つの廃棄ブロックが一時的に存在する場合がある。これは、消去されるブロック（旧データが他のブロック内に形成された）がその時点で任意のタイプのライトポインタを含んでいる場合に生じる。この場合、そのようなブロック（保留オブソリートブロック（Pending Obsolete Block（POB））と呼ばれる）の消去は、このブロック内の全ての消去ページが使用され且つ関連するライトポインタが他のブロックへ移動されるまで、延期されなければならない。この時点で、保留の廃棄ブロックが即座に消去される。
【００５３】
前述したように、消去されたブロックの同一性は、全てのフラッシュブロックアドレス空間を測るビットマップ（ＭＡＰ）内で維持され、このＭＡＰ内に、各ブロックの消去状態が記録される。セクタもしくは制御データをブロックアドレスの順序で連続的に書き込むために、消去されたブロックは破壊される。バックグランド消去は実行されない。１または複数の不良セクタを含む任意のブロックは、不良ブロックとして処理されるとともに、コントローラによって「非消去」ブロックとして処理される。
【００５４】
ウェアレベリング（Wear Levelling）
サイクリックライトポインタを使用して単一のセクタ書き込み管理を行なうと、フラッシュメモリ内に固有のウエアレベリングが生じる。しかしながら、ブロックを消去するアルゴリズムは、旧データもしくは消去済みデータとともに存在すると直ちに、セクタ書き込み操作のシーケンスの機能であるウエアレベリング特性を形成する。任意の更なるウエアレベリングが必要であると思われる場合には、ランダムブロック内でセクタを一時的に再配置してこれらのブロックを消去できるようにする別個の更なる技術を組み込んでも良い。
【００５５】
アドレス変換原理
主なアドレス変換手段は、基本的に、論理アドレスによって順序付けられたセクタの物理アドレスのリストであるセクタアドレステーブル（ＳＡＴ）である。したがって、N番目のＳＡＴエントリーは、通常、論理アドレスNを有するセクタのための物理アドレスを含んでいる。ＳＡＴは、多数の独立ブロック（ＳＡＴブロック）として編成されるとともに、ＳＡＴブロックの個々のページを書き換えることによって更新される。ＳＡＴブロックは、これとリンクされてＳＡＴブロックの個々のページの修正ができる専用の追加ＳＡＴブロック（ＡＳＢ）を有していても良い。セクタ書き込み性能に対する影響を最小限にするために、ＳＡＴページは、各セクタ書き込み後に書き換えられない。無論、頻繁には書き換えられない。
【００５６】
したがって、ＳＡＴは、最後に更新されてから、書き込まれたセクタに関する正確な物理アドレスを含んでいない。そのようなセクタの論理アドレスは、ライトセクタリスト（ＷＳＬ）、再配置セクタリスト（ＲＳＬ）、ライトシステムセクタリスト（ＷＳＳＬ）と呼ばれるリストの状態で、プロセッサによって、そのＳＲＡＭ１３内に記憶される。これらのリストは、ホストによって書き込まれた或は消去前にブロックから再配置されたセクタの順序と正確に一致している。連続的にセクタが書き込まれる場合、ＷＳＬおよびＲＳＬエントリーは、第１のセクタ論理アドレスおよびセクタ群長さを規定する。セクタ群は、１つのブロックから他のブロックへとジャンプすることができない。マイクロプロセッサ１１は、フラッシュメモリ内のセクタ系列の始点と、セクタ書き込みのためのブロックが使用される順番とに関する情報（前述したリストに対して相補的で且つプロセッサのＳＲＡＭ内に形成される特定のリスト、すなわち、ライトブロックリスト（ＷＢＬ）、ライトシステムブロックリスト（ＷＳＢＬ）、再配置ブロックリスト（ＲＢＬ）は、後述するが、この情報を記憶するために使用される）を有している。
【００５７】
ＷＳＬ、ＲＳＬおよびＷＳＳＬ（そして、これらに相補的なリスト、すなわち、ＷＢＬ、ＷＳＢＬ、ＲＢＬ）は、最後のＳＡＴが書き換えられた後に書き込まれた系列内のセクタのヘッダー内で論理アドレスを読み込むことによってメモリシステム１０に対して電力を除去および回復した後、マイクロプロセッサ１１によって再構成され得る。系列および系列内のセクタを含むブロック間のリンクにおける開始セクタアドレスは、マイクロプロセッサにより、フラッシュメモリ内の制御ブロック（ＣＢ）と呼ばれる特定のデータ構造内のエントリーから得られる（制御ブロック（ＣＢ）については後述する）。この方法によれば、カードから予期しない電力の除去が生じた際には、データの高い安全性を確保できる。
【００５８】
無論、前述したように、システムリロケーションポインタ（ＳＲＰ）が含まれている場合には、システムリロケーションセクタリスト（ＳＲＳＬ）および相補的なシステムリロケーションブロックリスト（ＳＲＢＬ）が形成され、これらは、ＷＳＬ、ＲＳＬ、ＷＳＳＬ、および、ＷＢＬ、ＲＢＬ、ＷＳＢＬのそれぞれに関し、前述したと同様の方法で使用される。
【００５９】
コントローラ８によってデータが書き込まれるフラッシュメモリセクタ（すなわち、ページ）１内の本実施例に係るデータ構成が図３に示されている。セクタ１は、まず、例えばホストデータセクタから成る５１２バイトの情報部分１ａを含んでおり、それに続いて、４バイトのヘッダー部分１ｂおよび１２バイトのＥＣＣ１ｃを順に含んでいる。図４に示されるように、ヘッダー部分は、それ自身、データ構造タイプ部分２０と、ヘッダーパラメータ２２（例えば、情報部分１ａ内に書き込まれたホストデータセクタの論理セクタアドレス（ＬＡ）から成る）とを備えている。データ構造タイプは、データセクタ、削除データセクタ、セクタアドレステーブル（ＳＡＴ）ページ、追加ＳＡＴブロック（ＡＳＢ）ページ、制御ブロック（ＣＢ）ページ、ブートブロック（ＢＢ）ページのいずれか１つを示す値を有することができる。
【００６０】
削除データセクタ
削除データセクタは、物理的には、フラッシュメモリ内で、廃棄もしくは削除セクタデータすなわちＣＯＢもしくはＣＯＳＢを含むことが許容されるブロックにだけ一時的に存在する。それは、ヘッダー内のデータ構造タイプ領域の「オールゼロ」状態、あるいは、適当な場合には他の手段、によって認識される。
【００６１】
セクタアドレステーブル（ＳＡＴ）
ＳＡＴは、論理セクタの物理アドレスを含む一連のエントリーである。エントリーＮは、論理セクタＮのための物理アドレスを含んでいる。ページ内のエントリーは、ページ内に記憶されたデータの５１２バイトの情報部分１ａを占めている。１つの操作でＳＡＴページが書き込まれるため、全ページを保護するためにＥＥＣ領域を使用でき、ＳＡＴページ内の各エントリーのための別個のＥＣＣ領域が不要となる。
【００６２】
実際に、ＳＡＴは一連のブロックとして記憶され、各ブロックは最大で６４のＳＡＴページを有している。別個のデータ構造およびテーブルブロックリスト（ＴＢＬ）は、全てのＳＡＴブロックのブロックアドレスを規定するため、制御ブロック（後述する）内に保持されている。各ＳＡＴエントリーは、セクタの物理アドレスを規定するとともに、３バイトを占めており、図５に示されるように、
チップ数      ５ビット、３２個のチップのアドレスが可能。
ブロック数  １３ビット、１チップにつき８１９２個のブロックを設定できる。
セクタ数      ６ビット、１ブロックにつき最大６４個のセクタを与える
を備えている。
ＳＡＴページデータ構造上のヘッダーパラメータ領域は、ＳＡＴブロックおよびページ数を含んでいる。
【００６３】
８ＭＢおよび８ＶＢの容量のブロックを有するフラッシュカードは約１６Ｋのセクタを記憶することができ、したがって、そのＳＡＴは約１６Ｋのエントリーを有している。ＳＡＴ内の５１２バイトのページは１７０個のエントリーを有しており、したがって、ＳＡＴは６ブロックに相当する約９６ページを占める。大きなフラッシュメモリカード（２ＧＢ、８ＶＢブロック）は１５４３個のブロックを占める。
【００６４】
追加ＳＡＴブロック（ＡＳＢ）
追加ＳＡＴブロック（ＡＳＢ）は、特定のＳＡＴブロックにリンクされてＳＡＴブロックの１ページを修正する（すなわち、書き換える）ことができる専用のブロックである。幾つかのＡＳＢを設けることもできる。各ＡＳＢは、それがリンクされるＳＡＴブロックに対する拡張子として作用する。ＳＡＴブロックが修正される場合、一般に、ＳＡＴブロックは、僅かな数のページ内にだけ修正データを含んでいる。ＡＳＢによって、これらの修正ページだけを書き換えることができる。これは、全ページの書き込み、および、ＳＡＴブロックを書き換えるために必要な廃棄ブロックの消去よりも極めて速い操作である。ＡＳＢページのヘッダーパラメータ部分は、それがリンクされるＳＡＴブロックとＳＡＴページ数とを、それが取って代わるブロック内に含んでいる。ＡＳＢページ内に記憶されたデータの情報部分１ａのフォーマットは、ＳＡＴページのそれと同じである。
【００６５】
制御ブロック（ＣＢｓ）
コントローラ８は、１または複数の制御ブロック（ＣＢｓ）内に、幾つかの制御アドレス情報を記憶する。ＣＢｓは、コントローラ８によって周期的に更新されるとともに、メモリシステム１０の初期化中、あるいは、操作中において時々、アクセスされなければならない。情報は、独立に書き込むことができる所定サイズのエントリーの形態で、ＣＢｓ内に記憶される。各ＣＢ内にはページ毎に９個のエントリーが存在する。エントリーは、エントリーそれ自身内のＣＢヘッダー領域によって認識されるデータタイプの以下のリストのうちの１つに関連している。
・テーブルブロックリスト（ＴＢＬ）
・ファイルデータ書き込み操作に対応する、エントリー内に幾らかの領域を有するブロックのマップ（ＷＭＡＰ）
・システムデータ書き込み操作に対応するブロックのマップ（ＳＭＡＰ）
・再配置セクタ操作に対応するブロックのマップ（ＲＭＡＰ）
新しいデータをＣＢに加えなければならない場合には、適当なタイプの別個のエントリーが、最後の有効なエントリーに続くように即座に加えられる。大きなカードにおいては、ＣＢが１ブロック以上を占めていても良い。全てのＣＢブロックのアドレスは、フラッシュメモリ６内のブートブロック（ＢＢ）に記憶される。
【００６６】
データのセキュリティーのため、ＣＢ（及びＢＢも）の各ブロックの第１ページ（ヘッダーページと呼ばれる）は、エントリーを含んでおらず、図３のような全ページフォーマットを有している。このページのヘッダー１６のヘッダーパラメータ領域は、ＣＢを認識するサインと、そのブロック数（制御ブロックのセット内でのブロックの連続番号）とから成る。
【００６７】
第１のＣＢブロックのヘッダーページの情報領域は、ブロックリンク情報データによって占められる。ＣＢ書き換え操作に続いてシステムを初期化しなければならない場合、ブロックリンク情報データは、ＷＢＬ、ＷＳＢＬ、ＲＢＬをリストアするために必要な全ての情報を提供する。ブロックリンク情報データは、最後のＳＡＴページ書き込み操作が実行された後に書き込まれた全てのＭＡＰ（ＷＭＡＰｓ、ＳＭＡＰｓ、ＲＭＡＰｓ）から収集されたリンク領域を備えており、その書き換え操作中に、新しいＣＢの第１ブロックのヘッダーページに書き込まれなければならない。ブロックリンク情報は、４バイトのエントリーのタイミング順リストであり、各エントリーは、ライトプリンタのうちの１つによってアクセスされるブロックのブロックアドレスと、それがどのポインタであったかを認識するフラグとを含んでいる。メモリ空間内の多数のブロックがＣＢのために与えられ、これが一杯になると、アクティブエントリーは、ＮＥＢ（すなわち、それは、コンパクトであり、対応するヘッダーページが加えられる）から、次の利用可能な消去ブロックへと書き換えられる。ＣＢページの情報領域は、長さが等しい９個のエントリーを有している。ＣＢページのＥＥＣ領域は、使用されないが、他の目的のために使用されても良い。
【００６８】
１つのＣＢ内の１つのエントリーは、５６バイトの大きさであり、図６に示されるフォーマットを有しているとともに、エントリーのデータタイプを認識するヘッダー２４と、情報領域２６と、ＥＣＣ領域２８とを備えている。ＥＣＣは、全ページのために使用される場合と同様の形態を成している。
【００６９】
テーブルブロックリスト（ＴＢＬ）
ＣＢは、テーブルブロックリスト（ＴＢＬ）を含んでいる。ＴＢＬは、ＳＡＴの連続するブロックおよび任意の対応するＡＳＢからなるブロック群のアドレスを有している。通常、複数のＴＢＬは、必要な全てのＳＡＴブロックアドレスを規定するために要求される。関連するＴＢＬは、修正されたＳＡＴもしくはＡＳＢのブロック位置を記録するため、ＳＡＴブロック書き込み操作もしくは新たなＡＳＢの割り当ての後、直ちに、書き込まれる。また、ＴＢＬは、ＳＡＴページ書き込み操作が実行される際にその時点でのライトポインタの位置を記録するために使用される領域を有している。したがって、ＴＢＬは、ＳＡＴページ書き込み操作が実行される場合には常に書き込まれる。ＴＢＬの１つのエントリーが図７に示されている。このエントリーは、ＣＢエントリーの情報領域２６を占めている。１バイトの第１のＴＢＬエントリーは、ＴＢＬエントリーの連続番号Ｎｏである。各ＴＢＬエントリーは、８個のＳＡＴ−ＡＳＢブロック対の値を維持している。すなわち、各ＴＢＬエントリーは、ＳＡＴブロックＮ〜Ｎ＋７のための値を維持している。この場合、ＮはＮｏ＊８である。
【００７０】
ＷＰはライトポインタページ領域であり、ＲＰはリロケーションポインタ領域であり、ＳＷＰはシステムライトポインタ領域である。これらの領域は、ＷＳＬ、ＲＳＬ、ＳＳＬリリース操作後、ブロック内でのＷＰ、ＲＰ、ＳＷＰの位置を決定する。ＷＰ、ＲＰ、ＳＷＰは、ＷＳＬ、ＲＳＬ、ＳＳＬリリース操作が終了した時（すなわち、最後のＳＡＴ書き込み操作）だけ有効である。この状態は、エントリーヘッダー内のフラグビットを用いて設定される。フラグ＝１は、エントリーがＷＳＬまたはＲＳＬのリリース中に書き込まれた最後の１つであり、したがって、ＷＰ領域が有効であることを意味している。
【００７１】
保留されている３バイトは、将来の追加の可能性のために残されている。
ＳＡＴ−ＡＳＢ対は、保留（Reserved）領域の後に設けられており、８個のエントリーの列である。各エントリーは、ＳＡＴブロックアドレスとＡＳＢブロックアドレスから成る。
ＳＡＴＮはＮ番目のＳＡＴブロックの数であり、ＡＳＢＮはＳＡＴＮにリンクされるＡＳＢの数である。ＳＡＴもしくはＡＳＢが存在しない場合には、この領域の値は０に等しい。
ＳＡＴブロックが再配置される度に、あるいは、新たなＡＳＢがＳＡＴブロックにリンクされる度に、新たなＴＢＬエントリーがＣＢに加えられなければならない。
【００７２】
ＭＡＰ（ＷＭＡＰ、ＳＭＡＰ、ＲＭＡＰ）
ＣＢは、様々なＭＡＰエントリーを含んでいる。３つの異なるタイプのＭＡＰエントリーがある。各マップエントリは、異なるタイプの書き込み操作に対応している。すなわち、ＷＭＡＰは、ファイルデータの書き込み或は削除操作に対応しており、ＳＭＡＰは、システムデータの書き込み操作に対応しており、ＲＭＡＰは、セクタ再配置操作に対応している。
【００７３】
全てのＭＡＰエントリーの情報領域は、同じフォーマットを有している。情報領域は、連続ブロック群の消去状態を規定するビットマップを含んでいる。２５６個のブロックの消去状態は、ＭＡＰ内の３２バイト領域内の２５６ビットによって規定される。情報領域は、それが関連するブロック群を認識するレンジ（Range）領域を有している。他の領域は、ブロック間でライトポインタが移動する際の行き先ブロックを規定する。また、ＭＡＰは、旧データを含むフラッシュメモリ内のブロックの場所を認識する複数の領域を有している。すなわち、ＯｂｓＣは、ＣＯＢ（またはＣＯＳＢ）のために使用され、ＯｂｓＰは、保留の廃棄ブロックのために使用される。廃棄ブロックが存在しない場合には、対応する領域が０に設定される。ＥＢ領域は、現在の書き込み或は削除セクタ操作によって消去が引き起こされる１つのブロックの１つのアドレスを含んでいる。そのようなブロックが存在しない場合には、ＥＢ領域が０に設定される。このＭＡＰエントリーフォーマットが図８に示されている。
【００７４】
ライトポインタのうちの１つが１つのブロックから他のブロックへと移動される場合には、消去ブロックの使用を示すために（ビットマップ領域が更新される）、また、ブロック間のリンクを記録するために（リンク領域が更新される）、対応するＭＡＰエントリーが加えられなければならない。書き込み（あるいは、削除セクタ）操作によって新しいブロック内に廃棄（または削除）データが形成される場合には、新しい廃棄ブロックの位置を記録するために（ＯｂｓＣやＯｂｓＰが更新される）、また、ブロックが消去されるべきであることを示すために（ＥＢ領域が更新される）、また、新たな消去ブロックが出現することを示すために（ビットマップ領域が更新される）、対応するＭＡＰも加えられなければならない。したがって、通常、ＭＡＰの少なくとも２つの領域が同時に書き込まれ、これは、単一のページ書き込み操作で達成されても良い。
【００７５】
ブートブロック（ＢＢ）
ブートブロックの機能は、カードからの予期しない電力の除去時にデータの高いセキュリティーを提供すると同時に、初期化プロセス中における広範囲な走査を避けることである。大きなカードにおいて、ＢＢは１つ以上のブロックを有している。ＢＢは、カード内で、第１の非欠陥ブロックを占めている。データセキュリティのため、カード内には、次の非欠陥ブロックを占めるＢＢのコピーが存在する。ＢＢ及びそのコピーは、書き換え後、同じ場所に置かれなければならない。
【００７６】
ＢＢは、制御ブロックと同じ構造を有しており、以下のタイプのエントリーを含んでいる。
・サイン
・インターリービングイネーブル
・不良ブロックリスト
・制御ブロックポインタテーブル（ＣＢＰＴ）
新しいデータをＢＢに加える必要がある場合には、最後の有効エントリーの後に直ぐ続くように、適当なタイプの別個のエントリーが加えられる。サインとＢＢＬエントリーは、前述したものと全く同じフォーマットを有している（無論、サインエントリーのサイン領域は、異なっており、固有のものである）。制御ブロックポインタテーブルエントリーは、ＣＢの全てのブロックに対するポインタを有しており、ＣＢが書き換えられた直後に更新される。
【００７７】
予備リンク（ＰＬ）
また、ＣＢは、予備リンク（ＰＬ）を有している。予備リンクの目的は、ＣＢ書き換え操作後にシステムを初期化する必要がある場合に、ＷＢＬ（後述する）をリストアするために必要な全ての情報を提供することである。予備リンクは、最後のＳＡＴページ書き込み操作が実行された後に書き込まれた全てのＭＡＰから収集されたリンクファイルを備えている。ＰＬは、その書き換え操作中、新たなＣＢに対してだけ書き込まれる。
【００７８】
コントローラのＳＲＡＭ内に記憶されたデータ構造
ライトセクタリスト（ＷＳＬ）（すなわち、ホイッスル）を含むマイクロプロセッサのＳＲＡＭ１３内には、様々なデータ構造が記憶されている。ライトセクタリストは、最後のＳＡＴ書き込み後に書き込まれたセクタの論理アドレスを記録する。その目的は、そのようなセクタのために、論理アドレスから物理アドレスへの正確な変換を与えることである。ＷＳＬは、４バイトの長さの１２８個のエントリーのための容量を有している。この場合、各エントリーは、連続的に書き込まれるセクタ群内の第１のセクタの論理アドレスと、セクタ群の長さとを記憶する。セクタ群は、１つのブロックから他のブロックへとジャンプすることができない。ＷＳＬは、ＳＡＴ書き込み直後に空になる。
【００７９】
ＷＳＬ内の論理セクタアドレスの順序は、それらが書き込まれる順序と正確に一致する。したがって、フラッシュメモリ内のＷＳＬの不揮発性コピーは、ＳＡＴが最後に書き込まれた時にライトポインタ（ＷＰ）によって規定される場所で始まる連続的な場所で書き込まれる実際のセクタのヘッダーによって自動的に提供される。したがって、ＷＳＬのコピーをフラッシュメモリ６に明確に形作る必要はない。必要に応じて、これらのセクタは、次のＭＡＰエントリーからのリンク領域の他、ＳＡＴが最後に書き込まれた時のライトポインタ（ＷＰ）の位置を含む制御ブロック領域内に規定される開始アドレスから走査することができる。
【００８０】
任意の論理セクタのための最後のエントリーだけが有効であるため、ＷＳＬの検索は、逆の順序で実行される。セクタの再配置およびブロックの消去が行なわれた場合があるため、先の複製エントリーは、フラッシュメモリ内に置かれた任意の対応する廃棄セクタを有していなくても良い。好ましい場合には、ＷＳＬから複製エントリーを単に除去するようにコントローラが構成される。
【００８１】
また、２つの類似するリスト、すなわち、再配置セクタリスト（ＲＳＬ）およびシステムセクタリスト（ＳＳＬ）は、最後のＳＡＴ書き込み後に書き込まれるシステムデータセクタ（ＲＰおよびＳＷＰのそれぞれによって指し示されたアドレスに書き込まれる）および再配置されたセクタの論理アドレスを記録するマイクロプロセッサのＳＲＡＭ１３内でコンパイルされる。
【００８２】
ＷＳＬ、ＲＬＳ、ＳＳＬがそれぞれ一杯になる度に、ＡＳＢ及び／またはＳＡＴブロックは、ＷＳＬ、ＲＳＬ、ＳＳＬエントリーによって補われる。このような手続きは、ＷＳＬ、ＲＳＬ、ＳＳＬリリースと呼ばれる。このリリースは、必要に応じて、ＡＳＢリリースを引き起こす。ＡＳＢリリースは、ＡＳＢが一杯になった時に生じる。ＡＳＢが一杯になると、各ＳＡＴブロックが書き換えられ、ＡＳＢが消去される。全てのＡＳＢ内に書き込まれたページに関する情報は、ＡＳＢ走査を頻繁に行なわないで済むように、ＲＡＭ内に記憶される必要がある。そのため、ＡＳＢリスト（ＡＳＢＬ）は、ＳＲＡＭ１３内に記憶される。
【００８３】
ＡＳＢＬは、ＳＡＴブロックと現時点でリンクされている全てのＡＳＢブロックのリストであり、ＡＳＢＬ内には各ＡＳＢ毎に１つのエントリーが存在する。図９は、ＡＳＢＬ内の１つのエントリーのフォーマットを示している。この場合、ＬＷＰ＝このＡＳＢブロック内に最後に書き込まれたページの数であり、
ＮＶＰ＝ＡＳＢ内の有効ページ数−１である。
ＡＳＢページ０．．．ＡＳＢページｎ＝１つの列、指数はＡＳＢページ数、値は対応するＳＡＴページ数である。Ｎ＝１ブロック当たりのページ。
【００８４】
ライトブロックリスト（ＷＢＬ）
ライトブロックリストは、ライトセクタリストを補って、マイクロプロセッサのＳＲＡＭ１３内に形成され、ＷＳＬ内のセクタが配置されるブロックを規定する。ＷＢＬは、ＷＳＬリリース直後に空になる。
【００８５】
ＷＳＬおよびＷＢＬが、メモリシステムの初期化中に、走査プロセスによって再構成される。このようにして構成されるＳＲＡＭ内のリストは、電力が最後に除去される前に存在したリストと正確に一致する。
【００８６】
また、再配置ブロックリスト（ＲＢＬ）およびシステムブロックリスト（ＳＢＬ）と称されるＷＢＬに類似する２つのリストは、コンパイルされて、ＳＲＡＭ１３内に記憶される。これらのリストは、ＲＳＬおよびＳＳＬをそれぞれ補う。ＲＢＬおよびＳＢＬは、ＲＳＬおよびＳＳＬ内のセクタがそれぞれ物理的に配置されるブロックを規定するとともに、ＷＢＬと類似するフォーマットから成る。また、ＲＳＬ、ＲＢＬ，ＳＳＬ、ＳＢＬは、メモリシステムの初期化中に、走査プロセスによって再構成することができる。
【００８７】
カレントオブソリートブロック（ＣＯＢ）
ライトポインタ（ＷＰ）によって書き込まれる廃棄もしくは削除セクタデータを含むブロックは、たった１つだけその存在が許される。これは、カレントオブソリートブロック（ＣＯＢ）と称される。廃棄もしくは削除セクタデータが他のブロック内で形成される場合、消去操作は、ＣＯＢとして規定されたブロック上で直ちに実行されなければならない。ＣＯＢの現在のブロックアドレス、および、このブロック内で廃棄となる或は削除されたセクタのリストは、以下にＣＯＢ構造と称するデータ構造として、マイクロプロセッサのＲＡＭ１３内に記憶される。ＣＯＢ構造は、初期化中において、廃棄ブロックのアドレスを含む領域を最新のＭＡＰエントリーからコピーするとともに、再構成されたＷＳＬおよびＷＢＬが解析された後に廃棄セクタアドレスを加え、削除されたセクタアドレスをこのブロックから読み込むことによって、確立される。新たな削除セクタ操作が実行される度に、あるいは、新たな廃棄セクタが形成される度に、ＣＯＢ構造が更新され、また、旧データが新たなブロック内で形成される度に、ＣＢ内の現在のＭＡＰエントリーにブロックアドレスがコピーされる。
【００８８】
ＳＷＰによって書き込まれる廃棄もしくは削除セクタデータを含む１つのブロックの存在もまた許される。このブロックは、カレントオブソリートシステムブロック（ＣＯＳＢ）と称される。また、ＣＯＳＢ構造は、ＣＯＢ構造と類似する方法でＳＲＡＭ１３内に記憶される。ＣＯＢおよびＣＯＳＢはそれぞれ、図１０に示されるフォーマット、すなわち、４バイトのブロック数領域２８（これは、ＣＯＢまたはＣＯＳＢのブロックアドレスである）と、このブロックの内側の廃棄もしくは削除セクタと対応する位置にマスクを有するビットマップである３２バイトの廃棄もしくは削除セクタマスク３０とを有している。２５６ページから成るブロックにおいて、このマスク３０は３２バイトを要する。
【００８９】
次消去ブロックリスト（ＮＥＢ）
ブロック間でＷＰ、ＳＷＰ、ＲＰを増加する際に次に利用可能な消去ブロックを早期に認識するため、次消去ブロックリストは、マイクロプロセッサのＳＲＡＭ１３内に形成される。利用可能な消去ブロックは、その物理アドレスの順位を上げる際に使用される。ＮＥＢは、Ｍ個の消去ブロックアドレス（例えば、Ｍ＝８）を有している。ＮＥＢリストは、次に利用可能な消去ブロックのリストであり、使用のために割当てられる最後の消去ブロックのアドレスに最も近く且つそれよりも高いブロックアドレスを有する消去ブロックで始まる。したがって、ＮＥＢ内のエントリーの数は制限される（例えば８個に制限される）が、ＮＥＢそれ自身は、次の８個の消去ブロックよりも多い情報を含んでいても良い。
【００９０】
次消去ブロックリストは、ライトポインタによってアクセスされるフラッシュメモリのアドレス空間の領域に適したＭＡＰエントリー（ＣＢ内に記憶される）から得られる。次消去ブロックリストは、これによって規定される全ての消去ブロックが使用されるまで、アクティブＮＥＢとしてＳＲＡＭ内に残される。そして、全ての消去ブロックが使用された時点で、次消去ブロックリストは、適当なＭＡＰエントリーから再構成されなければならない。ＣＢは、フラッシュメモリ内の全てのブロックの消去状態を規定できる十分な量のＭＡＰエントリーを有している。ＮＥＢおよび対応するＭＡＰエントリーは、メモリシステムの操作中にブロックを加減することによって更新される。セクタもしくは制御データ記憶装置のために消去ブロックが割当てられた時に、エントリーがＮＥＢから除去される。ＮＥＢ内の他のブロックによって測られる領域内にあるブロックアドレスに消去ブロックが形成されると、エントリーがＮＥＢに加えられる（ただし、ＮＥＢが既に一杯である場合を除く）。
【００９１】
単一のＮＥＢエントリーは、連続するアドレスで消去ブロック群を規定するとともに、ブロック開始アドレス（連続するブロック群内の第１のブロックアドレス）および群の長さ（群の連続するブロックの数）を規定する。
【００９２】
ＴＢＬポインタ（ＴＢＬＰ）
ＴＢＬポインタは、ＣＢ内のＴＢＬエントリーの位置を認識する。また、ＴＢＬポインタは、マイクロプロセッサのＳＲＡＭ内に記憶されるとともに、高速セクタアドレス変換を提供するために使用される。ＴＢＬＰは、制御ブロックの初期走査中に形成され、その後、新たなＴＢＬエントリーがＣＢ内に形成される度に更新される。
【００９３】
ＡＳＢリスト（ＡＳＢＬ）
前述したように、ＡＳＢＬは、ＳＲＡＭ１３内に形成されるとともに、高速アドレス変換をサポートする。ＡＳＢＬは、全てのＡＳＢブロック及びこれらのＡＳＢブロックが関連付けられるＳＡＴブロックの物理アドレスを認識する。ＡＳＢＬは、初期化中に形成され、ＳＡＴページ書き込み操作が実行される度に更新されなければならない。ＡＳＢＬエントリーは、以前のアクセスの順序でリストアップされる。すなわち、エントリーは、アクセスされる際、リストのトップに起用される。対応するＡＳＢを現時点で有していないＳＡＴブロックがアクセスされると、ＡＳＢが割当てられ、そのためのエントリーがＡＳＢＬのトップに加えられる。最も古くにアクセスされたＡＳＢを示すＡＳＢＬの下位のエントリーは削除される。
【００９４】
ＳＡＴキャッシュ
キャッシュは、フラッシュメモリ内のＳＡＴから最も新しくアクセスされたエントリーを組み込む３２個の連続するＳＡＴエントリーのため、ＳＲＡＭ１３内に維持される。
【００９５】
キャパシティーマップ
メモリシステム１０内のフラッシュメモリの総容量は、以下のように、データおよび制御構造に割当てられる。
１．論理セクタ
容量は、カードの定格論理容量内で、各論理アドレスのための１つの有効データセクタの記憶に割当てられる。この定格容量は、利用可能な物理容量からアイテム２〜８を引いたものよりも小さく、カード製造中においてフォーマッターにより規定される。
【００９６】
２．ブートブロック
少なくとも１つのブロックがブートブロックに割当てられる。好ましくは、ブートブロックの他のコピーを記憶するために、第２のブロックが割当てられる。
【００９７】
３．制御ブロック
制御ブロックエントリー（サイン、ＢＢＬ、ＴＢＬ、ＭＡＰ）の記憶に多数のブロックが割当てられる。十分にコンパクトな制御ブロックは、大抵の場合、占有面積が１ブロックよりも小さい。圧縮／書き換え操作間で書き込まれるエントリーのための制御ブロックに別個のブロックが割当てられる。
【００９８】
４．セクタアドレステーブル
これは、ＳＡＴのブロックの記憶に割当てられる容量である。この容量は、カードの論理容量に比例している。
【００９９】
５．追加ＳＡＴブロック
所定のＳＡＴブロックに関連付けられるＡＳＢのために、所定数のブロックが割当てられる。
【０１００】
６．廃棄セクタ
ＣＯＢのために１つのブロックが割当てられる。ＣＯＳＢのために他のブロックが割当てられ、ＰＯＢ（ＣＯＳＢおよびＰＯＢの存在を許容する実施例において）のために更に１つのブロックが割当てられる。したがって、許容される旧データセクタの最大数は、ブロック内のページ数によって設定される。
【０１０１】
７．消去バッファ
これは、システムの修正操作のために割当てられなければならない消去ブロックのバッファである。データセクタ再配置のために、少なくとも１つの消去ブロックが割当てられなければならず、同時に生じる可能性がある制御構造再配置のために１つの消去ブロックが割当てられなければならない。
【０１０２】
８．スペアブロック
スペアブロックは、作動期間中の故障時に定格論理容量を維持するために使用されるべく割り当てられる。スペアブロックの数は、カード製造中においてフォーマッターにより決定される。
【０１０３】
８ＭＢカード、６４ＭＢカード、５１２ＭＢカード（フラッシュカード）に関し、例えば前述した項目１〜８に割当てられる容量を示す容量割り当てテーブルが図１６（これは、廃棄セクタのため、すなわち、ＣＯＢのために割当てられる１つのブロックだけを示しているが、無論、これよりも多くのブロックが廃棄セクタのために割当てられても良い。その場合には、メモリシステム内のＣＯＳＢやＰＯＢのための対策が必要となる）に示されている。
【０１０４】
ＳＡＴ書き込み操作
ＳＡＴは、ＷＳＬ、ＷＢＬ、ＳＳＬ、ＳＢＬ、ＲＳＬ、ＲＢＬが一杯になった時に書き換えられる。大抵の場合、それは、１ページの粒度をもって行なわれる。すなわち、修正されたセクタアドレスを含むＳＡＴページだけが書き換えられる。しかしながら、極稀に、ＳＡＴブロック全体の書き換えが必要な場合がある（「ＳＡＴブロック書き込み」と呼ばれる）。ＳＡＴ書き換えが必要とされる場合には、追加ＳＡＴブロック（ＡＳＢ）が形成され、その中に、必要とされるページだけが書き込まれる（「ＳＡＴページ書き込み」と呼ばれる）。特定のＳＡＴブロックに専用の１つのＡＳＢがあっても良く、また、全体として、ＡＳＢの制限された数Ｎが存在していても良い。Ｎの値は、書き込み特性と容量オーバーヘッドとの間の適当な妥協点として選択される（例えば、Ｎ＝８）。
【０１０５】
各ＡＳＢは、「ＳＡＴブロック書き込み」がその対応するＳＡＴブロック上で実行されるまで存在する。ＡＳＢで一杯となるＳＡＴブロック上もしくはＡＳＢの割り当てが取り消されるＳＡＴブロック上でＳＡＴ書き込みページが必要とされる時に、ＳＡＴブロック書き込みが実行される。ＳＡＴページ書き込みが必要とされ、対応するＳＡＴブロックが関連するＡＳＢを有しておらず、また、Ｎ個の全てのＡＳＢが既に割当てられている場合には、新たなＡＳＢの割り当てが成される前に、既存のＡＳＢのうちの１つの割り当てが取り消されなければならない。割り当てが取り消されるＡＳＢは、最も長い時間の間書き込まれないでいたＡＳＢとして選択される。ＡＳＢの割り当ての取り消しは、ＳＡＴブロックの書き込みと廃棄ＳＡＴブロックおよびＡＳＢの消去とを必要とするため、幾分時間を消費する手続きである。
【０１０６】
インターリーブチップアクセス
前述した操作およびデータ構造によって、本質的に、複数のフラッシュチップ５上でインターリーブ（交互配置）書き込み操作を実行することができる。これにより、性能を十分に向上させることができる。したがって、コントローラチップ８は、複数のフラッシュチップ５、例えばメモリシステムに組み込まれる４個のフラッシュチップの列を制御しても良い。４個のフラッシュチップのメモリ空間は、コントローラにより、仮想ブロックのセットとして編成される。各仮想ブロックは４つのブロックから成り、１ブロックは４つのチップ５のそれぞれからのものである（チップは共に永久にリンクされる）。各仮想ブロック内の４つのブロックは、１チップ内に同じブロックアドレスを有するブロックである。このような編成によれば、仮想ブロックを形成するリンクされた複数のブロックを１つの大きなブロックとして処理することができ、したがって、セクタの個々の消去ブロックの代わりに仮想ブロックを使用して、単一のフラッシュメモリシステム１０において述べたと同様のアルゴリズムおよびデータ構造の全てを使用することができる。ページ書き込み操作は、全てのインターリーブチップにわたって同時に実行される。ライトポインタ（ＷＰ）およびＲＰ、ＳＷＰはそれぞれ、連続的にページアドレスを進め、コントローラ８内に設けられたハードウエアチップイネーブルデコーダに供給されるアドレスビットの順序により、リンクされたブロックのページは、図１１に示される順序で連続的にアクセスされる。すなわち、各ポインタＷＰ、ＳＷＰ、ＲＰは、１つのＰＡから他のＰＡに移動する際、１つのチップから他のチップへと移動する。これは、仮想アドレスを使用することによって達成される。固有の仮想アドレス（ＶＡ）は、全てのチップ内の各物理セクタに割当てられる（例えば、前述したＮＡＮＤを基本とするメモリシステムにおいて、ＶＡは各ページのために割当てられる）。１つだけＶＡを増加させることによってライトポインタが１つのチップから他のチップへと移動するように、仮想アドレスが割当てられる。仮想アドレスは、各仮想ブロックのリンクされたブロックを介して、図１１に示されるようなパターンで、チップからチップへと増大する。
【０１０７】
実際、コントローラは、メモリーチップアレーを仮想ブロックの単一の縦列として処理する。セクタの仮想アドレスは、図１２に示されるフォーマットを成している。これは、チップハイ（ChipHigh）部分およびセクタの１３ビットのブロックアドレスを備えた仮想ブロック部と、６ビットのページアドレスおよびチップロウ（ChipLow）部分を備えた仮想ページ部とから成る。チップハイ部分は、Ｃｈｉｇｈビットの５ビットチップ数であり、チップロウ部分は、Ｃｌｏｗビットの５ビットチップ数である。この場合、
Ｃｈｉｇｈ＝チップアレー内のチップの縦列数、
Ｃｌｏｗ＝チップアレー内の横列数である。
仮想アドレス（ＶＡ）から物理アドレス（ＰＡ）を得るため、コントローラは、図１３に示されるように、チップハイ部分とブロックアドレス部分との間にチップロウ部分を逆行させるようにＶＡを単に再編成する。したがって、任意のセクタのための単一のチップメモリシステムにおいて、ＶＡはＰＡと等しい。
【０１０８】
簡素化するため、２倍数のチップだけ、例えば２個と４個のチップをインターリーブ（交互配置）しても良い。仮想ブロックにおける消去操作は、インターリーブされたチップのリンクされた全てのブロックの同時消去として実行される。１つのチップ内の１つのブロックが不良ブロックである場合、コントローラは、等しいブロックアドレスを有する他のチップの全てのブロックを不良ブロックとして処理する。
【０１０９】
フラッシュメモリがフォーマットされる時にメモリシステムの製造メーカによって可能状態もしくは不能状態に設定されるブートブロックの制御バイト状態によって、インターリービングが可能であったり、不能であったりする。
【０１１０】
前述した単一のチップＮＡＮＤ型フラッシュの実施例においてブロックアドレスすなわちＰＡｓが予め使用される場合に、仮想ブロックアドレスおよびＶＡｓをそれぞれ使用する。コントローラは、ホストデータセクタ書き込みコマンドを受け取ると、関連するライトポインタが指し示しているＰＡを割当てることによって、入ってくるＬＡをＰＡに変換する。コントローラは、複数のライトポインタを制御して、各ライトポインタをＰＡを通じて移動させる。その結果、ライトポインタは、消去される仮想ブロック（消去された仮想ブロックはＮＥＢで認識される）のそのセクタの仮想アドレス（ＶＡｓ）を通じて、連続的に移動する。
【０１１１】
図１４は、インターリーブチップへの多数のセクタ書き込みに関与する様々な操作のタイミングを示している。以下、図１５および図１９を参照しながら図１４について説明する。図１５は、メモリシステムのコントローラチップ８を詳細に示すブロック図である（図２のコントローラチップが図１５に示される形態を成していても良く、図２および図１５の両者において同じ構成要素が同一の符号で示されている）。図１９は、コントローラチップ８１と４つのフラッシュチップ１’，２’，３’，４’とを備えたメモリシステム１０の概略図である。各フラッシュチップは、それ自身のリード／ライトバッファ７１’，７２’，７３’，７４’を有している。
【０１１２】
図１５は、ホストコンピュータとの接続のための入／出力ポートＯ／Ｐ、例えば、ＰＣカードＡＴＡポート、コンパクトフラッシュ（登録商標）またはＩＤＥポートと、Ｏ／ＰおよびデュアルポートＳＲＡＭセクタバッファ９に接続されたホストインタフェース＆レジスタ８０と、データパスコントローラ８２と、ＥＣＣジェネレータ＆チェッカ１２と、フラッシュメモリインタフェース（ＦＭＩ）８４とを有するコントローラチップ８’を示している。データパスコントローラ８２と、ＥＣＣジェネレータ＆チェッカ１２と、フラッシュメモリインタフェース（ＦＭＩ）８４は全て、セクタバッファ９に接続されており、また、ＦＭＩはフラッシュメモリポート８６に接続されている。また、コントローラ８は、マイクロプロセッサ１１（ＲＩＳＣプロセッサの形態を成す）と、プロセッサＳＲＡＭ１３と、プロセッサマスクＲＯＭ８８と、外部プログラムＲＡＭまたはＲＯＭ９２のためのポートとを有している。また、ＲＩＳＣプロセッサ１１のため、オプションで、デバッグポート９４が設けられていても良い。データおよびコマンドは、マイクロプロセッサバス９１を介して、コントローラ８’（セクタバッファ９を除く）の様々な構成要素間で通信される。
【０１１３】
図１４に示されるように、複数のセクタ書き込みコマンド（この場合、ホストデータセクタ１，２，３，４から成る４つのセクタ書き込み）がＡＴＡポートＯ／Ｐで受けられると、デュアルポートセクタバッファ９のバッファ１にセクタ１が書き込まれる。これにより、コントローラのデータ管理操作のために利用可能なセクタバッファ９のバッファ２が残される。セクタ２が受けられると、セクタ２はバッファ２に直接に書き込まれ、同時に、セクタ１がバッファ１からフラッシュメモリポート８６に移動される。そして、セクタ１は、このフラッシュメモリポート８６から、４つのフラッシュチップのうちの１つ（チップ１’）のリード／ライトバッファ７１’へと書き込まれる。その後、セクタ２は、バッファ２からフラッシュポート８６へと送られ、そこから、４つのフラッシュチップの他の１つ（チップ２’）のリード／ライトバッファ７２’へと書き込まれる。このようなことが起きている間、セクタ３がセクタバッファ９のバッファ１に直接に受けられる。セクタ３はチップ３のバッファ７３’に書き込まれ、セクタ４は、セクタバッファ９のバッファ２に受けられた後、チップ４のバッファ７４’に書き込まれる。その後、セクタ１，２，３，４は、チップ１’，２’，３’，４’のメモリアレー６１’，６２’，６３’，６４’内の関連する割り当てられた物理セクタにそれぞれ書き込まれる。図１４は、全ての意図および目的のため、そのうようなセクタ書き込み操作のそれぞれが前のセクタ書き込み操作の直後に開始される形態を示しているが、無論、４つのセクタ１，２，３，４が略同時にフラッシュチップ１’〜４’に書き込まれても良い。また、ホストデータセクタ１〜４が書き込まれるセクタの物理アドレスは、関連するライトポインタの位置を決定する前述したアルゴリズムによって決定されても良い（すなわち、仮想アドレスの連続使用）。
【０１１４】
４つ以上のセクタを書き込む多重セクタ書き込みコマンドが、ホストプロセッサからコントローラに送られ、コントローラが多重セクタ書き込みを４つのセクタの群（この例では、４つのメモリチップを使用する）に分割するようになっていても良い。この場合、そのような各群は、図１４において前述したように、インターリーブ書き込みシーケンスで、フラッシュメモリに書き込まれる。
【０１１５】
アドレス変換
以下、読み込み及び書き込み操作に関して、ＬＡをＶＡに変換するアドレス変換プロセスを詳述する。
【０１１６】
アドレス変換は、以下の３つの値のうちの１つを戻すセクタの論理アドレス上で実行される操作である。
・有効セクタ物理アドレス
・論理セクタが削除された（あるいは、論理セクタが決して書き込まれない）情報
・エラー状態が生じた情報
【０１１７】
図１７は、アドレス変換プロセスを示すフローチャートである。このプロセスは、全ての読み込み操作において実行される。変換される論理セクタアドレス（ＬＡ）がホストプロセッサからコントローラ８’によって受けられると、アルゴリズムが実行され（ボックス４０）、変換される物理アドレスを有するセクタが、そのＳＡＴエントリーの最後の書き込み後に、予め、書き込まれ或は削除された可能性があるか否かが認識される。セクタが予め書き込まれ或は削除されたという結論は、１００％の確実性を有していなければならない。すなわち、セクタが予め書き込まれ或は削除されたという結論は、高い確率で正しくなければならない。これは、連続するセクタ系列の開始アドレスと終了アドレスとを示す値の対の限られた数を維持することによって、また、変換されるアドレスがこれらの任意の範囲内にあるか否かを認識することによって、実行される。これらの範囲が最終的に非連続となって、セクタが予め書き込まれ或は削除されたという結論が不確実になっても良い。ＬＡが任意の範囲内にある場合、「繰り返しの可能性は？」の問いに対してＹＥＳで答える（図１７のボックス４２）。ＬＡが任意の範囲内にない場合には、ＮＯと答え、ＶＡを見つけるために、ＳＡＴまたはＳＡＴキャッシュへと進む（ボックス４４）。ここから、物理セクタが不良であるか否か（４６）、あるいは、削除されたか否か（５０）を決定する。ＬＡが書き込まれないセクタに対応している場合には、ボックス５０でＶＡ＝削除（４８）となる。ボックス４２でＹＥＳと答えると、ボックス５２で、ＷＳＬもしくはＳＳＬ（ＬＡがファイルに対応しているか或はシステムデータに対応しているかどうかに応じて）を検索する。ボックス５４で、ＬＡが見つかる（ＹＥＳ）と、ＶＡを演算し（５６）、物理セクタのヘッダー１ｂ内に記憶された論理アドレスが、コントローラマイクロプロセッサによって読み込まれる（５８）。ＬＡ＝ＬＡ１である場合（ボックス６０）には、演算されたＶＡは正しい。ＬＡが５４で見つからない場合には、ＲＳＬ内でＬＡを検索し（６２）、ＬＡがＲＳＬ内で見つからない場合には、ＳＡＴまたはＳＡＴキャッシュへと進んで、そこからＶＡを得る（４４）。ＳＡＴもしくはＳＡＴキャッシュ内で見つかったＶＡが不良もしくは削除されている場合（４６，５０）には、前述したように、ＶＡからＬＡ１を得て（５８）、ＬＡ＝ＬＡ１であるかどうかをチェックする。
【０１１８】
図１７のボックス５６で実行されるプロセスステップ（ＶＡの演算）が図２０のフローチャートに詳細に示されている。図２０は、たった２つのライトポインタＷＰ，ＲＰを使用するメモリシステムにおいて、ＷＳＬまたはＲＳＬ内で見出されるＬＡのためのＶＡを得るために実行されるステップを示している。無論、このフローチャートは、メモリシステムがシステムライトポインタ（ＳＷＰ）をも組み込んでいる場合において、ＳＳＬ内で見出されるＬＡのためのＶＡを与えることができるように拡張されていても良い。プロセスはNumFromEnd（ＮＦＥ）を設定するボックス１１０で開始される。NumFromEndは、ＷＳＬ（またはＲＳＬ）の終端から書き込まれる所定のセクタ（ＷＳＬまたはＲＳＬ内に見出されるセクタ）までのセクタ数である。ＬＡがＷＳＬ内で見つけられた場合には、Ｐ＝ＷＰに設定し、ＬＡがＲＳＬ内で見つけられた場合には、Ｐ＝ＲＰに設定する。そして、その後、ＰＧ＝Ｐ．Ｐａｇｅに設定する。この場合、Ｐ．Ｐａｇｅは、Ｐの値によって表わされるライトポインタのページのことである（ボックス１０２参照）。１０４において、ＰＧ＞ＮＦＥである（すなわち、ＬＡが最後に書き込まれたブロック内にある）場合には、ＶＡ＝Ｐ−ＮＦＥ−１、すなわち、ＮＦＥ−１のセクタが関連するライトポインタの位置から離れる。ＰＧ＜ＮＦＥである場合には、１０６で、Ｐ＝＝０であるか否か、すなわち、最後のＷＢＬ／ＲＢＬエントリーに対応するブロックが十分に書き込まれたか否かが決定される。書き込まれている場合（すなわち、Ｐ＝＝０）には、NotLastが０に設定され、書き込まれていない場合には、NotLastが１に設定される。その後、１０８において、与えられたセクタが存在するブロックと最後のブロックとの間のブロック数Nblockが、以下のアルゴリズムを使用して演算される。
Nsectは、与えられたセクタと最後に書き込まれたブロックページ０との間のセクタ数である。
Nsect＝NumFromEnd−ＰＧ
Nblock＝Nsect／BlockSize＋NotLast
【０１１９】
その後、１１０において、ブロック内のページ数PageNumを演算する。この場合、PageNum＝BlockSize− Nsect％ BlockSizeである。その後、以下の手法を使用して、ＬＡがＷＳＬ内にある場合には、１１２で、ＷＢＬからブロックアドレス（BLAddr）を取得し、ＬＡがＲＳＬ内にある場合には、１１４で、ＲＢＬからブロックアドレス（BLAddr）を取得する。この場合、ブロックアドレスは、所定のセクタを含むブロックの仮想アドレスである。
ＬＡがＷＳＬ内にある場合には、BlAddr＝RBL［LBL−NBlock］、この場合、LBLはＷＢＬ内の最後のエントリーのインデックス；
ＬＡがＲＳＬ内にある場合には、BlAddr＝RBL［LRBL＋NBlock］、この場合、LRBL はＲＢＬ内の最後のエントリーのインデックスである。
【０１２０】
その後、１１６で、ＶＡ＝Page０＋PageNumを使用して、ＶＡを演算する。この場合、Page０は、与えられたセクタを含むブロック内のページ０の仮想アドレスである。
【０１２１】
図２１は、ＳＡＴまたはＳＡＴキャッシュからＶＡを取得する（図１７のボックス４４）ために使用されるプロセスのフローチャートである。図２１は、一般に自明であるが、以下、特に番号が付与されているボックスについて説明する。
【０１２２】
ボックス１２０（ＬＡがＳＡＴキャッシュ内にあるか）：ＬＡ＞＝FirstCacheEntryである場合には、ＬＡがＳＡＴキャッシュ内にある。ＬＡ＜＝ＬＡ＜FirstCacheEntry．ＬＡ＋CacheSize  、この場合、FirstCacheEntry．ＬＡは、キャッシュ内の最初のＳＡＴエントリーに対応するＬＡであり、（全体の）CacheSizeは、ＳＡＴキャッシュ内のエントリーの数である。
【０１２３】
ボックス１２２（ＳＡＴ内のブロックおよびページを演算する）：ここでは、与えられたＬＡにおけるＳＡＴブロック数であるSBNumと、与えられたＬＡにおけるＳＡＴページ数であるSpageとを演算する。
【０１２４】
ボックス１２４（ＴＢＬエントリーの数を演算する）：TBLNumは、要求されるＴＢＬエントリーの数である。この場合、TBLNum＝SBNum／８である。
【０１２５】
ボックス１２６（ＳＡＴページの一部をキャッシュ内に記憶する）：可能であれば、最後にアクセスされたエントリーで始まる３２個のエントリーがキャッシュされる。その後、十分なエントリーが無い場合には、ページ内の最後のエントリーで終わり且つ最後のセクタアクセスを含む３２個のエントリーから成る１つの群がキャッシュされる。
【０１２６】
図１８は、図１７のボックス５８（ＶＡからＬＡ１を取得）のためのプロセスステップを示すフローチャートである。ページヘッダー内に記憶されたヘッダーパラメータ（ＨＰ）は、論理アドレス（ＬＡ）の１だけ増大された値である。これは、削除されたセクタが、そのヘッダー内の全てのビットを０に設定することによってマークされているからである。このＬＡ＝０をヘッダー内に記憶することはできない。したがって、ＬＡ１＝ＨＰ−１に設定する。
【０１２７】
読み込み操作
図２２は、物理セクタからホストデータセクタを読み込むために実行されるステップのシーケンスを示すフローチャートである。コントローラは、ＬＡ（ホストから受ける）をＶＡに変換することによってスタートする（ボックス１３０）。これは、既に説明した図１７のフローチャートに示されたプロセスを実行することによって成される。ＬＡがＶＡに変換されると、直ちに、アドレスＶＡを有する物理セクタの内容が、コントローラのバッファ９に読み込まれる。その後、コントローラは、セクタ（すなわち、セクタの内容）が削除されたか否か或は不良であるか否かをチェックする（ボックス１３２）。セクタが削除され或は不良である場合、コントローラは、ホストプロセッサのデータバッファの全てのバイトをOxFFに設定する（ボックス１３４）。セクタが削除されたセクタでない場合には（ボックス１３６）、コントローラは、エラー状態をホストに戻す（ボックス１３８）。セクタが削除されたセクタである場合には、コントローラは、有効状態をホストに戻す（ボックス１３７）。ボックス１３２において、セクタが削除或は不良でないことをコントローラが決定した場合には、コントローラは、そのままボックス１３７に進む。すなわち、有効状態をホストに戻す。
【０１２８】
書き込み操作
図２３は、ホストデータセクタを物理セクタに書き込むために実行されるステップのシーケンスを示すフローチャートである。図２３は、ホストファイルデータの書き込み操作、すなわち、ライトポインタ（ＷＰ）による書き込みだけを扱う。しかしながら、メモリシステムがシステムデータのための別個のライトポインタ（すなわち、ＳＷＰ）を使用する場合には、図２３の操作を適当に拡張して、別個のシステムデータの書き込みを扱えるようにしても良い。コントローラは、ＬＡ（ホストから受けられる）をＶＡに変換することによってスタートする（ボックス１５０）。これは、既に説明した図１７のフローチャートに示されるプロセスを実行することによって成される。１５２で、セクタが不良である場合には、コントローラは、エラー状態をホストに戻す（１５４）。セクタが不良でない場合には、セクタが削除されるか否かをチェックする（１５６）し、セクタが削除される場合には、その後、ＷＰが有効か無効かをチェックする（１５８）。全てのブロックが書き込まれてしまっている場合には、ＷＰは無効（ＷＰ＝＝０）であり、ＷＰを消去ブロックに移動させなければならない。ＷＰが有効でない場合、ＷＰを新しい（有効）物理セクタアドレスに設定する（１６０）。ＷＰが有効である場合には、ＷＳＬにＬＡを加え（１６２）、任意のＷＳＬもしくはＲＳＬリリースや、必要なＣＢおよびＣＢＰＴ圧縮を実行する。その後、繰り返し可能性評価アルゴリズム（図１７のボックス４０）から範囲を更新し（１６４）、コントローラバッファからＷＰのアドレスにセクタを書き込み（１６６）、有効状態の値をホストに戻す（１６８）。ボックス１５６で、セクタが削除されないことが分かると、ＣＯＢ内にＶＡがあるか否かをチェックする（１５７）（ＶＡがＶＢと一致している場合、ＶＡはＣＯＢ内にある。この場合、ＶＢは、ＳＲＡＭ１３内に記憶されたＣＯＢ構造内の仮想ブロック数領域（これは、仮想ブロックアドレス…図１２参照）である）。ＶＡがＣＯＢ内にある場合には、コントローラのＳＲＡＭ１３内に記憶されたＣＯＢ構造内にＶＡを廃棄として記録し（１５９）（これは、ＳＲＡＭ１３内のＣＯＢ構造のビットマスク領域内で、対応するビットを１に設定することにより成される）、その後、ボックス１５８に進む（ＷＰは有効か）。ＶＡがＣＯＢ内にない場合には、ＣＯＢを変更し（１６１）、その後、ボックス１５９に進む（ＶＡを廃棄としてマークする）。
【０１２９】
図２４は、図２３のボックス１６１で実行されるステップ（ＣＯＢの変更）のフローチャートである。図２４は、一般に自明であるが、以下の注記と併せて読まなくてはならない。すなわち、
ボックス２００（ＶＡ．Ｂｌ、ＶＢ）：ＶＡ．ＢｌはＶＡの仮想ブロック領域であり、ＶＢは先に説明したものと同じである。
ボックス２０２（ＣＯＢは無効か）：ＶＢ＝０の場合、ＣＯＢは無効である。ＶＢが０である場合、これは、この時点で旧データが無いことを示している。
ボックス２０３，２０４（MaxRelの演算）：MaxRelは、ＣＯＢから再配置されるセクタの最大数である。MaxRel＝P.Page−１である。この場合、P.Pageは、ＷＰまたはＲＰのページ領域（アドレス）である。
ボックス２０５，２０６（ダミーエントリーをＷＳＬに加える）：再配置されるブロックがまだ一杯に書き込まれていない場合には、対応する「ダミー」のセクタＬＡｓを最後のＷＳＬ（ＲＳＬ）エントリーに加えなければならない。
ボックス２０７（セクタの再配置）：図２５を参照。
ボックス２０８（ＷＭＡＰの書き込み）：ＷＭＡＰをＣＢに書き込む。この場合、ＥＢ＋ＶＢおよびビットマップ内の対応するビットは１に設定される。必要に応じて、ＣＢの書き換えを実行する。
ボックス２０９（リストの更新）：ＶＢと等しいWRBArrayエントリーを見つけ、それを無効としてマークするとともに、WRBArray内の同じＶＢに関する任意の他のエントリーを無効としてマークする。WRBArrayは、実際には、最初にカウントアップするＷＢＬエントリーと最後にカウントダウンスルＲＢＬエントリーとともに、メモリの同じ領域内に実際に記憶されるＷＢＬおよびＷＳＬリストである。２つのリストが中央で交わると、WRBArrayが一杯になる。
ボックス２１０（ＣＯＢのセットアップ）：ＣＯＢ構造をＳＲＡＭ内で更新する。ＶＢ領域はＶＡ．Ｂｌに設定される。VA.Pageに対応する廃棄および削除マスク（Obs and Del Mask）ビットは１に設定される。他の全てのビットは０に設定される。
【０１３０】
図２５は、図２４のボックス２０７で実行されるステップ（セクタの再配置）を示している。これは、以下の注記と併せて読まなくてはならない。すなわち、
ボックス２２０，２２２，２３０：ＳＲＡＭ内のＣＯＢ構造の廃棄および削除マスク領域を通り抜けるループを実行する。
ボックス２２３（セクタは有効か）：ODMask［ｉ］＝０である場合、セクタは有効である。すなわち、ＣＯＢの廃棄および削除マスクにおける０値は、このページが有効セクタを含んでいることを示している。
ボックス２２４，２２５：ＲＰによって指し示されるブロックが既に一杯に書き込まれている場合には、ＲＰ＝０である。
ボックス２２６（ページヘッダーからのＬＡを記憶する）：ページヘッダーから得られたＬＡは、一時的に記憶されて、エントリーをＲＳＬに加える際に使用される。
ボックス２２５（ＲＰ＝０）：エントリーをＲＳＬに加える。必要に応じて、ＷＳＬ／ＲＳＬリリースを実行する。
【０１３１】
図２６は、図２３のボックス１６０で、ライトポインタ（ＷＰ）を設定するために実行されるステップを示している。図２５のボックス２２７でＲＰを設定するために、同様のプロセスが使用される。図２６は、以下の注記と併せて読まなくてはならない。すなわち、
ボックス２４０（WRArrayが一杯ではないか）：Last＜LastRE−１である場合、WRArrayは一杯ではない。ここで、Last（全体的）は最後のＷＳＬエントリーのインデックスである。LastREは、最後のＲＳＬエントリーのインデックスである。
ボックス２４２（WRBArrayが一杯ではないか）：ＬＢＬ＜ＬＲＢＬ−１である場合、WRBArrayは一杯ではない。ここで、ＬＢＬおよびＬＲＢＬは、図２０において先に定義したものと同様である。
ボックス２４４（リストのリリース）：ＳＡＴページ書き込み操作を実行する。必要であれば、ＳＡＴブロック書き込みおよびＣＢ書き込みを実行する。
ボックス２４６（ＮＥＢを満たす）：ＣＢ内に記憶されたＭＡＰから次のＮ（Ｎ＝NEBSize）の消去ブロックを選択する。
ボックス２４８（ＷＭＡＰの書き込み）：ErBlockに設定されたリンク領域および０に設定されたビットマップ領域内の対応ビットとともに、ＷＭＡＰを書き込む。必要に応じて、ＣＢ書き換えを実行する。
【０１３２】
図２７は、削除セクタ操作において実行されるプロセスステップのフローチャートである。これは、初期のステップにおいては、書き込み操作（図２３参照）に類似している。すなわち、ＬＡがＶＡに変換され（２５０）される。２５２で、セクタが削除される場合には、エラー状態をホストに戻す（２５４）。セクタが削除されない場合には、ＶＡがＣＯＢ内にあるか否かをチェックして（２５７）、ＶＡがＣＯＢ内に無い場合には、ＣＯＢを変更する（２６１）（図２４と同様）。ＶＡがＣＯＢ内にある場合には、ＣＯＢ内でＶＡを削除としてマークし（２６９）、その後、デュアルポートＳＲＡＭ９（コントローラ内）のバッファのうちの１つを複数の０で一杯にする（２７１）。その後、バッファからのこの「オールゼロ」ページを、削除されるセクタに書きこむ（これによって、セクタを削除する）。その後、有効状態をホストに戻す（２７５）（セクタが削除されたことを確認する）。
【０１３３】
初期化
以下、初期化手続き及び電力損失リカバリ手続きについて説明する。簡単のため、単一のライトポインタシステム（すなわち、ＷＰだけ）に関してこれらを説明する。しかしながら、無論、マルチプルライトポインタシステム（ＷＰ、ＳＷＰ、ＲＰ）に適するように手続きを拡張しても良い。全てのデータおよび制御構造は、初期化中の走査が一般的に成されないように特別に構成される。殆ど全ての制御構造（ＷＳＬおよびＷＢＬを除く）は、通常、ＣＢ内に記憶された対応する情報から得られる。カードの初期化中においては、以下の操作を実行することが必要である。
１．ブートブロックから最後の制御ブロックポインタテーブルエントリーを読み込み、ＣＢブロックの場所を確認する。
２．ＣＢを操作することによってＴＢＬＰを再構成する。
３．制御ブロック内の最後のＴＢＬエントリー内で規定されるライトポインタの位置の後に連続的に続くページのヘッダー／ＥＣＣ領域を走査して、最後のＳＡＴ書き換え後に書き込まれたセクタを認識するとともに、ＷＳＬおよびＷＢＬを再構成する。
４．ＣＢ内の対応するＭＡＰエントリーからＮＥＢを構成する。
５．ＣＯＢおよびＡＳＢＬを構成する。
６．最後のＭＡＰのErB領域内で参照されたブロックが実際に消去されたか否かをチェックする。消去されていない場合には、消去操作を終了する。
【０１３４】
ＷＳＬおよびＷＢＬの構成
カードの初期化中、記憶されるライトポインタ（ＷＰ）の最後の値は、ＣＢ内の最後のＴＢＬエントリーから読み込まれ、その場所の次のページで、ページヘッダーの走査が実行されて、プロセッサのＳＲＡＭ内でＷＳＬおよびＷＢＬが再構成される。消去場所が見つかると、最後のＳＡＴ書き換え後に書き込まれたセクタ系列の末端に辿りつく。
このようなセクタ走査では、ライトポインタ（ＷＰ）が、ブロックの末端から、隣接していないブロックの先頭へとジャンプすることができる、という事実を考慮に入れなければならない。ＷＰによって成される全てのブロック移動は、ＣＢ内のＭＡＰエントリーのリンク領域内に記録される。
【０１３５】
ＣＯＢおよびＡＳＢＬの構成
これらの構造は、対応するエントリーをＣＢからコピーすることによって再構成することができる。また、ＣＯＢ構造を構成するためには（その中の削除セクタを認識するためには）、ＣＢ内の最後のＭＡＰエントリーの廃棄（Obs）領域内にアドレスが規定されているこれらのセクタを含む現在のブロックを走査する必要がある。このブロック内の廃棄セクタを確認するためには、ＷＳＬおよびＷＢＬを走査することも必要である。ＡＳＢＬページを記録するためには、ＴＢＬからＡＳＢアドレスを認識し、その後、それらのヘッダー／ＥＣＣ領域を走査しなければならない。
【０１３６】
電力損失リカバリ
メモリシステムにおいては、正常に動作でき、また、電力が回復された際、電力が除去された状況下であっても、記憶されたデータが失われないことが必要である。しかしながら、電源ＯＮの直後にメモリシステムが全ての正常状態を回復する必要はなく、正常に動作できるだけで良い。任意の異常状態が何時検知されようとも、正常状態は、例外として、その後に回復され得る。
【０１３７】
以下の任意の操作が実行されている時に供給電圧が除去されると、メモリシステムの正常状態が低下する。
１．ホストからのデータセクタの書き込み
２．移動されるデータセクタの書き込み
３．制御データブロック（ＣＢまたはＢＢ）へのエントリーの書き込み
４．制御データブロック（ＳＡＴまたはＣＢ）へのページの書き込み
５．廃棄セクタもしくは制御データを有する任意のブロックの消去
【０１３８】
ホストからデータセクタを書き込んでいる間の電力損失
この場合、書き込まれているデータが失われることがあるが、書き込みコマンドが終了してセクタを再び書き込むことができるといった情報は、ホストに与えられない。不完全に書き込まれたセクタは、不完全書き込み操作の結果として、フラッシュメモリ内に存在している場合がある。これは、ＣＢ内の最後のリンクパラメータによって規定されるブロック内のページヘッダーを読み込むことによってライトポインタの値が設定されると、初期化中に検知される。最後に検知されたセクタは、そのＥＣＣをチェックするために完全に読み込まなければならない。また、次のページは、それが完全に消去されることをチェックするように読み込まれなければならない。不完全に書き込まれたセクタが検知される場合には、他の全てのセクタは、次の消去ブロックの最初に、新たなライトポインタ位置へと再配置され、その後に、ブロックが消去されなければならない。
【０１３９】
再配置されるデータセクタの書き込み中の電力損失
これは、前述したように、初期化中、ライトポインタを定めるプロセスにおいて検知される。セクタを再配置させてブロックを消去する場合と同じ動作が成されなければならない。また、ライトポインタの直前の論理セクタアドレスと、ＣＢ内の廃棄（Obs）パラメータによって規定されるブロック内の廃棄セクタの論理セクタアドレスとを比較することによって、不完全な再配置操作が検知されなければならない。保留の任意のセクタ再配置は、初期化中に完了されなければならない。
【０１４０】
制御データブロック（ＣＢまたはＢＢ）へのエントリーの書き込み中の電力損失
この状態は、ＣＢおよびＢＢ内のエントリーが読み込まれ且つそれらのＥＣＣがチェックされると、通常の初期化中に検知される場合がある。エントリーのＥＣＣがエラーを示している場合には、そのエントリーを無視すべきである。ＣＢまたはＢＢエントリー書き込み操作を開始した初期の動作は正確に完了されず、この操作が通常の動作中に繰り返される時、エントリーは、その後、正確に書き込まれる。
【０１４１】
制御データブロック（ＡＳＢ）へのページの書き込み中の電力損失
この状態は、ＡＳＢ内のページが読み込まれ且つそれらのＥＣＣがチェックされると、通常の初期化中に検知される場合がある。ページのＥＣＣがエラーを示している場合には、そのページを無視すべきである。ＡＳＢページ書き込み操作を開始した初期の動作は正確に完了されず、この操作が通常の動作中に繰り返される時、ページは、その後、正確に書き込まれる。
【０１４２】
全ての制御データブロック（ＳＡＴまたはＣＢ）の書き込み中の電力損失
これによって、不完全な制御データブロックが、他のデータ構造によるそれとは無関係に、フラッシュメモリ内に存在するようになる。この状態が初期化中に検知される必要はない。また、ブロックは、「損失ブロック」として存在することが許されても良い。ブロック書き込み操作を開始した初期の動作は正確に完了されず、この操作が通常の動作中に繰り返される時、ブロックは、その後、正確に書き込まれる。通常の動作の後段で、損失ブロックは、そのＭＡＰ状態に関する矛盾、あるいは、システム内の消去ブロック数における矛盾を発見することによって検知される（図１６のキャパシティマップ参照）。その後、必要に応じて、除外ルーチンは、フラッシュメモリ全体を走査することによって、そのブロックを認識して消去する。
【０１４３】
廃棄セクタまたは制御データとともにブロックを消去する間の電力損失
これによって、不完全に消去されたブロックがフラッシュメモリ内に存在するようになる。この状態は、ＣＢ内の最後のＭＡＰエントリー内のErB領域によって参照されるブロック状態がチェックされると、初期化中に検知される。必要に応じて、このブロックの再消去を実行することができる。
【０１４４】
更なる別の実施例
本発明の範囲から逸脱することなく、前述した実施例を様々に変形することができる。例えば、消去操作を扱う他の方法は、２つのＣＯＢ（および、２つのＣＯＳＢ）の存在を常に許容することである。この利点は、メモリ容量を最大限に利用できることである。前述した実施例においては、１つのＣＯＢだけが許容されたが、ＣＯＢを作りたいブロック内にライトポインタがある場合には、１つのＰＯＢの一時的な存在を許容しても良い。これは、ＰＯＢを有することが必要な場合に、ＰＯＢのために割当てることができる十分な消去メモリ容量が常に存在していなければならないことを意味する。したがって、このメモリ容量を最大限に利用できることは有益であり、これを実現する1つの方法が、２つのＣＯＢの存在を常に許容すること、すなわち、ＰＯＢを不要にすることである（必要な場合、第２のＣＯＢがＰＯＢとして作用することができる）。そのような２ＣＯＢシステムにおいて、新たなＣＯＢを形成することが必要な場合には、２つのＣＯＢのうちの古い方のＣＯＢを消去する（古い方のＣＯＢ内にライトポインタが無い場合には、新しい方のＣＯＢを消去する）。
【０１４５】
図３、および、メモリシステム内の各フラッシュページにおけるデータ配置の説明に関し、以下、ページ内にデータを記憶する幾つかの別の方法を提案する。図２８は、典型的な５２８バイトのＮＡＮＤ型もしくはＡＮＤ型フラッシュメモリのページ１の物理的な群分離を示している。ページは、５１２バイトの「データ領域」３００と、１６バイトの「スペア領域」３０２とを備えている。図３に関して前述した実施例において、コントローラ８は、データ領域３００内に５１２バイトの情報１ａ（例えば、１つのホストデータセクタ）を記憶し、スペア領域３０２内にヘッダー１ｂおよびＥＣＣ１ｃ（以下、これらをまとめて、オーバーヘッドデータと称する）を記憶する。しかしながら、ページ１内における他のデータ配置も可能である。例えば、図２９に示されるように、データ領域３００の第１の部分３０３内にヘッダ１ｂおよびＥＣＣ１ｃが記憶され、データ領域３００の残りの部分とスペア領域３０２とから成る部分３０４内に情報１ａが記憶されても良い。
【０１４６】
図３０に示されるように、フラッシュページの先頭からオフセットした位置にヘッダー１ｂおよびＥＣＣ１ｃを書き込むとともに、残っているヘッダーおよびＥＣＣの両側の空間内にホストデータセクタ（「ユーザデータ」と称しても良い）を書き込むこともできる。ＯＤのオフセット量（オフセットＳ）は、例えば、（ａ）ページ１の物理アドレス（ＰＡ）、あるいは、（ｂ）ページ１に書き込まれるユーザデータ（すなわち、ホストデータセクタ）の第１のバイト内の１または複数のビットに応じて決定されても良い。図３１（ａ）は、セクタ書き込み操作の開始前におけるコントローラバッファ３２０内のデータの配置を示している。データは、ユーザデータの第１の部分３３２として、また、ヘッダデータの第２の部分３２４として配置されている。図３１（ｂ）は、オフセットＳがユーザデータの最初のバイト内の１または複数のビットによって決定される（前述した選択（ｂ））書き込み操作の終了後における、フラッシュメモリページ内のデータの配置を示している。データは、ユーザデータから成る第１の部分３２６として記憶され、その後、ユーザデータから成る第２の部分３２８として記憶され、その後、ヘッダー１ｂおよびＥＣＣ１ｃとして記憶され、その後、ユーザデータから成る第３の最終部分３３０として記憶される。部分３２６と部分３２８とを足した長さは、部分３２６内のデータに依存する。部分３２６の長さは最小オフセット以下に規定され、部分３２８の長さは、正確なオフセットＳを与えるために、部分３２６内のデータに基づいて演算される。ユーザデータから成る第１および第２の部分３２６，３２８は別個に認識され、これにより、第１の部分３２６は、１つの操作でコントローラによりフラッシュメモリから読み込まれるとともに、次の操作でコントローラによって読み込まれる第２の部分３２８の長さを決定するためにコントローラによって演算される。図３２は、書き込み操作中にコントロールバッファからフラッシュメモリにデータを送信するために使用されるコントローラコマンドのシーケンスを詳細に示した表である。
【０１４７】
ユーザデータの１または複数のビットの関数であるオフセットＳを選択する１つの利点は、全てのセクタにおいて、オーバーヘッドデータが５２８バイトデータセグメント内の同じ位置に挿入されないという点である。これにより、メモリアレーのカラム欠陥といったフラッシュメモリ内のシステム故障時に、多数のセクタにおいて、貴重なオーバーヘッドデータが同時に失われることが防止される。
【０１４８】
図３３は、図３１（ｂ）のフラッシュメモリページにおける読み込み操作終了後のコントローラバッファのデータ配置結果を示している。バッファ内のデータが配置された後に、ユーザデータから成る第１の部分３２２およびヘッダーデータから成る第２の部分３２４が配置され、その後に、ＥＣＣから成る第３の最後の部分３２５が配置されているのが図３３から分かる。図３４は、読み込み操作中にフラッシュメモリからコントローラバッファへデータを送信するために使用されるコントローラコマンドのシーケンスを詳細に示す表である。
【０１４９】
さらに、複数のフラッシュチップに対するインターリーブ書き込み操作に関しては、マルチプルフラッシュチップメモリシステムにおいて既に説明したように、複数のチップに対して略同時に書き込む技術は、物理的なページサイズがコントローラによるセクタ書き込みの多様なサイズである単一のメモリチップにデータを書き込むために使用することもできる。例えば、コントローラが均一のサイズのセグメントにデータを書き込む場合、メモリの各ページは、コントローラによって書き込まれる（ユーザ＋オーバーヘッド）データのセグメントサイズの４倍である。
【０１５０】
本発明は、ＮＡＮＤ型メモリだけでなく、ＡＮＤ型およびＮＯＲ型といった他のタイプのメモリにも適用できる。ＡＮＤ型フラッシュメモリの場合、ブロックの各ページは、図２８のＮＡＮＤページフォーマットと同じフォーマットを有し、前述したようにページ内でデータを任意に配置することができる。本発明のコントローラは、たとえ、不良セクタを含むブロック内で、消去されるそのブロック内の個々の良好なセクタが個別に消去される場合であっても、セクタのブロック内のメモリを依然として消去する。すなわち、コントローラは、不良セクタを含む任意のブロックを不良セクタとして処理せず、その代わり、それらを良好な（消去可能な）ブロックとして処理し、これらのブロック内の良好なセクタを利用する。しかしながら、ＡＮＤ型の実施例において、コントローラは、ＳＡＴブロックもしくはＡＳＢｓに関し、全て良好なセクタを含むブロックのみを使用する。
【０１５１】
ＡＮＤ型フラッシュメモリが使用され且つメモリシステムが前述したようにインターリーブチップ書き込み操作を使用するマルチプルフラッシュチップシステムである場合、また、仮想ブロックのうちの１つの任意のセクタブロック（ページ）が不良セクタを含んでいる場合、コントローラによって、ライトポインタは、このセクタをスキップして、ブロック内の次の良好なセクタへと進む。例えば、ｃをチップとし、ｓをセクタとした場合、４つのセクタ書き込みのバーストがｃ３ｓ５、ｃ４ｓ５、ｃ１ｓ６、ｃ２ｓ６であって、ｃ１ｓ６が不良セクタであると、順序は、ｃ３ｓ５、ｃ４ｓ５、ｃ２ｓ６、ｃ３ｓ６となる。これは、１つの仮想ブロック内の１つのブロックが１または複数の不良セクタを含んでいる場合にコントローラがそのブロックを不良ブロックとして処理し且つ仮想ブロック全体を不良仮想ブロックとして処理するＮＡＮＤ型メモリに基づく実施例と対称的である。
【０１５２】
ＮＯＲ型フラッシュメモリを使用する場合、好ましい実施例において、メモリシステムのコントローラは、均一サイズの５２８バイトセクタの状態で、データ構造をフラッシュメモリに書き込んだり、データ構造をフラッシュメモリから読み込んだりする。図３５は、そのような３つのセクタ１，２，３がＮＯＲメモリのブロック４’内にある状態を概略的に示している。ＮＯＲブロック内の１列のメモリがたった５１２バイトであるため、ＮＯＲ内の各セクタは、１列を満たすとともに、次の列を満たすように回り込むようになる。しかしながら、ＮＯＲメモリ内のセクタを異なった方法で規定することもできる。５２８バイトを下回る或は上回るサイズのセクタを使用することもでき、また、ブロックは、ワンサイズ以上大きいセクタを含んでいても良い。コントローラは、ＮＡＮＤ型およびＡＮＤ型メモリページに関して既に述べた任意の様々な異なる方法により、ユーザおよびオーバーヘッドデータを含む各セクタ内でデータを配置しても良い。
【０１５３】
前述したことから分かるように、メモリシステムがＮＡＮＤ型、ＡＮＤ型、ＮＯＲ型のメモリアレーである場合、メモリシステムの物理セクタは、メモリアレーそれ自身の物理アーキテクチャと特定の関係を有している必要は全くない。例えば、セクタがアレーの列（ページ）に対応している必要はなく、また、１つのセクタとこれに隣接するセクタとの間の境界を認識できるように物理的特徴が存在している必要もない。常に１つのユニットとしてコントローラにより処理されるメモリセル群として、セクタを解釈することができる。異なるセクタは同じサイズを有している必要はない。また、セクタの物理的構造は、セクタ内に記憶されるデータに依存しない。また、メモリセルの列（ページ）内の欠陥領域が容認され且つ物理セクタへの書き込み時にコントローラによって飛び越えられるような実施例も可能である。
【０１５４】
ＳＡＴに関しては、前述したように、ＳＡＴが好ましくはメモリアレー６の１または複数のブロック内に記憶される一方で、コントローラにアクセス可能な別個の不揮発性メモリをメモリシステム１０に設けることもできる。この場合、コントローラは、この別個のメモリ内にＳＡＴを記憶する。
【０１５５】
最後に、前述した実施例の変形バージョンにおいては、前述したように、利用可能な消去ブロックを常にその昇順で使用する代わりに、コントローラは、消去ブロックを他の順番で使用する。この変形例において、ＮＥＢリストは、現在利用可能な全ての消去ブロックの選択されたサブセットを含んでおり、ＮＥＢリスト内の最初のブロックアドレスが、使用される次の消去ブロックである。この最初のブロックアドレスは、それがデータ記憶の用途で割当てられた時に、ＮＥＢリストから除去される。形成される任意の新たな消去ブロック（例えば、ホストからの削除コマンドに続く、旧データの形成）は、ＮＥＢリストの低部に加えられる。これは、コントローラ（例えば、ホストからの所定数のセクタ書き込みコマンドであっても良い）によって決定される所定の期間だけ続く。そして、その期間の終端で、コントローラは、ＮＥＢ内のエントリーを現在利用可能な消去ブロックの新たなサブセットに置き換えることにより、ＮＥＢリストを再びコンパイルする。全ての消去ブロックの全セットから成るサブセットは、物理ブロックアドレスを上昇する順序で都合良く順次に使用されても良い。この変形例は、全てのブロックの消去状態をモニタして記憶することに伴うメモリ空間の要件を低減させる点において、幾つかの利点を有する。
【図面の簡単な説明】
【図１】  その中に３つのセクタを示すＮＡＮＤ型フラッシュメモリのセクタの１つのブロックの概略図である。
【図２】  フラッシュチップとコントローラチップとを備えるメモリシステムのブロック図である。
【図３】  ＮＡＮＤ型もしくはＡＮＤ型のフラッシュメモリ内のデータの１ページの概略図である。
【図４】  図３のページのヘッダー領域の構造を示す図である。
【図５】  １ページの物理アドレス（ＰＡ）のフォーマットを示す図である。
【図６】  制御ブロック（ＣＢ）エントリーを示す図である。
【図７】  テーブルブロックリスト（ＴＢＬ）内の１つのエントリーを示す図である。
【図８】  ＭＡＰエントリーのフォーマットを示す図である。
【図９】  ＡＳＢリスト（ＡＳＢＬ）内の１つのエントリーのフォーマットを示す図である。
【図１０】  カレントオブソリートブロック（ＣＯＢ）構造のフォーマットを示す図である。
【図１１】  本発明の一実施例に係るマルチプルフラッシュチップメモリシステムの仮想ブロック内にセクタが書き込まれる順番を示すテーブルである。
【図１２】  仮想アドレス（ＶＡ）のフォーマットを示す図である。
【図１３】  ＶＡからのＰＡの取得方法を示す図である。
【図１４】  本発明に係るマルチプルフラッシュチップメモリシステムに複数のセクタを書き込む間の操作のタイミングを示す図である。
【図１５】  コントローラチップのブロック図である。
【図１６】  本発明のメモリシステムのために割当てられたメモリ容量を示すテーブルである。
【図１７】  アドレス変換プロセスを示すフローチャートである。
【図１８】  図１７のボックス５８で実行されるステップのフローチャートである。
【図１９】  ４つのフラッシュチップおよびコントローラチップを備えるマルチプルフラッシュチップメモリシステムのブロック図である。
【図２０】  図１７のボックス５６で実行されるステップのフローチャートである。
【図２１】  図１７のボックス４４で実行されるステップのフローチャートである。
【図２２】  セクタ読み込み操作のフローチャートである。
【図２３】  セクタ書き込み操作のフローチャートである。
【図２４】  図２３のボックス１６１で実行されるステップのフローチャートである。
【図２５】  図２４のボックス２０７で実行されるステップのフローチャートである。
【図２６】  図２３のボックス１６０で実行されるステップのフローチャートである。
【図２７】  セクタ削除操作のフローチャートである。
【図２８】  ＮＡＮＤ型もしくはＡＮＤ型のフラッシュメモリ内のページの物理的な群分離を示す図である。
【図２９】  図２８のフラッシュページ内にデータを配置する他の方法を示す図である。
【図３０】  図２８のフラッシュページ内にデータを配置する更なる他の方法を示す図である。
【図３１（ａ）】  セクタ書き込み操作前におけるコントローラのバッファメモリ内のデータを示す図である。
【図３１（ｂ）】  図３０の実施例にしたがってデータが配置された場合における、書き込み操作終了後のフラッシュページ内のデータを示す図である。
【図３２】  図３１（ａ）および図３１（ｂ）の書き込み操作中に、コントローラバッファからフラッシュメモリにデータを送信するために使用されるコントローラコマンドのテーブルである。
【図３３】  読み込み操作後におけるコントローラのバッファメモリ内のデータを示す図である。
【図３４】  図３３の読み込み操作中にフラッシュメモリからコントロールバッファにデータを送信するために使用されるコントローラコマンドのテーブルである。
【図３５】  その中に３つのセクタを示すＮＯＲ型フラッシュメモリ内のセクタの消去可能ブロックの概略ブロック図である。
【図１】
0005011498.tif 000002
【図２】
0005011498.tif 000003
【図３】
0005011498.tif 000004
【図４】
0005011498.tif 000005
【図５】
0005011498.tif 000006
【図６】
0005011498.tif 000007
【図７】
0005011498.tif 000008
【図８】
0005011498.tif 000009
【図９】
0005011498.tif 000010
【図１０】
0005011498.tif 000011
【図１１】
0005011498.tif 000012
【図１２】
0005011498.tif 000013
【図１３】
0005011498.tif 000014
【図１４】
0005011498.tif 000015
0005011498.tif 000016
【図１５】
0005011498.tif 000017
【図１６】
0005011498.tif 000018
【図１７】
0005011498.tif 000019
【図１８】
0005011498.tif 000020
【図１９】
0005011498.tif 000021
【図２０】
0005011498.tif 000022
【図２１】
0005011498.tif 000023
【図２２】
0005011498.tif 000024
【図２３】
0005011498.tif 000025
【図２４】
0005011498.tif 000026
【図２５】
0005011498.tif 000027
【図２６】
0005011498.tif 000028
【図２７】
0005011498.tif 000029
【図２８】
0005011498.tif 000030
【図２９】
0005011498.tif 000031
【図３０】
0005011498.tif 000032
【図３１（ａ）】
0005011498.tif 000033
【図３１（ｂ）】
0005011498.tif 000034
【図３２】
0005011498.tif 000035
【図３３】
0005011498.tif 000036
【図３４】
0005011498.tif 000037
【図３５】
0005011498.tif 000038