【手続補正書】
【提出日】平成20年7月22日(2008.7.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリ装置であって、
メモリ配列と、
該メモリ配列と連通しているコントローラとを備え、
該コントローラは、
（ａ）該メモリ配列の第１アドレスに、データを書込むことの要求を、該メモリ装置と連通しているホスト装置から受け取り、
（ｂ）該第１アドレスに書込まれるよう要求された該データを該第１アドレスに格納されているデータと比較し、
（ｃ）（ｂ）における該比較に基づいて、
（ｃ１）該第１アドレスに該データを書き込む、
（ｃ２）該第１アドレスに該データを書込まずに、該ホスト装置に該データが該第１アドレスに書込まれたと通知する、および
（ｃ３）該第１のアドレスの代わりに第２アドレスに該データを書き込む、のうちの一つを実行するように作動する
ことを特徴とするメモリ装置。
【請求項２】
該コントローラが、一組のプログラムされていないメモリ・セルを含む該第１アドレスに応じて、（ｃ１）を実行するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項３】
該コントローラが、該第１アドレスに書込むように要求された該データが該第１アドレスに格納されているデータに付加するものである場合には、（ｃ１）を実行するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項４】
該第１アドレスに含まれている該データが、ファイル・システム構造を構成することを特徴とする請求項１に記載のメモリ装置。
【請求項５】
該コントローラが、以前に割り付けられたアドレスが空きであることを示すデータをファイル割付けテーブルに書込むよう試みている該ホスト装置に対応して、（ｃ２）を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項６】
該コントローラが、ファイル・リスティングに前もって定めたフィールドにのみデータを書込むよう試みている該ホスト装置に対応して、（ｃ２）を実行するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項７】
該コントローラが、最後にアクセスされた日付フィールドにのみデータを書込もうとしている該ホスト装置に対応して、（ｃ２）を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項８】
該コントローラが、ディレクトリ・リスティングの前もって定めたフィールドにのみデータを書込もうとしている該ホスト装置に応じて、（ｃ２）を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項９】
該コントローラが、該第１アドレスに書込まれるよう要求された該データが該第１アドレスに格納されている該データとは異なる場合に、（ｃ３）を実行するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項１０】
該コントローラが、該第１アドレスに書込まれるよう要求された該データが該第１アドレスに格納されている該データとは異なり、該差分がファイル・リスティング中の前もって定めたフィールドだけに存在しない場合には、（ｃ３）を実行するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項１１】
該コントローラが、該第１アドレスに書込まれるよう要求された該データが該第１アドレスに格納されている該データとは異なり、該差分がディレクトリ・リスティングに前もって定めたフィールドだけに存在しない場合には、（ｃ３）を実行するように作動することを特徴とする請求項１に記載のメモリ装置
【請求項１２】
該コントローラが、該メモリ装置をフォーマットしようとする試みに応じて、エラーを発生するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項１３】
該コントローラが、ファイル割付けテーブルのアドレスに先行するアドレスにデータを書込もうとする試みに応じて、エラーを発生するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項１４】
該コントローラが、該メモリ配列に前もって定めたアドレスにデータを書込もうとする試みに応じて、更にエラーを発生するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項１５】
該コントローラが、該メモリ配列が一杯であることに応じて、エラーを発生するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項１６】
該コントローラが、(c3)を実行する時に該第２アドレスがもはや空きでないことを示すために、更に該メモリ配列中のファイル割付けテーブルを更新するように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項１７】
該メモリ配列が、部分的に書込みできる論理ユニットへ組織化され、それによって、該ロジック・ユニットが一杯になるまでは、複数の書込みオペレーションが個々の論理ユニットに実行することができ、最後の書き込みオペレーションが論理ユニットになされる場合に、該コントローラが、該論理ユニット用にＥＣＣデータを書込むように作動することを特徴とする請求項１に記載のメモリ装置。
【請求項１８】
該コントローラが、
第１ページレジスタ、と
第２ページレジスタとを備え、
該第１アドレスに格納されている該データは、該第１ページレジスタに書込まれ、一方、該第１アドレスに書込まれるべき該データが該第２ページレジスタに書込まれる
ことを特徴とする請求項１に記載のメモリ装置。
【請求項１９】
該メモリ配列は、一回プログラム可能なメモリ配列を含むことを特徴とする請求項１に記載のメモリ装置。
【請求項２０】
該メモリ配列は数回プログラム可能なメモリ配列を含むことを特徴とする請求項１に記載のメモリ装置。
【請求項２１】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項1に記載のメモリ装置。
【請求項２２】
該メモリ装置が、該ホスト装置上の対応する電気的コネクターと対をなすように設定された電気的なコネクターを有し、また、該ホスト装置が多数回書込みファイル・システムを含むことを特徴とする請求項1に記載のメモリ装置。
【請求項２３】
ファイル・システム構造を保存するメモリ配列と、
該メモリ配列と連通しているコントローラを備え、
該コントローラは、
（ａ）該メモリ配列と連通しているホスト装置から、以前に割り付けられたアドレスが空きであることを示すデータを該ファイル・システム構造に書込めという要求を受け取り、
（ｂ）該ファイル・システム構造に該データを書込まずに、該ホスト装置に、該データが該ファイル・システム構造に既に書込まれていたと通知するように作動する
ことを特徴とするメモリ装置。
【請求項２４】
該ファイル・システム構造がファイル割付けテーブルを含むことを特徴とする請求項23に記載のメモリ装置。
【請求項２５】
該データが複数の０を含むことを特徴とする請求項２３に記載のメモリ装置。
【請求項２６】
該メモリ配列が１回プログラム可能なメモリ配列を含むことを特徴とする請求項２３に記載のメモリ装置。 
【請求項２７】
該メモリ配列が数回プログラム可能なメモリ配列を含むことを特徴とする請求項２３に記載のメモリ装置。
【請求項２８】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項２３に記載のメモリ装置。
【請求項２９】
ファイル・システム構造を保存するメモリ配列と、
該メモリ配列と連通しているコントローラを備え、
該コントローラは、該ファイル・システム構造のアドレスに先行するアドレスに対してデータを書込もうとする試みに応じて、エラーを発生するように作動する
ことを特徴とするメモリ装置。
【請求項３０】
該ファイル・システム構造がファイル割付けテーブルを含むことを特徴とする請求項２９に記載のメモリ装置。
【請求項３１】
該メモリ装置をフォーマットするコマンドに応じて、該ファイル・システム構造の該アドレスに先行する該アドレスにデータを書込もうとする試みがなされることを特徴とする請求項２９に記載のメモリ装置。
【請求項３２】
該メモリ配列が１回プログラム可能なメモリ配列を含むことを特徴とする請求項２９に記載のメモリ装置。
【請求項３３】
該メモリ配列が数回プログラム可能なメモリ配列を含むことを特徴とする請求項２９に記載のメモリ装置。
【請求項３４】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項２９に記載のメモリ装置。
【請求項３５】
メモリ装置であって、
メモリ配列と、
該メモリ配列と連通しているコントローラとを含み、
該コントローラは、
（ａ）該メモリ配列の第１アドレスに、データを書込むことの要求を、該メモリ装置と連通しているホスト装置から受け取り、
（ｂ）該第１アドレスではなくて、第２アドレスに該データを書込み、
（ｃ）該第２アドレスが最早空きでないことを示すために、該メモリ配列のファイル・システム構造の更新を行うように作動する
ことを特徴とするメモリ装置。
【請求項３６】
該ファイル・システム構造がファイル割付けテーブルを含むことを特徴とする請求項３５に記載のメモリ装置。
【請求項３７】
該メモリ配列は、第１サイズを持つエリアへ論理上組織化され、該データが該第１サイズ未満の第２サイズから成り、サイドバンドエリアは、該第１サイズと該第２サイズとの差として定義され、該コントローラがさらに該第１アドレスのサイドバンドエリアに該第２アドレスを書込むように作動することを特徴とする請求項３５に記載のメモリ装置。
【請求項３８】
該コントローラがさらに、該サイドバンドエリアだけを読み取るように作動することを特徴とする請求項３７に記載のメモリ装置。
【請求項３９】
該コントローラが、サイドバンドからのデータを保存するように作動するキャッシュを含むことを特徴とする請求項３７に記載のメモリ装置。
【請求項４０】
該メモリ配列は、第１サイズを持つエリアへ論理上組織化され、該データが該第１サイズ未満の第２サイズから成り、サイドバンドエリアは、第１サイズと第２サイズとの差によって定義され、該コントローラがさらに、該第１アドレスのサイドバンドエリアのリマップ・テーブルにアドレスを書込むように作動することを特徴とする請求項３５に記載のメモリ装置。
【請求項４１】
該コントローラが、該リマップ・テーブルからのデータを保存するように作動するキャッシュを含むことを特徴とする請求項４０に記載のメモリ装置。
【請求項４２】
該コントローラがさらに、物理から論理へのアドレス変換テーブルに該第２アドレスを書込むように作動することを特徴とする請求項３５に記載のメモリ装置。
【請求項４３】
該コントローラがさらに、ポインター・テーブルに該第２アドレスを書込むように作動することを特徴とする請求項３５に記載のメモリ装置。
【請求項４４】
該メモリ配列がリマッピング・オペレーション用に指定された、あらかじめ割り付けられたエリアを含み、該メモリ配列に空きアドレスがこれ以上ないことを該ファイル・システム構造が示す場合に、該コントローラが、該あらかじめ割り付けられたエリアへ書込むように作動することを特徴とする請求項３５に記載のメモリ装置。
【請求項４５】
該あらかじめ割り付けられたエリアは、該ホスト装置でアクセス可能であることを特徴とする請求項４４に記載のメモリ装置。
【請求項４６】
該コントローラが、２つの状態を含むフラグを保存し、第１状態はポインタ追跡スキームが使われていることを示し、第２状態はテーブル・スキームが使用されていることを示すことを特徴とする請求項３５に記載のメモリ装置。
【請求項４７】
該メモリ配列が１回プログラム可能なメモリ配列を含むことを特徴とする請求項３５に記載のメモリ装置。
【請求項４８】
該メモリ配列が数回プログラム可能なメモリ配列を含むことを特徴とする請求項３５に記載のメモリ装置。
【請求項４９】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項３５に記載のメモリ装置。
【請求項５０】
該メモリ装置が、該ホスト装置上の対応する電気的なコネクターと対をなすように設定された電気的なコネクターを有し、該ホスト装置が多数回書込みファイル・システムを含むことを特徴とする請求項３５に記載のメモリ装置。
【請求項５１】
部分的に書込みできる複数の論理ユニットに組織化され、それによって、個々の論理ユニットへの複数の書込みを、該ロジック・ユニットが一杯になるまでは、実行することができるようにしたメモリ配列と、
該メモリ配列と連通しているコントローラとを備え
該コントローラは、一つの論理ユニットに対しＥＣＣデータを、最後の書き込みオペレーションが該論理ユニットになされるまで、書込むように作動する
ことを特徴とするメモリ装置。
【請求項５２】
該コントローラが、１つの論理ユニットに対しＥＣＣデータを、最後の書き込みオペレーションが該論理ユニットになされる場合にだけ、書込むように作動することを特徴とする請求項51に記載のメモリ装置。
【請求項５３】
該コントローラが、１つの論理ユニットに対しＥＣＣデータを、最初の書き込みオペレーションが該論理ユニットになされる場合および最後の書き込みオペレーションが該論理ユニットになされる場合の両方に、書込むように作動することを特徴とする請求項５１に記載のメモリ装置。
【請求項５４】
該コントローラが、１つの論理ユニットに対しＥＣＣデータを、最後の２バイトが該論理ユニットに書込まれる場合に、書込むように作動することを特徴とする請求項５１に記載のメモリ装置。
【請求項５５】
該コントローラが、１つの論理ユニットに対しＥＣＣデータを、最後の６バイトが該論理ユニットに書込まれる場合に、書込むように作動することを特徴とする請求項５１に記載のメモリ装置。
【請求項５６】
ＥＣＣワードが無効とされていることに応じて、該コントローラがさらにリマップ・オペレーションを実行するように作動することを特徴とする請求項５１に記載のメモリ装置。
【請求項５７】
該メモリ配列が１回プログラム可能なメモリ配列を含むことを特徴とする請求項５１に記載のメモリ装置。
【請求項５８】
該メモリ配列が数回プログラム可能なメモリ配列を含むことを特徴とする請求項５１に記載のメモリ装置。
【請求項５９】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項５１に記載のメモリ装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【発明の名称】消去可能/書換え可能メモリ用に設計されたホスト装置で一回又は数回プログラム可能なメモリを使用する方法および装置
【技術分野】
【０００１】
（関連する出願に対する相互参照）
この出願は、２００４年８月２４日に申請の米国の仮出願番号６０／６０４，３５３の特典を主張し、ここに参照することによって組み入れる。
【背景技術】
【０００２】
モジュール式で、ポータブルな不揮発性メモリ装置は、ディジタル・カメラ、ディジタルオーディオ・レコーダーおよびパソコンのようなホスト装置に容易に接続したり接続を切ったりできるようにすることが可能である。これらの装置の中で使用されるフラッシュカードのような従来のメモリは、書き換え可能で、メモリ・アドレスをシステムまたはユーザの目的のために消去し、書き換えることができる。１回プログラム可能（ｏｎｅ−ｔｉｍｅ  ｐｒｏｇｒａｍｍａｂｌｅ）（ＯＴＰ）又は数回プログラム可能（ｆｅｗ−ｔｉｍｅ  ｐｒｏｇｒａｍｍａｂｌｅ）（ＦＴＰ）のどちらにしても、より廉価なメモリ技術が出来たので、アナログカメラの場合のフィルムと同様に、単に写真を撮り、プリントすると同時に、廉価なカードを「ネガ」として保存できるような、ホスト装置での新しい使用法モデルが使えるようになった。理想的には、標準的なフラッシュ・カメラでこの廉価なカードを使用することができることであるが、ポータブル装置が、システム構造に消去可能なことを要求するＤＯＳ  ＦＡＴ１２/１６ファイル・システムを使用することが一般的なので、これらの技術は必然的に互換性がない。装置の中のファームウェアをＯＴＰかＦＴＰメモリ技術用にカスタマイズされたファイル・システムに更新すれば、この問題は解決できるが、これでは、全体の有効市場がソフトウェアをアップグレードした新しいカメラに制限されることになるか、さもなければ、ユーザにフィールドで既存のカメラのソフトウェアをアップグレードすることを要求することになる。そこで、エンドユーザが既存のカメラで、ＯＴＰまたはＦＴＰのメモリーカードが比較的シームレスに使えるようにするハードウェア・コントローラ・ソリューション、つまり、下位互換性をもつコントローラ（ｂａｃｋｗａｒｄｓ−ｃｏｍｐａｔｉｂｌｅ  ｃｏｎｔｒｏｌｌｅｒ）（ＢＣＣ）を作り上げる必要がある。
この好ましい態様は、ここに添付した図面を参照して記述する。
【発明の開示】
【課題を解決するための手段】
【０００３】
（現在好ましいとされる態様の詳細な記述）
（システム概観）
ここに記述された態様は一回又は数回プログラム可能なメモリを、ファームウェアのアップグレードを要しないで、既存の家庭用電子機器（フラッシュ、つまり消去可能な、不揮発性メモリで作動するような機器）との作動を可能にするように使用することができ、そのため、ユーザに対する影響を最小限に止める一方、下位互換性を提供する。それによって、これらの態様は既存のフラッシュカード・スロットを備えた家庭用電子機器と、一回又は数回プログラム可能なメモリとの橋渡しをする実行可能な方法である。これらの態様は、又、一回又は数回プログラム可能なメモリ用にカスタマイズしたファイル・システムを組み込むためにファームウェアを更新しなくても、将来の家庭用電子機器を設計できるようにする。
【０００４】
さて、図面に注目すると、図１は好ましい態様のホスト装置５およびメモリ装置１０のブロック・ダイヤグラムである。ホスト装置５およびメモリ装置１０の両者は、電気的にホスト装置５をメモリ装置１０と連結するために互いに対をなす、電気的なコネクターを含む。ここに使用されたように、用語「〜と連結される」は、直接的に連結されているか、１つ以上の介在する部品を通して間接的に連結されているかを意味する。ホスト装置５は、ディジタル静止画または動画カメラ、携帯情報端末（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）、携帯電話、ディジタルオーディオ・プレーヤーあるいはパーソナルコンピュータ（ＵＳＢリーダ/ライタ付きあるいはＰＣＭＣＩＡカード・アダプター付きのもの）などの家庭用電子機器の形態であっても良いが、これらに限定されない。この実施形態では、ホスト装置５が、ＤＯＳ−ＦＡＴファイル・システムのような、多数回書き込み（ｗｒｉｔｅ−ｍａｎｙ）ファイル・システム７を含む。
【０００５】
メモリ装置１０は、メモリーカードまたはスティックのようなモジュールでコンパクトな、携帯型のユニットの形式をとることができる。メモリ装置１０はコントローラ２０と一回書き込みメモリ・配列（アレイ）３０を含む。図２はコントローラ２０のブロック図である。図２に示すように、コントローラ２０は、それぞれ、フロントサイドバス・プロトコル・ロジック３６およびバックサイドバス・プロトコル・ロジック３８と連結したフロントサイドバス３２およびバックサイドバス３４を含む。フロントサイドバス・プロトコル・ロジック３６は、マルチメディア、セキュアディジタル、メモリスティック、コンパクトフラッシュ（登録商標）、スマートメディア（登録商標）、ｘＤ、ＵＳＢ、ＨＳ−ＭＭＣ、あるいは利用可能な多くのポータブル記憶メディア用にコンフィギュアできる。バックサイドバス・プロトコル・ロジック３８は、ＮＡＮＤフラッシュ、ＮＯＲフラッシュあるいはその他独自のまたは公開されたメモリ・インターフェース用にコンフィギュアできる。コントローラ２０はさらに２個のページ・レジスタ４０、４２（ページレジスタ０およびページレジスタ１）、スマートフィルタ・ロジック４４、リマップ・ロジック４６およびスマートＥＣＣロジック４８を含む。簡潔にするため図２に示していないが、メモリ装置１０はさらに計時ネットワークおよび他の「グルー」ロジック（“ｇｌｕｅ”ｌｏｇｉｃ)を含むことができる。下に詳細に記述するように、コントローラ２０は、多数回書込み
ファイル・システムを使用して、メモリ装置１０がホスト装置と後方互換性をもつことができるようにする。そのため、時には、コントローラ２０は「後方互換性があるコントローラ」（“ｂａｃｋｗａｒｄ−ｃｏｍｐａｔｉｂｌｅ
ｃｏｎｔｒｏｌｌｅｒ”）あるいは「ＢＣＣ」とここで呼ぶことがある。
【０００６】
コントローラ２０の好ましいインプリメンテーションは、標準の組み合わせロジックと組み合わされた有限状態マシン（ミーリ（Ｍｅａｌｙ）および/またはムーア（Ｍｏｏｒｅ））を使用する、エイシック（ＡＳＩＣ）である。しかしながら、コントローラ２０は様々な他の形式でインプリメントすることができる、例えば、ファームウェアを備えたマイクロコントローラあるいはマイクロプロセッサーであるが、これらに制限はされない。さらに、この態様では、コントローラ２０が、バックサイドバス３４でメモリ配列３０から分離されているが、設計はコスト削減のために単一のダイに統合することができる。大部分は、この態様でコントローラ２０のデザインは、書き換え可能メモリ技術用に使用のコントローラに非常に似ている。違いの例は、このコントローラ２０が不揮発性のメモリの消去と関連したウエアレベリング（ｗｅａｒ−ｌｅｖｅｌｉｎｇ）あるいは他のロジックを好ましくは必要としないということである。ここに示した設計がこれらの追加のブロックおよび機能を含んでもよいが、それらは恐らくコスト的には最適ではないはずである。したがって、これらを除外しようと考えてもよい。同様に、互換性問題を回避するための新しいソフトウェア・ファイル・システムを使用するＯＴＰまたはＦＴＰメモリと共に作動するよう設計された超低コストのコントローラは、１個より多いページレジスタ、リマップ・ロジック、あるいはスマート・フィルタ・ロジックを必要としないかもしれない。
【０００７】
１回書き込みメモリ配列３０は、複数のフィールド・プログラム可能な１回書き込みメモリ・セルを含む。フィールド・プログラム可能な１回書き込みメモリ・セルは、最初の、プログラムされていないディジタル状態で組立てられ、組み立て後に、代替のプログラムされたディジタル状態に切り替えることができるメモリ・セルである。例えば、最初のプログラムされていなディジタル状態は、ロジック１（あるいはロジック０）状態として確認ができ、プログラムされたディジタル状態は、ロジック０（あるいはロジック１）状態として確認できる。メモリ・セルが一回書き込みであるので、ストレージ（記憶装置）の位置(例えばロジック１状態）の最初のプログラムされていなディジタル状態は、一旦、プログラムされたディジタル状態（例えばロジック０状態）に切り替えられると回復できない。１回プログラム可能な（つまり、一回書き込み形）メモリ配列ではなく、メモリ配列３０は、多数回書込みメモリ配列ほどの回数ではなく、二回以上書き込めることができるメモリ配列である、数回プログラム可能な（ＦＴＰ）メモリ配列の形式をとることができる。さらに、メモリ装置１０は追加のメモリ配列（一回書き込み、数回プログラム可能、あるいは多数回書込み）を含むことができる。
【０００８】
該一回書き込みメモリ配列３０は、固体（ソリッド・ステート）メモリ装置（つまり、電気的読み取り、書き込み信号に応答するメモリ装置）)、磁気記憶装置（ハードドライブのような）、あるいは光学記憶装置（ＣＤかＤＶＤのような）のような適合するどんな形式も採れる。固体メモリ・ユニットの形式では、メモリ配列３０中のメモリ・セルは、二次元あるいは三次元的に組織化できる。一つの好ましい態様において、メモリ配列３０は、ジョンソン等の米国特許番号６，０３４，８８２、ザングの米国特許番号５，８３５，３９６、および米国特許出願番号０９/５６０，６２６に記述された配列のような三次元の配列であり、これらすべては参照によってここに組み入れられる。
【０００９】
これらの態様を説明するのに、ＤＯＳ  ＦＡＴファイル・システム(ウィンドウズ（登録商標）・オペレーティング・システムのような)を多数回書込みファイル・システム７の例として使用することとする。注目すべきことは、これらの態様は、他の多数回書込みファイル・システムと共に使えることである。図面に再び戻ると、図３は様々なファイル・システム構造を示す、典型的なFAT 12/16に基づいた記憶カードのメモリマップ５０である。ここに使用するように、「ファイル・システム構造」とは、メモリ内のパーティション、パーティション内のメモリ・スペースおよび／またはファイル・システムがそのパーティションとともに使用できる、あるいは、できないというコマンドのタイプを記述するすべてのデータのことを言う。ファイル・システム構造の例は、マスター・ブート・レコード、パーティション・ブート・レコード、ファイル割付けテーブル（「ＦＡＴ」あるいは「ＦＡＴテーブル」）、ルート・ディレクトリー、およびサブディレクトリーを含むが、これらに制限されない。マスター・ブート・レコード（ＭＢＲ）は、個々の論理パーティションのスタートする位置はもとよりカード(つまりメモリ装置１０)のブート情報を保存するために使用される。ここに示されたような大抵のメモリーカードは論理パーティションを一つだけ含む。この例で、クラスタ・サイズ、クラスタの数、パーティション・タイプ、パーティション名などのような情報を含むパーティション・ブーツ・レコード（ＰＢＲ）は、アドレス０ｘ４０００でスタートする。ＦＡＴ１はＦＡＴテーブル１に相当し、それは、カード１０上の各ファイル、ディレクトリーおよび他の情報のクラスタ番号のリンクしたリストを含む。ＦＡＴ２はＦＡＴテーブル２に相当する。最後に、ルート・ディレクトリーおよびファイル・データ・エリアは物理アドレス０ｘＣ２００で始まる。これらのエリアは、各ＦＡＴテーブル中のクラスタ番号に対応するクラスタに分割される。この例の目的には、各クラスタのサイズが正確に４ＫＢであると仮定する。これがＦＡＴファイル・システムのほんの一例であって、本発明を全く制限する意図が無いことに注意すること。各構造に対する異なる位置、異なるクラスタ・サイズおよび、異なるファイル・システムさえも、ここに記述された態様に関連ができることである。
【００１０】
本システムの一般的なコンポーネントを記述したので、ハードウェア・コントローラ２０のスマート・フィルタ・ロジック４４、リマッピング・ロジック４６およびスマートＥＣＣロジック４８を検討し、どのようにして、これらのロジック・ブロックが使われ、消去可能フラッシュ・メモリー用に設計されたホスト装置がＯＴＰメモリを実際にシームレスに使用できるようにするかを例証する。これらのロジック・ブロックは、多くの既存のホスト装置が消去コマンドを送らず、その代り、消去管理(例えば、ウエアレベリングおよびガーベジ・コレクション)を実行するためにコントローラ２０に依存すると言う事実を利用する。ホスト装置は、アドレスに書込まれた最も最近のデータが、後にそのアドレスが読み取られる時に存在するものと単に予期している。上述したように、コントローラはこれらのロジック・ブロックのうちのいくつかあるいはすべてを使用することができるが、３個のロジック・ブロックをすべて使用することはそこに明示されていない限り請求項で要求されない。
【００１１】
（スマート・フィルタ・ロジック44）
スマート・フィルタ・ロジック４４は、コントローラ２０がユーザが希望する行動に基き、スマートにホスト・オペレーションを修正することを可能にする。スマート・フィルタ・ロジック４４の1つの形式は、アドレスに書き込みを要求されたデータをそのアドレスに以前書込まれたデータと比較するために書き込みの前の読み取り（ｒｅａｄ−ｂｅｆｏｒｅ−ｗｒｉｔｅ）オペレーションを実行する（つまり「新しい」データを「古い」データと比較する)。最も単純な場合では、以前に書込まれたデータの何らかの修正がある場合、スマート・フィルタ・ロジック４４はリマップ・オペレーションを実行することができるが、これは好ましくないユーザ・モデルという結果になるかもしれない。複雑さを加え、スマートにデータの差異を判断することによって、コントローラ２０は、ホスト装置５が何を行おうと試みているか推論することができ、次いで、次のオペレーションのうちの一つを選んで実行することができる：そのアドレスに新しいデータを書き込むか、データを「偽書き（ｆａｋｅ  ｗｒｉｔｅ）」する（つまり、実際には何も書き込まれなかったのに、ホスト装置５に、書き込みオペレーションはうまく実行されたと伝えるか、書き込みを却下しカード・エラーを発生するか、あるいはリマップ・オペレーションを実行する。これは、図４のフローチャートに図示されている。図示のように、下位互換性をもつコントローラ(ＢＣＣ)２０は、書き込みオペレーションを受け取る（実行６０）。データがブランクページにもたらされて書込まれるか、あるいは、データが付加される場合(実行６５)、コントローラ２０はホスト装置５によって要求されたままのデータを書込む(実行７０)。「最後にアクセスした」フィールドが更新中か、あるいは、ＦＡＴテーブルを「ゼロ」に設定しようと試みがなされている場合、コントローラ２０は「偽書き」を実行する（実行８０）。書込みがＰＢＲになされる場合、あるいはリマップ・ゾーンとのコリジョンがある場合（実行８５）、コントローラ２０はカード・エラーを出す（実行９０）。その他すべての書込みオペレーション（実行９５）に対応する場合、コントローラ２０はリマッピング・オペレーションを実行する。これらのブランチ（分岐）はより詳細に以下記述する。大切なことは、スマート・フィルタ・ロジック４４は、フローチャートに示された全４個のブランチ、全４個のブランチ未満、或いは、示されていない追加のブランチをインプリメントできることに注目することである。
【００１２】
図４に図示のように、スマート・フィルタ・ロジック４４が、好ましくはデータがどこに書込み中かによって異なる実行をする。従って、スマート・フィルタ・ロジック４４は、ホストが要求する新しいデータだけでな、アドレスも監視することが好ましい。例えば、ＦＡＴテーブルへの書込み用に配置されているフィルタは、ユーザ・データ・エリアへ書込み用に配置されているフィルタとは異なることができる。したがって、コントローラ２０は、カード１０上のＦＡＴテーブルのアドレスと他のファイル・システム構造を理解していることが好ましい。これは、これらのアドレスを静的にロジックへハードコードするか、スタートアップでコントローラ２０にＭＢＲ及びＰＢＲを読み取らせて解釈させるか、あるいは、アドレスを、パワー・オンで様々なコンフィガレーションデータを与える「マジック・ページ」内に保存することで実行することができる。
【００１３】
完全にスマート・フィルタを理解するためには、ユーザがメモリ装置上で実行することのできるオペレーション、および、それらがファイル・システム構造およびデータを操作するコマンドにどのように翻訳されるかを先ず理解しなければならない。先ず、ユーザが写真を撮るか、ファイルをコピーするか、新しいファイルを保存するか、あるいは、ファイルをメモリーカードに移動させる時に何が起こるかを説明する。これらのオペレーションは装置によって変わり得るが、一般的傾向には従う。最初に、ホスト装置は、空きスペースがカード上のどこに在るかを見つけるため、どちらかあるいは両方のＦＡＴテーブルを読み取る。この空きスペースはＦＡＴ１６ファイル・クラスタの中で０ｘ００００として表わされている。次に、ホストは、新しい３２バイトファイルのリスティングの最初の２６バイトを適切なディレクトリー・クラスタへ書込む。この３２バイト構造のメモリマップは図５に示されている。次に、ホストは、クラスタのリンクしたリストを書込むことで、ファイル用に使用されるメモリをＦＡＴテーブルへ割り付ける。メモリが割り付けられた後、ホストは適切なクラスタにファイル・データを書込む。留意することは、この割付けおよび書込みはどの順序で行ってもよいことと、１回につき単一のクラスタが割り付けられ、データが書込まれるように分離されても良いことである。データをすべて書込んでから、始めのクラスタ番号およびファイル・サイズを示すために、最終の６バイトをファイル・リスティングに書込む。
【００１４】
この例は図６および７で見ることができる。ホストがメモリの未使用のスペースにＦｉｌｅ２.ｊｐｇを書込み中であると仮定する。ファイル名、属性情報などは、適切なディレクトリーに最初に書込まれる。その後、ＦＡＴテーブルは、そのファイルに対して更新されるが、ここではクラスタ０ｘ０９に０ｘ０Ａを書き込むことによりスタートし、次のクラスタがクラスタＡにあると表示する。ファイルの終りがクラスタ０ｘ１１に書き込まれた０ｘＦＦで示されるまで、リンクしたリストが書込まれる。その後、ホストは、カードへのファイル・データを新しく割り付けられたクラスタに書込む（今度の場合も、このオペレーションは、ファイルの終わりに到達するまで、１回につき単一のクラスタを分離して割り付けることができる。）最終的には、最後の６バイトがファイル・リスティングに書込まれ、Ｆｉｌｅ２.ｊｐｇが、クラスタ０ｘ０９でスタートし、サイズが45KBであることを示す。
【００１５】
新しいディレクトリーは、新しいファイルの作成と非常に似た方法で作成される。事実、ディレクトリーおよびファイルは、ディレクトリー属性ビットを除けば、ＦＡＴファイル・システム・インプリメンテーションにおいて全く同じである。したがって、ホストは、適切なディレクトリーに（ＲＯＯＴディレクトリーは、ＦＡＴ２の後の、ユーザ・データ・エリアの最初に定義される)、先ずディレクトリー名および属性ビットを書込むことにより、ディレクトリーを作成する。次に、新しいディレクトリー用のクラスタは、ＦＡＴテーブルに０ｘＦＦを書き込むことにより割り付けられる。任意の新しく作成されたディレクトリーの内部には、ファイル「．」とファイル「．．」があり、ディレクトリーとその親をそれぞれ指す（その「．」ファイルのクラスタ番号はディレクトリー・クラスタと同じである）。これらの２つのファイルが書込まれた後、ホストは続いて、最終の６バイトを３２バイトのリスティングに書込むことによりディレクトリー・リスティングを完成する。
【００１６】
ユーザのオペレーションの別の例は、以前にカードに書込まれたファイルを削除することである。ユーザが削除する場合、ＦＡＴ系オペレーティング・システムは、普通にはカードからファイル・データあるいはファイル名を削除しない。代わりに、文字０ｘＥ５がファイル・リスティングの第１番目のバイトに書込まれ、ファイルのクラスタは、ＦＡＴテーブルのそれらの位置に０ｘ００を書込むことにより割り付けが解除される。ホストはどれも、ファイル・リスティングで第１番目の文字として「Ｅ５」を読み出せば、このファイルが削除済みとしてスキップすることを知っている。これにより、又、ファイルへ正しい文字を書換え、オリジナルのクラスタを再び割り付けることにより、ファイルを回復する機会が与えられる。
【００１７】
メモリ中の各ファイルは、ファイル名；読み出し専用、隠し、ディレクトリー、アーカイブなどのファイル属性；ファイル生成期日；ファイルを最後にアクセスした日付；ファイル・サイズ；および第１のクラスタ・エントリーのような情報を含む３２バイトのファイル・エントリーを含む。ファイルをリネームするか、あるいは、その属性（例えば、隠し、アーカイブ、読み出し専用）を変更するには、ホスト５は、オリジナルのリスティングに、新しいファイル名あるいは属性ビットを書込むデータとともに、書き込みコマンドを単に送る。一般に、コントローラ２０は、ホスト５がリマップ・オペレーションを実行により、これらのパラメーターのうちのどれでも修正することを可能にする。しかしながら、コントローラは、ファイルリスティングの「最後にアクセスした日付フィールド」 (図５のバイト１８−１９)が更新されるときに、偽書きの実行によりメモリを保存することを選択してもよい。この例外の理由は、ファイルが読み取られるごとに、マイクロソフト・ウィンドウズ（登録商標）のようなホストの中には、このフィールドに新しい日付を書込み、これで、メモリの５１２バイトをリマップのために使われる可能性があるためである。これはユーザが知らないうちに書き込みオペレーションを実行するシステムの例である。これを回避するために、スマート・フィルタ・ロジック１４４は、この特定の更新をインプリメントしないように選択できる。これらの隠しオペレーションの意味および取り扱い方については、この明細書で後に、より詳細に検討することとする。
【００１８】
ユーザは、さらにメモリーカードをフォーマットするよう選択できる。これはホスト装置により、様々な方法で実行される。ある装置では、単にＦＡＴおよびルート・ディレクトリーに０を書きこみ、それにより、メモリ・スペースをすべて「解放する」。他のホストは、新しい情報でＭＢＲおよび／またはＰＢＲを書換え、それで、ホストとルートのディレクトリーをゼロに設定することにより、カードを再フォーマットしようと試みる。さらに、他のホストはメモリ・スペースがすべて消去されていることを保証するために全カードに０を書込むと同様に上記の一つまたはすべてを実行する。最後に、あるホストは、上記のオペレーションの一つ以上を実行し、さらに、データがすべて完全に消去され新しいデータの準備ができていることを保証する消去コマンドを使用する。
【００１９】
ユーザが試みることができる最終のオペレーションは非常に広い――既存のデータを修正することである。ユーザは、カメラ上の画像を回転させるか、色あるいは別の変数を改善するツールを使用後、再度カードへ画像を保存するか、あるいは他の多くのオペレーションのどれでも選択できる。ホスト装置は、新しいデータを書込み、古いファイルを消去することから、単に古いファイルの適切なクラスタに新しいデータで上書きすることに及ぶ様々な異なる方法でこれらのオペレーションのうちのどれでも実行することができる。
【００２０】
ホストが異なるユーザ・オペレーションをどのように実行するかについての基礎的な理解が得た以上、スマート・フィルタおよびそれらがどのように作動するか理解し始めることができる。ＢＣＣコントローラは、大抵の書き込みコマンドを受け取ると、書き込み前読み取り（ｒｅａｄ−ｂｅｆｏｒｅ−ｗｒｉｔｅ）（ＲＢＷ）を実行する。ホストから希望の書き込みアドレスを受取ると直ちに、メモリ装置が読み取られることが好ましい。コントローラ２０が希望のデータを読み取り、ページレジスタ（Ｐａｇｅ  Ｒｅｇｉｓｔｅｒ）１（ＰＲ１）４２にそれを挿入することができるとともに、一方ホスト１０がページレジスタ０（ＰＲ０）４４に移送される新しいデータを送信しているので、これで動作を改善することができる。このＲＢＷオペレーションについてのより詳しいことは、この文書で後にリマッピングの記述の中にある。スマート・フィルタ・オペレーションの様々な例は、図５に示すＦＡＴテーブルに関連してここに述べることとする。
【００２１】
新しいファイルあるいはディレクトリーを作成するのに、ホスト装置５は適切なサブディレクトリ中に新しい３２バイトのファイル・エントリーを書込み、正しいメモリ・スペースを割り付けるためにＦＡＴテーブルを更新する。ホスト装置５が新しいファイルを書込もうとしている場合、ホストはこの図の中の最終２個のクラスタを、おそらく値０ｘ１３および０ｘ１４でそれぞれ割り付けようとするであろう。図４のフローチャートを見ると、データが修正されていないので、「データを付加する」に相当することになる。したがって、スマート・フィルタ・ロジック４４は、変更せずオリジナルのアドレスに単にデータを書込む。この一般的な場合では、コントローラ２０によって、新しいファイルのために、ホスト装置５が空きスペースに単に上書きすることができた。しかし、ある場合には、以前の削除の所為で、スペースはホスト装置5に空きのように見えるかもしれないが、現実には、メモリは決して消去されなかった。この場合、下記のように、スマート・フィルタ・ロジック44は、新しいデータが古いデータに取って代わるために、リマップ・オペレーションを実行することができる。
【００２２】
ファイルを削除するのに、ホスト装置５は二つの機能を実行する。第１に、ホストは、ホスト装置５にデータ・エリアは今利用可能であることを示すために、ＦＡＴテーブルのファイルのクラスタ・ポインタに「００ｈ」で上書きする。ＯＴＰまたはＦＴＰのメモリの場合には、メモリを削除することが極めてできそうでないので、したがって、コントローラ２０は、そのような方式でメモリを「フリーアップ（使えるように空ける）」ことはしたがらないであろう。言いかえれば、コントローラ２０は、好ましくは、リマッピング・アルゴリズムを使用して、ホスト装置５がデータを修正したと見せかけるが、しかし実際には、削除してこの空きスペースを取り戻すことはできない。このため、スマート・フィルタ・ロジック４４は、以前に割り付けられたクラスタに、ホストが０ｘ００を書込むことを決して許可しないことが好ましい。このアクションは図４で「偽書き込み」と呼ばれている。特に、コントローラ２０は、ホスト装置５に、メモリに[複数の]０が書込まれたことを伝えるが、実際にどんな書き込みも行わない。ＦＡＴテーブルに[複数の]０を書込むとカードに実際より多くのスペースがあるようにユーザに思わせることになるので、カードがより多くのスペースがあるように見えても、新しいデータは最早書込めないとしたらユーザに良くない経験をさせることになると理解することは重要である。第２に、ホスト装置５は、３２バイトのファイル・エントリーの第一番目の文字に「Ｅ５ｈ」で上書きし、ＦＡＴファイル・システムに該ファイルを飛ばす（スキップ）ように知らせる。ホスト５がコントローラ２０へ書き込みコマンドを送る場合、コントローラ２０は、以前のものと新しいデータの比較が出来るようにするために、書き込み前―読み取り（Ｒｅａｄ−Ｂｅｆｏｒｅ−Ｗｒｉｔｅ）オペレーションを実行する。この時に、下記のように、スマート・フィルタ・ロジック４４は、リマップ・オペレーションが、元のファイルの最初の文字に「Ｅ５ｈ」で上書きすることを可能にする。
【００２３】
ＦＡＴテーブルのスマート・フィルタリングが起こる最後の例は、ホスト５が以前に書き込まれたクラスタに０ｘ００以外の何かを書込んで、データを変更しようと試みる場合である。これは、例えば、ファイルが修正されて、長さが拡張される場合、（例えば、ｔｈｕｍｂｓ．ｄｂファイルへデータが加えられて、１６ＫＢから２４ＫＢに拡大する場合）起こり得る。ここで、エンド・オブ・ファイル・マーカー０ｘＦＦは、新しく付加したデータを指すクラスタ番号と取り替えられることになる。この場合、リマップ・オペレーションが起こり、ホスト５が望むようにデータを修正することが可能になる。
【００２４】
重要なことは、偽書き込みオペレーションで、ホストが、書込まれていると信じる事と、現実にメモリの中にある事との間にずれがあることを理解することである。ウィンドウズ（登録商標）のように揮発性のＲＡＭにＦＡＴテーブルをキャッシュ（ｃａｃｈｅ）するホスト・システムでは、これが、一個を越えるスマート・フィルタが一つのオペレーションで適用されるかもしれないことを意味する。例えば、ユーザが一つのオペレーションで１ＭＢのファイルを削除し、ＢＣＣ  ２０が、ＦＡＴテーブルの１ＭＢの値のクラスタをゼロに設定することを偽造する、と仮定する。次に、ユーザがメモリ３０に５００ＫＢファイルを書込もうとすると仮定する。この場合、ホスト５は、削除オペレーションによって空けたクラスタに新しいファイルを入れようと試みるであろう。ホストは、したがって、新しいクラスタ割付けを書込み、残余のクラスタ０ｘ００を残すであろう。したがって、該スマート・フィルタは、同時に、以前に偽造されたスペースをゼロにしない一方、新しいファイルのクラスタをリマップしなければならない。この例は図８および９で見ることができる。時間０では、偽書き込みが、カード上に値１１−ＦＦを維持し、時間１でリマップ・オペレーションにより、カードに新しいファイルのクラスタ１１−ＦＦが書込まれるが、猶、スペースが空けられたようには見えないことを保証するために１４−ＦＦFも維持される。
【００２５】
この態様では、データ・エリア用のスマート・フィルタは、ＦＡＴテーブル中のものとは異なる。ユーザ・エリアに保存できるデータは、実際のファイル・データの３２バイトのファイル／ディレクトリー・リスティングおよびクラスタに制限されている。最も簡単な場合では、またしても、スマート・フィルタが、使用歴のある(ノンバージン)（ｎｏｎ−ｖｉｒｇｉｎ）スペース上のどの書き込みデータもリマップするよう選択できる。しかし、またしても、これでは、以前に言及した、隠しシステム・オペレーションがユーザが好まなかったリマップ用に余分のメモリ・スペースを使用することになるので、好ましくない使用法モデルと言う結果になってしまう。これらの余分のリマップ・オペレーションを回避するために、ＢＣＣコントローラ２０がページ・レジスタ０およびページ・レジスタ１のデータを比較し、図７で示すように、一つのまたは複数の変更だけが特定のフィールドに関連している場合、偽書込みを実行するのが好ましい。例えば、ページレジスタ０でのデータが、オフセット１８の２バイトを除いて、厳密にページレジスタ1のデータと一致した場合、コントローラ２０は、ホスト５が「最後にアクセスした」フィールドを更新しようと試みていると決定し、したがって、偽書込みを実行することになる。したがって、ホスト５は、フィールドが更新されたと見なすが、実際には、書き込みは起こらなかった。
【００２６】
既知のファイル・システム構造フィールドのどんなデルタあるいはデルタの組み合わせも、スマート・フィルタに適用することができる。例えば、設計者が、ＯＴＰメモリがユーザによる修正を可能にすべきでないと決めると仮定すると、したがって、どのリネームまたは削除オペレーションも許可されないことになる。この場合、フィルタ・オペレーションは、バイト０〜１１に対する変更を検知することができ、偽書き込みを実行することができる。さらに、設計者がリネームはよいがファイルを隠すことは許可しないと決定したと仮定しよう。もしユーザがファイルをリネームし、属性ビットを変更しようとすれば、スマート・フィルタ・ロジック４４は、これがしかるべきフィールドに起こっていることを検知することができる筈で、データを新しい名前でリマップできる、しかしファイルを隠せるように属性ビットを変更できない。
【００２７】
スマート・フィルタ・ロジックが呼び出せる最後のオペレーションはエラーを示すことである。好ましい態様では、これが二つの場合だけに起きる:  すなわち、（１）ユーザがカード１０をフォーマットしようとする場合、あるいは、（２）カード１０が一杯で、これ以上のデータを書込むことができない場合である。カード１０をフォーマットするのに、ホスト５は少なくとも二つのオペレーションを実行する:すなわち、ＦＡＴテーブルを取り除き、ＰＢＲを希望のフォーマット情報で更新する。この状況で、コントローラ２０は、ＦＡＴテーブル上位（図３の中のアドレス０ｘ０００〜０ｘ４０００）で書き込みオペレーションが起こっていることを検知し、ホストのコマンドに応答する時に、一連のエラー・ビットをセットする。これらはＣＲＣエラーか、書込み失敗エラーか、あるいはカード形式因子に適切な他のステータスエラー信号であり得る。更に、コントローラ２０は、またしても、ＦＡＴテーブルをゼロに設定しようとする如何なる書き込みも「偽造」できる。カード１０が一杯で、これ以上のデータが書込めない場合、カード１０が一杯であることを、コントローラ２０は、ＦＡＴテーブル、あるいは書き込みアドレスを通じて検知できる。この時点では、追加データは書込むことができず、エラーが表示される。さらに、どの書き込み保護ビットも、ＯＴＰカード１０が現在一杯で本質的にはＲＯＭであるとユーザに合図するようにセットできる。コントローラ２０は、カード１０が一杯であることを、ＦＡＴテーブル中の検知から、リマップ・アドレシングおよびホスト書込みアドレシングの重複に気付くことに及ぶ様々な方法で検知することができる。
【００２８】
上記の例では、ホストが、ファイルまたはシステムのデータを削除せよとする実際の消去コマンドを送らず、代わりにこのオペレーションを実行するのにコントローラに依存するとすべて想定した。しかしながら、実際には、ホストの中には、自身で消去オペレーションを実行するか、或いは物理および論理ブロックを無効にして、消去オペレーションを後日実行するかの何れかを要求されて余分に複雑化しているものもある。このようなシステムの例は「スマート・メディア」・インターフェースであるが、該明細書は、如何にして論理ブロックをメモリのサイドバンドエリアに作り、無効フラグをマークし、また他のもっと複雑なオペレーションを実行するかを示している。重要なことは、オペレーションが書き込みであったか、消去、または他のコマンドであったかどうかを問わず、コントローラが、古いデータと新しいデータの比較に基づいた規定のオペレーションをスマートに実行するこの種のシステムにも同じく容易にスマート・フィルタの概念を適用できることに注目することである。
【００２９】
要約すれば、ホストが実行できる個々のオペレーション各々を考察すると、スマート・フィルタ・ロジックは比較的複雑に見えるかもしれない。しかし、よく調べるとこの行動には様々なパターンを見ることができる。コントローラ２０がプリフォマット済で販売されている場合、ＰＢＲのアドレス、ＦＡＴテーブル、ルート・ディレクトリーおよびデータ・エリアが既知である。ホスト５がＰＢＲに上書きしようとすれば、これはカード１０のフォーマットを変更するので、コントローラ２０がカード・エラーを強制するのが好ましい。メモリ配列３０技術のＯＴＰ／ＦＴＰ特性により、コントローラ２０は、ＦＡＴに以前書込まれたアドレスに００ｈを書込むことにより、カード１０上のスペースを空けようとするどんな書き込みも偽造するのが好ましい。同様に、最後のアクセスされたフィールドのようなファイル・エントリーへの不適当な更新はメモリ利用の改善のために偽造することができる。ホスト５が未使用の（バージン）メモリ・スペースへ書込む場合、スマート・フィルタ・ロジックは、書き込みが中断されずに継続させるのが好ましい。また、用心過ぎると言う誤りになるが、ホスト５がスマート・フィルタ・ロジック４４が理解しないやり方で、以前のデータに上書きする場合、ホスト・オペレーションがうまく継続するのを可能にするよう、書き込みをリマップできるのが好ましい。最後に、単一の書き込みコマンドに対して、コントローラ２０に幾つもの機能を実行させることが可能なフィルタの組み合わせは、注意を払うのが好ましい。例えば、ホスト５がＦＡＴテーブルをキャッシュに入れ、大きなファイルを消去し、次に、「空けられたスペース」に小さなファイルをコピーしようと試みるならば、コントローラ２０は、新しいファイルをＦＡＴテーブルに余分なスペースを空けないで書込ませることが好ましい（キャッシュに入れられたＦＡＴ対フィルターされた実際のＦＡＴとのミスマッチがこれらの組合せの問題を起こす）。
【００３０】
（リマッピング・ロジック４６）
リマッピング・ロジック４６は、特定のアドレスを消去したとホスト装置５に思わせることが出来る新しい論理アドレスに、データを移動させるのに使用することができる。リマッピングはメモリ・コントローラ２０による、データおよびアドレスのインディレクション（間接化ｉｎｄｉｒｅｃｔｉｏｎ）を記述するために使用される用語である。この用語は、ホスト５が供給した論理アドレスとは異なる物理位置にデータを書込む概念を指す。リマッピングはフラッシュ・メモリーを含む様々な技術が使用するが、その理由は、性能の向上からウエアレベリング・アルゴリズムによるデータ保全までと色々である。しかし、ＢＣＣで作動するＯＴＰまたはＦＴＰのメモリにとって、リマッピングが、消去性を模倣するために使用されるという点で独特である。例えば、ホストがデータセットＡをアドレス０に書込むように要求する場合、コントローラ２０はアドレス０にデータを書込むことを選ぶことができる。その後、前述のように消去オペレーションを実行するため、文字「Ｅ５」を書込むような時に、ホスト５はデータをＡからＢに変更したいと思うかもしれない。この時に、コントローラ２０は、スマート・フィルタを使用し、ホスト５が適切にデータセットＡを修正していたと断定し、アドレス１のような異なる物理位置にデータセットＢを書込むことになる。さて、ホスト５がアドレス０を読み取る場合、コントローラ２０は、代わりに、アドレス１にあるデータを返すことを必ず承知し、従って、ホスト５およびユーザにとってメモリが修正されたように見せるのである。
【００３１】
ホスト装置からデータをリダイレクト（出力先変更）するのに多くの方法がある。例えば、次の特許書類を参照のこと(これらは本発明の譲受人に譲渡されており、参照によってここに組込まれる):米国特許出願番号０９／８７７，７１９；０９／８７８，１３８；１０／３２７，６８０；及び１０／０２３，４６８。一つの共通する方法はスタートアップで読み取られるか、あるいは、計算され、次いで、コントローラ２０の揮発性メモリに保存される物理−論理−アドレステーブルを使用することであるが、このテーブルは非常に大きくなることがあり、コントローラ２０にダイ・サイズおよびコストが加えられることになる。ここに記述されたインプリメンテーションについては、アプリケーションの必要条件を越えて性能を危うくさせないで、コストをできるだけ低く維持することが好ましい。好ましい態様では、２つのリマッピングの方法がある。
【００３２】
最初で最も簡単なスキームはホストに見えないメモリ・ページの「サイドバンドエリア」を使用することである。現在の好ましい態様では、メモリ配列３０が５２８Ｂページに編成されているが、ＦＡＴファイル・システムは５１２Ｂセクターを使用する。この余分な１６Ｂは、サイドバンドと呼ばれ、コントローラ２０が、ＥＣＣデータ、データおよびアドレス有効性フラグ、およびリマッピング・ポインタを含むがこれらに制限されない余分な情報を保存するために使用できる。このスキームでは、ページがリマップされた場合に、物理アドレスを保存するために、コントローラ２０がこのサイドバンドの一部を使用する。初めて該ページを書込む場合、物理・論理アドレスが同じになるので、リマップ・ポインタは必要ない。ホスト5がデータを修正しようとする時、コントローラ２０は新しい位置に新しいデータを書込み、この位置の物理アドレスを古い位置のサイドバンドへ保存する。
【００３３】
図１０は、データがこのリマッピング・スキームの下でどのように読込まれるかを図示すフローチャートを含む。最初に、読み取りコマンドおよびアドレスがカード１０へ送られる（実行１１０)。コントローラ２０は５２８Ｂページ全体（またはポインタを含むのに必要なだけ)を読込む（実行１２０）ことを承知しており、アドレスがリマップされたかどうかをコントローラ２０に伝えるＦＦｈをサイドバンドが含むかどうか決める（実行１３０）。ポインタがバージンの場合(つまり、ＦＦｈを含む)、コントローラ２０はホスト５に５１２Ｂページを返す。サイドバンドがアドレスを含む場合、コントローラ２０は最も最近書込まれたデータを見つけるためにサイドバンドに保存されたページ・アドレスを読み取る。このアドレスをサイドバンドに直接保存でき、あるいはアドレスのオフセットを保存できる。この型のリマッピングはコントローラ２０がリマッピングに使用される余分のスペースを割り付けるのにＦＡＴテーブルを修正しないので、静的と言われる。このインプリメンテーションでは、カード１０は、ＦＡＴテーブルに既に割り付けられていたリマップ・データの規定量でプレフォーマットされている。一旦この量のデータが使用されていた場合、リマップは最早行われ得ない。ホスト５がそれ自身の目的(例えば画像データを保存する)のためにこのスペースを使用しようとしないように、ＦＡＴテーブルはリマップ割付けを示す。
【００３４】
この最初のリマッピング・スキームは非常に強力で、実行するのにほんの僅かのロジック・オーバーヘッドを要するだけである。しかしながら、カレントデータを見つけるには、Ｎ回リマップしたページはＮ回読み取りが必要となるので、比較的高い性能上のオーバーヘッドが付随することになってしまう。その代わり、この性能を改善するのに、もう１つ他の単純なリマッピング・スキームが使用できる。ここでは、リマップしたページへのポインタを保存する代わりに、リマップ・テーブルへのポインタを利用する。このテーブルは、最も最新のページ・データを保存するのに、時間−空間へのマッピング技術を使用することができる。時間一空間へのマッピングは、米国特許番号６，７３８，８８３に記述され、本発明の譲受人に譲渡されており、参照によってここに組み入れられる。さて、Ｎ回リマップされたページは、高々３回の読みで読み取ることが出来、ほんの僅かなコストと複雑さが加わるだけで製品性能が大幅に向上するのである。
【００３５】
注目すべきことは、アドレスがアクセスされる度ごとに、コントローラ２０がこれらの読み取りを実行して最新のページを見つけるのが好ましい。コントローラ２０が書込み前読み取りを実行する前記の個々のスマート・フィルタ・オペレーションについては、コントローラ２０が、最も最近のページを見つけるのにリマップのチェーンをウォーク（ｗａｌｋ）することも好ましい。
【００３６】
容易にこれらのアルゴリズムをさらに複雑に出来ることも理解されるべきである。例えば、複雑性を最小限に留めて、一つ以上これらのアルゴリズムを別のものと共に使用して、性能を改善できる。複雑性に関する別の例は、キャッシュした読み取りオペレーションを実行するのに、ＦＡＴファイル・システムでのデータの強い位置依存性を利用することであるだろうが、ここでコントローラ２０があるページおよびその近傍の複数ページを読み取り、ホスト５あるいはコントローラ２０のいずれかが実行している他のオペレーションと並行してデータを見出すことになる。これでコントローラ２０にコストが幾らか増す一方、書き込み前読み取りおよびリマッピング−ウォーキングのオーバーヘッドを大巾に縮小できる。
【００３７】
ＢＣＣコントローラ２０がインプリメントできる標準的リマップ・アルゴリズムとの他の大きな１つの差異は、ホスト５へのフロー・コントロールの問題を解決するのに利用される。言いかえれば、コントローラ５が、ホストに知らせないで新しい位置にデータを移動させており、亦ホスト５は、このデータが現実に消去されて書き直されていると見なす場合、ホスト５は、どれだけの空きスペースが現実に利用可能かをどのようにして知るのか？この問題を解決するために、ＢＣＣ２０は２つの別個のオペレーションを実行する。第一に、前記のように、スマート・フィルタ・ロジック４４は、ホスト５がスペースを空けようとＦＡＴテーブルに複数の０を書込むことがないように保つ。これは、ファイル削除のような、ユーザが支配するオペレーションがメモリを削除し、開くように見えることのないように保つであろう。しかしながら、リマッピング用にコントローラ２０が消費するメモリは場所を知らせられなければならない。
【００３８】
この問題を解決する一つの簡単な方法は、メモリ装置１０の販売時以前にリマッピング用にメモリを割り付けることである。この静的量のリマッピングは、あらかじめ割り付けられたスペースの残りがなくなるまで、コントローラ２０が使用することができる。この時に、コントローラ２０はカード・エラーを表示するか、リマップでないすべての書き込み、あるいは他の多くのオペレーションを許可することが出来る。静的リマップ割付けと呼ばれるこの方法は、ユーザが実行できるオペレーションの回数およびサイズを制限するので、好ましくないかもしれないことを理解することができる。
【００３９】
動的なリマップ割付けと呼ばれる、より複雑な形式のリマッピングがこの問題を解決する。図１１にこの方法のフローチャートを見ることができる。先ず、ホスト５は書き込みコマンドを送り、データはページレジスタ１に保存される(実行１６０)。次に、コントローラ２０は書込み前読み取り（ＲＢＷ）オペレーションを実行し、ページレジスタ２にデータを保存する（実行１７０）。ページレジスタ２が空の場合(つまり、ＦＦｈを含む) (実行１８０）、ページレジスタ１の内容は、メモリ配列に書込まれる（実行１９０）。そうでなければ、コントローラ２０は、ページレジスタ１の内容が、付加（アペンド）されたデータを備えたページレジスタ2の内容と一致するかどうかを決める（実行２００）。そうである場合、ページレジスタ１の内容はメモリ配列に書込まれる（実行１９０）。そうでない場合、スマート・フィルタリング・ロジックが可能（イネーブル）になっているかどうか決める（２１０実行）。そうである場合、データはフィルターされる（２２０実行）。そうでない場合、リマップが要求される（２３０実行）。リマップを実行するのに、メモリの一番上の最初の空きページを見つけ（実行２４０）、ページレジスタ１の内容は、エラーの無い最高の空きページに書込まれる（実行２５０）。その後、ＦＡＴテーブルは、該ページのクラスタを使用済みとするよう更新される（実行２６０）。最後に、新しいページ・アドレスを元の（オリジナル）のページのサイドバンドに書込む（実行２７０）。パフォーマンスの節約（（例えば、アドレスが利用可能な場合、およびホスト5からのデータ入力が完了する前に、書込み前読み取りが起こる）を提供するのに、二つのページレジスタがここに示されているが、単一のページレジスタを使用することは可能である。
【００４０】
フローチャートに図示のように、コントローラ２０は、ＦＡＴテーブルに書込むことで、リマッピングのためにスペースが使用されたことをホスト５に通知する。補足メモリが必要になるにつれて、ちょうどホスト５がファイル・データにクラスタを割り付けるように、コントローラ２０はそれ自身の使用に新しいクラスタを割り付けることができる。すなわち、このスキームは、上記のようなアルゴリズム追跡ポインタを使用するが、補足スペースがリマッピングのために必要になると、また、動的にＦＡＴテーブルを更新する。このインプリメンテーションの利点は、ホスト５およびユーザが実行できるリマップ/ファイル修正の数に制限がないということである。カードが完全に一杯になるまで、コントローラ２０はホストおよびユーザがリマップするのを許可する。この好ましい態様では、図１２に示すように、大抵のホストが上から下に向けてメモリを割り付けるので、コントローラ２０は下から上にメモリを割り付ける。この割付けスキームは、割付けが衝突する（コリジョン）チャンスを非常に小さくして、コントローラ２０とホストの５が別々にメモリを割り付けるのを可能にする。又これにより、この二つの割付けゾーンが衝突する場合は常に、カード１０が一杯であるとコントローラ２０が認めることができる。カードが一杯である時に、コントローラ２０は、その永久および仮の書き込み保護レジスタをセットすることに決め、カード１０にはこれ以上書込むことは出来ないとホスト５に合図してもよい。キャッシュに入れられていないシステムは、どれだけのメモリが残っているかが判る一方、キャッシュに入れられたシステムは、スタートアップ時ＦＡＴテーブルを読み、そのセッション以前にどれだけのリマップ・スペースが使用されたかを知る。
【００４１】
またしても、留意すべきことは、静的および動的リマッピングは相互に排他的でないことである。事実ユーザを支援するために、単一の製品に両方を組み入れるように選択してもよい。例えば、カードが一杯でも、ユーザはファイルを削除するか、あるいは、修正したいかもしれないが、追加のファイルは加えることができない。規定したメモリの量があらかじめ割り付けられ、正常なオペレーション下で使用されない場合には、付加的なデータ修正を許すことができる。例えば、カード１０は、ホストとコントローラの割付け衝突（コリジョン）によってカード１０が一杯になっているように見えるまで、コントローラ２０が使用しない５００ＫＢの静的リマップを予備に取って置くことができる。この時に、コントローラ２０は、希望のオペレーションが完了するまで、ホストの追加のデータを静的割付けゾーンに書込むのを認めることができる。その後、スマートフィルタは、削除とかリネームのようないくつかのユーザ・オペレーションが静的エリアで起きるのを許可するのに使用できるが、一方カード１０が大抵の使用には本質的に一杯であるので、他のオペレーションはエラーの結果になることになる。
【００４２】
またしても別の例では、ＢＣＣ技術のソフトウェアで更新されたホストはこの静的割付けエリアにアクセスできる。本発明の譲受人に譲渡され、ここに参照によって組込まれる米国特許番号６，４２４，５８１に記述のように、パソコン（ＰＣ）あるいは他の電子装置は、すべてのカード・メモリの明示的なアクセスを許す信号をカードへ送るアプリケーションで可能に（イネーブル）できる。この時点で、該アプリケーションは、どんなスマートフィルタ、リマップなどもオーバーライド（無視）することになり、リマップ・チェインを最適化したり、あるいは静的エリアへ、可能になっていないシステムでは出来なかった追加のオペレーションを許すことさえして、パフォーマンスを改善するのに使用したりすることができる。したがって、静的および動的リマップ・アルゴリズムを組み合わせれば、可能にされたシステムと可能にならなかったシステム両者を最適なユーザ経験として提供できる。
【００４３】
さらに、上記の単純なポインタ追跡スキームを置き換える他のインプリメンテーションが可能である。幾つかを以下に列挙する:
Ｒｅａｄ３コマンド:  ＲＥＡＤ３として知られるより速い読み取りコマンドが使えるが、これは、コントローラ２０がサイドバンドデータを読み取ることだけを出来るようにする。これは、最も最近のデータを見つける前にデータの多くの全ページを読み取るオーバーヘッドを減らすでしょう。
ポインタのテーブル:  最も最近の書き込みを見つけるために各ページを読む取るパフォーマンス・ヒット（ｐｅｒｆｏｒｍａｎｃｅ  ｈｉｔ）を減らすのに、各ページがリマップをすべてリストしたテーブルを持つようなポインタのテーブルが使用できる。ホスト５は概テーブルを読み取り、白紙(バージン)エントリー以前の最後のポインタを使用して、最も最近の更新版を決める。テーブルのアドレス自身は、ページのサイドバンドに保存することになっている。これは、先に参照した特許出願に記述されたハードウェア・リマッピングに使用されたテーブルに似ている。
システム・キャッシュ:  コントローラ２０は、サイドバンドに保存されたリマップ・テーブルあるいはポインタからのデータを保存するためにＳＲＡＭか同様のキャッシュを使用することができる。この付加的なＳＲＡＭがエリアを要し、したがって、コントローラ２０をよりコスト高にする一方、このアーキテクチャーはリマップが非常に速く起こり、パフォーマンス・オーバーヘッドを最小限にすることが出来るでしょう。
リマップ・アルゴリズムの組み合わせ:  コントローラ２０は、単純なポインタ追跡か、あるいは、テーブル・スキームが使用中であるかを示すリマップ利用フラグを作成することができる。したがって、あるページが何度もリマップされたことをコントローラ２０が知れば、コントローラは、将来のリマップの影響を減らすためのテーブルを作成するように選ぶことができる。しかし、ページがただ２、３回リマップされる簡単な場合には、ポインタ・スキームで十分でしょう。コントローラ２０は、このフラグを動的にセットすることができるが、あるいは、静的に、リマップ位置に基づいてもよい。例えば、ＦＡＴテーブルは何度もリマップされるだろうから、テーブルまたはＳＲＡＭMのスキームを常に使用することは意味をなすかもしれないが、データは頻繁にリマップされないので、ポインタ追跡スキームをここで使用することが好ましいかもしれない。このインプリメンテーションは、猶最適に近いシステム・パフォーマンスを提供する一方、ＳＲＡＭのコストを減らせるかもしれない。
【００４４】
（スマートＥＣＣロジック４８）
フィールドで起きるかもしれない信頼度エラーに対して保護するために、ＥＣＣを使用するのが好ましい。現在の好ましい態様では、ＢＣＣ２０が、上記のリマップ・ポインタもＥＣＣデータも保存するためにサイドバンドを使用する。ＥＣＣはサイドバンド利用可能性の点で８バイト、１６バイトか、あるいは任意の適切なサイズであってよい。現在の好ましい態様では、１２８Ｂ  ＥＣＣアルゴリズムが使用され、ここでは「スマートな大きいブロックＥＣＣ」(”ｓｍａｒｔ  ｌａｒｇｅ  ｂｌｏｃｋ  ＥＣＣ”)と呼ぶ。大きいブロックＥＣＣ  (「ＬＢ  ＥＣＣ」)はＥＣＣワードにつき２個のクローズ（ｃｌｏｓｅｓ）を使用するが、これは、補遺Ｉで検討する。ＢＣＣ  ２０がリマップおよびＥＣＣ情報の両用にサイドバンドを利用するに当たり、サイドバンドは、正常な大きいブロックＥＣＣスキームに基づいて、ワード当たり２箇のクローズを保存するだけの十分なスペースを持たないかもしれない。従って、この大きいブロックＥＣＣスキームは、ワードの最終の２バイトが書込まれてしまうと、各ワードを１回クロ−ズするだけで「スマート」になる。ＦＡＴテーブル中の各エントリーがサイズで２バイトであるので、２バイトの値が選ばれる。(ＬＢ  ＥＣＣと組み合わせて動的リマッピングを実行する場合、コントローラ２０は、フィールドでの製品の最高の信頼度を保証するために、ＥＣＣのクローズ・オペレーションを考慮するのが好ましい。言いかえれば、割付けは、好ましくは、ＦＡＴテーブル中のＥＣＣワードをクローズしてはならず、続いて後日、同じワードを更新してはならない。)  また、データ・エリアに依存するクローズ・オペレーションを持つこともできる。例えば、ＦＡＴテーブルを更新する場合、上記のように２バイトのセグメントに基づいて更新するのが意味があるかもしれないが、データ・エリアを更新する場合には、これは意味をなさないかもしれない。データ・エリアを更新する場合、大抵のホストは、完全にデータをすべて書込んだ後にだけ、ファイル・エントリーの最終の６バイトを更新するので、クローズオペレーションは、ワードの最後の６バイトに基づいて実行することができる。最後に、ＢＣＣ２０は、以前にクローズしたＥＣＣワードが更新中であることを検知する場合、リマップ・オペレーションを実行することを決めてもよい。これは、フィールドでの最高の信頼度を維持するために、ＥＣＣと組み合わせてリマップ・オペレーションを利用することになる。
【００４５】
本発明の譲受人に譲渡されており、参照によってここに組込まれる、米国特許番号６，７３８，８８３は、ＯＴＰまたはＦＴＰ製品のデータ信頼度を改善する方法としてＥＣＣの使用を教示している。本特許で検討したように、ＥＣＣワードはたった一度だけ書込むことができる。ＥＣＣワードの新しいデータに上書きすると、ＥＣＣデータ値は間違いとされ、それにより、製品に必要な信頼度の積み重ねがなくなることになる。ＯＴＰかＦＴＰメモリで動作可能になったシステムでは、これはライン、つまりメモリになす最小の書込みサイズの概念を作成することで容易に取り扱うことができるが、これは、上記参照の‘８８３（６，７３８，８８３）特許の中で検討されている。しかしながら、設計の複雑さを持ち、イネーブル（可能化）されていないシステム(つまり、オクトバイト・アラインメント概念でイネーブルされていないホスト)でＢＣＣ製品が使用される状況に対して補償することが好ましい。
【００４６】
ＢＣＣコントローラ２０は多くの方法でＥＣＣ保全を維持することができる。一つの簡単な方法はＥＣＣワードが無効にされた場合は常に、リマップ・オペレーションを起動することでしょう。ここでは、コントローラ２０は、スマートフィルタあるいは他の論理スキームでＥＣＣワードが上書き中かどうか検知するでしょう。ＥＣＣワードを無効にする場合には、リマップ・オペレーションがデータを新しいＥＣＣデータで書き直し、したがって非常に信頼できる製品を保存することになる。
【００４７】
メモリの１００％ＥＣＣカバレージ（ｃｏｖｅｒａｇｅ）を維持するためにリマッピングを使用するできるが、これは多くの追加のリマップという結果をもたらし、よって、ユーザ用のオペレーションの数を制限するかもしれない。この場合、コントローラ２０がＥＣＣの取り扱いを改善するように設計できる。好ましい態様では、データの特定の部分が書込まれるまで、ＥＣＣデータが書込まれず、ＥＣＣワードは終了しないことになる。例えば、ＥＣＣワードが３２バイトであると仮定する。前記ファイルを書込む場合には、ホスト５は２６バイトのファイル・リスティング・データを書込み、後に、ファイル・データの完成後、最後の６バイトを書込む。この場合、コントローラのＥＣＣスマートフィルタ・ロジック４８は、ファイル・リスティングが書込中であったと断定することができ、最終の６バイトが書込まれるまで、ＥＣＣワードを終了させることができない。これは、リマップオーバーヘッドを最小限にする傍ら、ＥＣＣの保全を維持するでしょう。このスキームは、様々なＥＣＣワード・サイズ、ファイル・システム構造、およびデータ構造について修正することができる。
【００４８】
要約すれば、現在好ましい態様のスマートＥＣＣロジック４８は、サイドバンドに保存されたシンドロームビットを備えた１２８ＢのＥＣＣワードを使用し、データの最終の２バイトを書込むことに基づいてワードをクローズし、ワード当たり一回クロ−ズを許すだけであり、ＦＡＴテーブル対データ・エリア(２Ｂ対６Ｂクロ−ズ)のために異なるクロ−ジング・スキームを使用し、ＥＣＣワードが無効にされるか、あるいは、壊れている場合、リマッピングを使用することができる。サイドバンドのスペースが多数のＥＣＣクロ−ズに十分でないので、この態様では、スマートＥＣＣロジック４８を使用する。
【００４９】
（結論）
これらの好ましい態様と共に使用できる代案が多数ある。例えば、メモリ装置のコントローラにインプリメントする代わりに、スマートフィルタ・ロジック、リマッピング・ロジックおよびスマートＥＣＣのどれか、あるいはすべてを、全体的にあるいは部分的に、メモリ装置あるいはホスト装置中の別のコントローラのような別のコンポーネント中で実行することができる。さらに、用語「回路類」は、それに記述された機能をインプリメントすることができるすべてのコンポーネントを指す。回路類の例は、上記の例も、コンピューター実行可能な命令を実行するプロセッサー、アプリケイション専用集積回路、フィールドでプログラム可能なゲート・アレイ、アナログ回路、あるいは現在既知か将来開発されるその他すべてのハードウェア装置(ソフトウェアを実行するかまたは実行せず)も、さらにこれらの任意の組み合わせも含む。
【００５０】
上述の詳細な記述は、発明がとることができる選択された形式の実例として、発明の定義としではなく、理解されることを意図している。この発明の範囲を定義するように意図されたのは、等価物をすべて含めて次の請求項だけである。最後に、ここに記述された、如何なる好ましい態様のうちのどの態様例も単独であるいは相互の組み合わせて使用できることに注目すべきである。
【００５１】
（補遺Ｉ）
大きなブロックＥＣＣのインプリメンテーション
概観
大きなブロックＥＣＣは下記を含むことが好ましい:
・  １２８ＢのＥＣＣワードサイズ。
・  単一のエラー修正、しかしダブルのエラー検知なし。
・  高々２回のＥＣＣパリティー更新を許可するスマートＥＣＣ更新。
【００５２】
ＳＥＣ  ＥＣＣインプリメンテーション
ＥＣＣインプリメンテーションは、ＥＣＣパリティ・ビットがバイト当たり計算されることを可能にするインプリメンテーションに類似。サイドバンド中の記憶装置（ストレージ）が制限されているので、パリティ・ビットを縮小するために、ＤＥＤなしでＳＥＣのみを行うため次の修正を行った。図１３は、どのようにパリティ・ビットが８ビットのデータの例に作動するかを示す:
・  Ｐ０はＤ１、Ｄ３、Ｄ５、Ｄ７をカバーする。
・  Ｐ１はＤ２、Ｄ３、Ｄ６、Ｄ７をカバーする。
・  Ｐ２はＤ４、Ｄ５、Ｄ６、Ｄ７をカバーする。
・  Ｐ３はＤ０、Ｄ１、Ｄ２、Ｄ３をカバーする。
・  Ｐ４はデータ・ビットをすべてカバーする。
【００５３】
次のテーブルは、任意の1ビットエラーに起因するシンドロームを示す。シンドローム［４：０］は、予期および実際のパリティ・ビットをＸＯＲすることにより作成される。このアルゴリズムでは、２ＮビットをカバーするのにＮ＋２のパリティ・ビットを要求するのが好ましい。１２８バイト(２１０ビット)のＥＣＣワードについては、１２のパリティ・ビットを要求するのが好ましい。
【００５４】
【表１】
2008511072.tif 000001
【００５５】
１２ビット・パリティー方程式
下記は、１０２４ビット（すべての１のＥＣＣワードはすべての１のパリティ・ビットに帰着すべきである）のＥＣＣワードに好ましくは要求される１２のパリティー方程式である:
・  P0=!XOR(D1,D3,D5，．．．，D1023)
・  P1=!XOR(D2-D3,D6-D7，．．．，D1022-D1023)
・  P2=!XOR(D4-D7,D12-D15，．．．，D1020-D1023)
・  P3=!XOR(D8-D15,D24-31，．．．，D1016-D1023)
・  P4=!XOR(D16-D31,D48-D63，．．．，D1008-D1023)
・  P5=!XOR(D32-D63,D96-127，．．．，D992-D1023)
・  P6=!XOR(D64-D127,D192-D255，．．．，D960-D1023)
・  P7=!XOR(D128-D255,D384-D511，．．．，D896-D1023)
・  P8=!XOR(D256-D511,D768-D1023)
・  P9=!XOR(D512-D1023)
・  P10=!XOR(D0-D511)
・  P11=!XOR(D0-D1023)
【００５６】
スマートＥＣＣの更新
スマートＥＣＣの更新が、パリティ・ビットがＥＣＣワードにつき二度書込まれることを可能にするのが好ましい。この特性は、部分的なページ書き込みをＥＣＣによってカバーするのを可能にする。パリティ・ビットの第１１セットは、新しいデータの第１書き込み中にＥＣＣワードに書込まれる。新しいデータを備えたどんな後の書き込みも、パリティ・ビットの第１セットを無効にするのが好ましい。ページが「クローズ」中の時、パリティ・ビットの第２セットが書込まれる。ページは、ＥＣＣワードの最後のオクトバイト中の任意のビットがプログラムされるとき、ページが「クローズ」されたと見なされる。このモデルは、部分的なページ書き込みを要するＦＡＴ構造とうまく作動する。
【００５７】
新しいパリティ・ビットが既存の有効なパリティ・ビットと一致しない場合、スマートＥＣＣフラグおよびパリティ・ビットが更新されるだけであるのが好ましい。同じデータ(一致するパリティ・ビットに帰着する)の書換えは、スマートＥＣＣフラグの状態を変更しない。
【００５８】
【表２】
2008511072.tif 000002
上記に示すのは、未だプログラムが済んでいないデータのワード用ＥＣＣのパリティ（ｐａｒｉｔｙ）、未使用（ｕｎｕｓｅｄ）、および有効（ｖａｌｉｄ）ビットである。有効（ｖａｌｉｄ）および未使用（ｕｎｕｓｅｄ）ビットは、冗長性用に各々２回複製される。この状態でＰａｒｉｔｙ０が有効であるので、ＥＣＣは読み取りによって可能になる。Ｖａｌｉｄ０が１である場合、Ｕｎｕｓｅｄ０の値が何であるかは構わないことに注意すること。(これはＰａｒｉｔｙ１ビットでは真実ではない。)
【００５９】
上記のパリティ、未使用、および有効ビットの数は、３２ビット、つまり４Ｂである。１ページ当たり４箇の１２８ＢのＥＣＣワードで、１ページ当たり１６ＢのＥＣＣパリティ、未使用、および有効ビットがある。
【００６０】
【表３】
2008511072.tif 000003
上記に示すのは、一度プログラムされたデータのワード用ＥＣＣのパリティ、未使用、および有効ビットである。ｎｕｓｅｄ０が以前１であったので、書込み中のデータを反映するようにＰａｒｉｔｙ０をプログラムできることを分かっていた。Ｐａｒｉｔｙ０が書込まれたことを示すように、Ｕｎｕｓｅｄ０も０にプログラムされた。この状態で、Ｐａｒｉｔｙ０がまだ有効であるので、ＥＣＣは、読み取りの間イネーブル（可能に）される。
【００６１】
【表４】
2008511072.tif 000004
上記に示すのは、そのｐａｒｉｔｙ０ビットが、Ｖａｌｉｄ０を０にプログラムしたことで無効にされたデータのワード用ＥＣＣのパリティ、未使用、および有効ビットである。データのワードへの第１の書き込み後、既にＵｓｅｄ０が０にプログラムされていた場合、後の書き込みはＰａｒｉｔｙ０ビットを無効にする。この状態で、Ｐａｒｉｔｙ０が無効にされていて、Ｐａｒｉｔｙ１がまだ更新されていなかったので、ＥＣＣは読み取りによって不能（ディセーブル）となる。
【００６２】
【表５】
2008511072.tif 000005
上記に示すのは、そのｐａｒｉｔｙ１ビットが書込まれたデータのワード用ＥＣＣのパリティ、未使用、および有効ビットである。これが起きるのは、ワードの最後のオクトバイト中の任意のビットがプログラムされ、Ｕｎｕｓｅｄ１が以前に１にあった場合である。Ｕｎｕｓｅｄ１も、Ｐａｒｉｔｙ１が書込まれたことを示すよう、０にプログラムされる。大抵の場合、最後のオクトバイトがプログラム中の場合、これがデータのワードへの最後の部分的ページ書き込みである。この状態で、Ｐａｒｉｔｙ１が有効で書込まれているので、ＥＣＣは読み取りによって可能イネーブル）になる。（Ｐａｒｉｔｙ０ビットと異なり、Ｕｎｕｓｅｄ１フラグはパリティ・ビットが有効であるために０でなければならない。)     
【００６３】
【表６】
2008511072.tif 000006
上記に示すのは、そのＰａｒｉｔｙ１ビットが、Ｖａｌｉｄ１を０にプログラムしたことで無効にされたデータのワード用ＥＣＣのパリティ、未使用、および有効ビットである。Ｐａｒｉｔｙ１ビットが書込まれた後、データのこのワードに後の書き込みがある場合、Ｐａｒｉｔｙ１ビットを無効にしなければならない。この状態で、ｐａｒｉｔｙ０もＰａｒｉｔｙ１も有効ではないので、ＥＣＣは読み取りによって不能にされる。
【００６４】
冗長な未使用および有効なフラグのデコード
Ｕｎｕｓｅｄ［１：０］フラグおよびＶａｌｉｄ［１：０］フラグは、パリティ・ビット用に３つの異なる状態をエンコードするのに使用される。次のテーブルはこれらの状態を列記する。
【表７】
2008511072.tif 000007
【００６５】
しかしながら、冗長ビットのうちの１つにビット・エラーがある場合、フラグ当たり２個の冗長ビットがあるだけなので、冗長ビットのうちのどの１箇が誤りかを決めることは困難である。このために、パリティー状態を決定するためにＵｎｕｓｅｄ［１：０］ビットおよびＶａｌｉｄ［１：０］ビットの両方を常に使用する。次のテーブルは、これらのビット中の０の総数を数えることにより、デコードが行われることを示す。
【００６６】
【表８】
2008511072.tif 000008
フラグ当たり４個の冗長ビットの代わりに２個使用することは、冗長性のロバスト性を減少させてメモリの中で使い果たされるビットの数を減少させる。
【００６７】
特別の場合−ＰＡＧＥ０
TF_SECC_PAGE0_TB='1'の場合、メモリのＰＡＧＥ０の取り扱いは、わずかに異なる。通常は、ワードの最後のオクトバイト中の任意のビットがプログラムされる場合に限り、Ｐａｒｉｔｙ１ビットを書込むことができる。この特別の場合では、この制限が撤廃される。したがって、一旦ｐａｒｉｔｙ０ビットが使用されれば、次の書き込みは常に使用されているＰａｒｉｔｙ１ビットに帰着する。
【００６８】
トリム・ヒューズ・ビット
ＥＣＣロジックに影響するトリム・ヒューズ・ビットが３個ある:
【００６９】
TF_ECC_DISABLE_TB
TF_ECC_DISABLE_TB='1’の場合、ＥＣＣロジックは無効になり、ホストは各ページのサイドバンド中のバイト５１２−５２７へ完全な読み取りと書き込みアクセスを持つ。
【００７０】
TF_ECC_DISABLE_TB='0’の場合ＥＣＣロジックは可能になり、また、各ページのサイドバンド中のバイト５１２−５２７は、ＬＢＥＣＣおよびスマートＥＣＣ更新を実行するのに使われる様々なＥＣＣビットを保存するために使用される。サイドバンドエリアへなされたどんなホストの書き込みも廃棄される。サイドバンドエリアからのどんなホストの読み取りも不定データを返す。
【００７１】
TF_SMARTECC_DISABLE_TB
TF_SMARTECC_DISABLE_TB='1’の場合、スマートＥＣＣ更新ロジックは無効（ディセーブル）にする。TF_SMARTECC_DISABLE_TB='0’の場合、スマートＥＣＣ更新ロジックが可能にする。(TF_ECC_DISABLE_TBも'0’にセットしければならない。)
【００７２】
TF_SECC_PAGE0_TB
TF_SECC_PAGE0_TB='0’の場合、すべてのページは同じスマートＥＣロジックを使用する。TF_SECC_PAGE0_TB='1’の場合、ｐａｇｅ０の取り扱いは、スマートＥＣ更新ロジックに関して、すべての他のページとは異なる。
【００７３】
メモリマップ
すべてのＥＣＣのパリティ、 未使用、および有効ビットは、各ページのサイドバンド中のバイト５１２−５２７に存在する。
以下に４つのＥＣＣワードすべてのビットがどのように配列されるかを示す。
【表９】
2008511072.tif 000009
【００７４】
以下にビットが１個のＥＣＣワード(例はワード０)に対してどのように配列されるかを示す。
【表１０】
2008511072.tif 000010
【００７５】
テスト
ＥＣＣロジックのテストはＤＡＭモードを使用して行うことができる。ＤＡＭモードが書き込みか読み取りのどちらかのトランザクション用に可能になっている場合は、データはページ・レジスタとメモリ配列間で転送されない。ＥＣＣロジックをテストするのには、TF_ECC_DISABLE_TBビットをデアサート（ｄｅａｓｓｅｒｔ）しなければならない。次にこのテストをより詳細に記述する。
【００７６】
ＥＣＣ修正
１．  ＤＡＭモードを可能にし、ＥＣＣを可能にする。
２．  書き込みデータの５１２バイトおよびＥＣＣデータの１６バイトでＤＡＴＡＩＮコマンドを出す。
３．  ＲＥＡＤコマンドを出す。(データをリードバック出来る前に、ＥＣＣのスクラッビングがなされるので、チップは使用中になる。)
４．  データの５１２バイトが予想通りであることを確認する。(シングル・ビット・エラーがＰＲに書き込まれた場合は、エラーが修正されたことを確認する。)
【００７７】
ＥＣＣ生成
１．  ＤＡＭモードを可能にし、ＥＣＣを可能にする
２．  書き込みデータの５１２バイトでＤＡＴＡＩＮコマンドを出す。
３．  ＰＲＯＧコマンドを出す。(これによってＥＣＣの生成された１６バイトが、ＰＲに書込まれる。)
4.  ＲＥＡＤコマンドを出す。(書き込みデータの以前の５１２バイトは、ＥＣＣデータの生成された１６バイトと一緒にリードバックされる。)
５．  １６ＥＣＣバイトが正確に生成されていることを確認する。
【００７８】
上記のように、ＥＣＣ使用にたいする取り組み方の一つは、８Ｂ(オクトバイト)ＥＣＣワーズ使用するが、その際ＥＣＣシンドロームは１Ｂの幅がある。これは、１度のインプリメンテーションで１２．５％のオーバーヘッドを作り、総ダイ・サイズの約９〜１０％を占める。この取り組みでは、一つの、シングル・ビット修正／ダブル・ビット−検知アルゴリズムを使用するするが、これは７２ビットのデータをパラレルで処理する。これに反して、大きなブロックＥＣＣは、シンドローム・記憶装置（ストレージ）のオーバーヘッドを減らすのに十分大きいＥＣＣワードを使用する。上記のように、さらにオーバーヘッドを減らすのに、現在は、シングルビット検知のみのアルゴリズムを使用することが好ましい。このアルゴリズムはデータを逐次処理する。 
【００７９】
ＥＣＣシンドローム記憶装置（ストレージ）には様々なオプションがある。一つのオプション(オプション1)では、ＥＣＣシンドロームビットを拡張ページ・エリアに保存する。現在好ましい１つのアーキテクチャーは、拡張ページに１８Ｂ（１６Ｂのデータと２ＢのＥＣＣシンドローム・ビット）割り付ける。このオプションでは、トリム・ヒューズ・ビットまたはピンを使用して、次のことができる：（１）内部ＥＣＣ生成を拡張ページ・スペースに保存されたシンドロームと使い、ユーザが拡張ページ・スペースにアクセスすることができない；および（２）内部ＥＣＣ生成をバイパスし、ユーザが拡張ページ・スペースにアクセスし、かつ自己のＥＣＣアルゴリズムを使用することを可能にする。別のオプション（オプション２)では、ＥＣＣシンドロームビットを専用スペースに保存する。ブロック・サイズによっては、これは、ＣＲスペースのうちの幾分かを使用することもある。
【００８０】
部分的ページ書き込みに書込める最低量はＥＣＣワードサイズと等しく、現在の好ましい態様中では目下８Ｂにセットされている。いくつかのオプションがある。オプション１では、メモリ装置が部分的ページ書き込みを認識し、そのページのＥＣＣを不能にする。このオプションには下位の互換性問題はないが、部分書き込み後のデータ保全が危険にさらされる。オプション２は、Ｎ回用書換えＥＣＣ機能を加えたオプション１と同じである。メモリ装置は部分的書き込みを認識し、以前のＥＣＣシンドロームを無効にし、新しい位置に新しいシンドロームを書込む程スマートである。１２８Ｂおよびそれ以上という大きなブロック・サイズを持ち、これで、ブロック当たり２〜３回の書換え用に十分な記憶機能を提供できる。より複雑になるが、これは従来の解決法より改善されている。オプション３はスマートＥＣＣシンドロームの更新を提供する。ＥＣＣワードへなした第１の書き込み時に、シンドロームが書込まれる。ＥＣＣワードへなした第２の書き込みはシンドロームを無効にし、データはそのＥＣＣ保護を解くであろう。次いでＥＣＣワードに付加後、それが完全に書込まれると、新しい(かつ究極の)シンドロームが作成され、データは以後永久に保護される。唯一の無保護なエリアは、ＥＣＣワードで完全に満たされていない少数の動的エリアであるので、これでＤＰＭのリスクは劇的に縮まる。オプション４は冗長列の修復能力を加えたオプション２と同じである。オプション２でＮ回書換え後、Ｎ＋１回目の書換えで列の修復が始動され、書換えカウントがリセットする。
【００８１】
別の代案では、読込み後データ・スクラッビングのテクニックが提供される。このテクニックでは、読取りの間、前方ストレスが妨害の主な原因である場合、ＥＣＣ修正ロジックの状態をチェックし、状態が悪くなると直ちに、悪いビットを識別できる。その後、既存のＣＲスキームを使用して修復することができる。もし２つのビットが同時に悪くなるのでなければ、このスキームは読み取り妨害を追及するのに非常に有効な方法になる。
【図面の簡単な説明】
【００８２】
【図１】好ましい態様のホスト装置およびメモリ装置のブロックダイヤグラムである。
【図２】好ましい態様のコントローラのブロックダイヤグラムである。
【図３】好ましい態様のメモリマップである。
【図４】好ましい態様のスマート・フィルタ・ロジックのオペレーションを図示するフローチャートである。
【図５】好ましい態様の32バイトファイル・リスティング構造の図表である。
【図６】一態様のFATテーブルの図表である。
【図７】図6のFATテーブルに関連するファイル・リスティングの例である。
【図８】好ましい態様のスマート・フィルタ・オペレーションを例証する。
【図９】好ましい態様のスマート・フィルタ・オペレーションを例証する。
【図１０】サイドバンドエリアがリマッピング情報を保存する場合にデータを読み取るための一態様の方法のフローチャートである。
【図１１】好ましい態様の動的リマッピング割付け方法のフローチャートである。
【図１２】好ましい態様のリマッピング例の中で使用されるメモリマップである。
【図１３】好ましい態様のパリティ・ビットのレイアウトの例証である。