(57)【要約】【解決手段】ここに記述された態様は一回又は数回プログラム可能なメモリを、ファームウェアのアップグレードを要しないで、既存の家庭用電子機器(フラッシュ、つまり消去可能、不揮発性メモリで作動するような機器)との作動を可能にするために使用することができ、そのため、ユーザに対する影響を最小限に止める一方、下位互換性を提供する。それによって、これらの態様は既存のフラッシュカード・スロットを備えた家庭用電子機器と、一回又は数回プログラム可能なメモリとの橋渡しをする実行可能な方法である。これらの態様は、又、一回又は数回プログラム可能なメモリ用にカスタマイズしたファイル・システムを組み込むためにファームウェアを更新しなくても、将来の家庭用電子機器を設計できるようにする。【特許請求の範囲】
【請求項１】
メモリ装置において、
メモリ配列と、
該メモリ配列と接続されているコントローラとを備え、
該コントローラは、
(a)メモリ配列の第一アドレスから、データを書込むことの要求を、該メモリ配列と接続されているホスト装置から受け取り、
(b)該第1アドレスに書込まれるよう要求されたデータを該第1アドレスに格納されているデータと比較し、
(c)(b)における該比較に基づいて、
(c1)該第1アドレスに該データを書き込む、
(c2)該第1アドレスに該データを書込まずに、該ホスト装置に該データが該第1アドレスに書込まれたと通知する、又は
(c3)第1のアドレスの代わりに第２アドレスにデータを書き込む
のうちの一つを実行する
ことを特徴とするメモリ装置。
【請求項２】
該コントローラが、一組のプログラムされていないメモリ・セルを含む該第1アドレスに応じて、(c1)を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項３】
該コントローラが、該第1アドレスに書込むように要求されたデータが該第1アドレスに格納されているデータに付加する場合には、(c1)を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項４】
該第1アドレスに含まれている該データが、ファイル・システム構造を含むことを特徴とする請求項1に記載のメモリ装置。
【請求項５】
該コントローラが、以前に割り付けられたアドレスが空きであることを示すデータをファイル割付けテーブルに書込むよう試みている該ホストに応じて、(c2)を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項６】
該コントローラが、ファイル・リスティングに前もって定めたフィールドにのみデータを書込むよう試みている該ホストに応じて、
(c2) を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項７】
該コントローラが、最後にアクセスされた日付フィールドにのみデータを書込むよう試みている該ホストに応じて、(c2)を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項８】
該コントローラが、ディレクトリ・リスティングの前もって定めたフィールドにのみデータを書込むよう試みている該ホストに応じて、(c2)を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項９】
該コントローラが、該第1アドレスに書込まれるよう要求された該データが第1アドレスに格納されている該データとは異なる場合に、(c3)を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項１０】
該コントローラが、該第1アドレスに書込まれるよう要求された該データが該第1アドレスに格納されている該データとは異なり、その差分がファイル・リスティングに前もって定めたフィールドだけに存在しない場合には、(c3)を実行するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項１１】
該コントローラが、該第1アドレスに書込まれるよう要求された該データが該第1アドレスに格納されている該データとは異なり、その差分がディレクトリ・リスティングに前もって定めたフィールドだけに存在しない場合には、(c3)を実行するように作動することを特徴とする請求項1に記載のメモリ装置
【請求項１２】
該コントローラが、該メモリ装置をフォーマットしようする試みに応じて、エラーを発生することを特徴とする請求項1に記載のメモリ装置。
【請求項１３】
該コントローラが、ファイル割付けテーブルのアドレスに先行するアドレスにデータを書込もうとする試みに応じて、エラーを発生するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項１４】
該コントローラが、該メモリ配列に前もって定めたアドレスにデータを書込もうとする試みに応じて、更にエラーを発生するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項１５】
該コントローラが、該メモリ配列が一杯であることに応じて、エラーを発生するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項１６】
該コントローラが、(c3)を実行する時に該第2アドレスがもはや空きでないことを示すために、更にメモリ配列中のファイル割付けテーブルを更新するように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項１７】
該メモリ配列が、部分的に書込みできる論理ユニットへ組織化され、それによって、該ロジック・ユニットが一杯になるまでは、複数の書込みオペレーションが個々の論理ユニットに実行することができ、最後の書き込みオペレーションが論理ユニットになされる場合に、該コントローラが、論理ユニット用にECCデータを書込むように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項１８】
該コントローラが、
第１ページレジスタ、と
第２ページレジスタとを備え、
該第1アドレスに格納されている該データは、該第1ページレジスタに書込まれ、一方、該第1アドレスに書込まれるべき該データが該第２ページレジスタに書込まれる
ことを特徴とする請求項1に記載のメモリ装置。
【請求項１９】
該メモリ配列は、一回プログラム可能なメモリ配列を含むことを特徴とする請求項1に記載のメモリ装置。
【請求項２０】
該メモリ配列は数回プログラム可能なメモリ配列を含むことを特徴とする請求項1に記載のメモリ装置。
【請求項２１】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項1に記載のメモリ装置。
【請求項２２】
該メモリ装置が、該ホスト装置上の対応する電気的コネクターと対をなすように設定された電気的なコネクターを有し、また、該ホスト装置が多数回書込みファイル・システムを含むことを特徴とする請求項1に記載のメモリ装置。
【請求項２３】
メモリ装置において、
ファイル・システム構造を保存するメモリ配列と、
該メモリ配列と連通しているコントローラを備え、
該コントローラは、
(a)該メモリ配列と接続しているホスト装置から、以前に割り付けられたアドレスが空きであることを示すデータを該ファイル・システム構造に書込めという要求を受け取り、
(b)該ファイル・システム構造に該データを書込まずに、該ホスト装置に、該データが該ファイル・システム構造に既に書込まれていたと通知するように作動する
ことを特徴とするメモリ装置。
【請求項２４】
該ファイル・システム構造がファイル割付けテーブルを含むことを特徴とする請求項23に記載のメモリ装置。
【請求項２５】
該データが複数の0を含むことを特徴とする請求項23に記載のメモリ装置。
【請求項２６】
該メモリ配列が１回プログラム可能なメモリ配列を含むことを特徴とする請求項23に記載のメモリ装置。 
【請求項２７】
該メモリ配列が数回プログラム可能なメモリ配列を含むことを特徴とする請求項23に記載のメモリ装置。
【請求項２８】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項23に記載のメモリ装置。
【請求項２９】
メモリ装置において、
ファイル・システム構造を保存するメモリ配列と、
該メモリ配列と連通しているコントローラを備え、
該コントローラは、該ファイル・システム構造のアドレスに先行するアドレスにデータを書込もうとする試みに応じて、エラーを発生するように作動する
ことを特徴とするメモリ装置。
【請求項３０】
該ファイル・システム構造がファイル割付けテーブルを含むことを特徴とする請求項29に記載のメモリ装置。
【請求項３１】
該メモリ装置をフォーマットするコマンドに応じて、該ファイル・システム構造の該アドレスに先行する該アドレスにデータを書込もうとする試みがなされることを特徴とする請求項29に記載のメモリ装置。
【請求項３２】
該メモリ配列が一回プログラム可能なメモリ配列を含むことを特徴とする請求項29に記載のメモリ装置。
【請求項３３】
該メモリ配列が数回プログラム可能なメモリ配列を含むことを特徴とする請求項29に記載のメモリ装置。
【請求項３４】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項29に記載のメモリ装置。
【請求項３５】
メモリ装置において、
メモリ配列と、
該メモリ配列と連通しているコントローラとを含み、
該コントローラは、
(a)メモリ装置と連通しているホスト装置からリクエストを受け取り、メモリ配列の第一アドレスにデータを書込み、
(b)第1アドレスではなくて、第２アドレスにデータを書込み、
(c)第２アドレスが最早空きでないことを示すために、メモリ配列のファイル・システム構造の更新を行う
ことを特徴とするメモリ装置。
【請求項３６】
該ファイル・システム構造がファイル割付けテーブルを含むことを特徴とする請求項35に記載のメモリ装置。
【請求項３７】
該メモリ配列は、第１サイズを持つエリアへ論理上組織化され、該データが該第1サイズ未満の第２サイズから成り、側波帯エリアは、該第1サイズと該第2サイズとの差として定義され、該コントローラがさらに該第1アドレスの側波帯エリアに該第2アドレスを書込むように作動することを特徴とする請求項35に記載のメモリ装置。
【請求項３８】
該コントローラがさらに、該側波帯エリアだけを読み取るように作動することを特徴とする請求項3７に記載のメモリ装置。
【請求項３９】
該コントローラが、側波帯からのデータを保存するように作動するキャッシュを含むことを特徴とする請求項3７に記載のメモリ装置。
【請求項４０】
該メモリ配列は、第１サイズを持つエリアへ論理上組織化され、該データが該第1サイズ未満の第２サイズから成り、側波帯エリアは、第1サイズと第2サイズとの差によって定義され、該コントローラがさらに、該第1アドレスの側波帯エリアのリマップ・テーブルにアドレスを書込むように作動することを特徴とする請求項35に記載のメモリ装置。
【請求項４１】
該コントローラが、該リマップ・テーブルからのデータを保存するように作動するキャッシュを含むことを特徴とする請求項40に記載のメモリ装置。
【請求項４２】
該コントローラがさらに、物理から論理へのアドレス変換テーブル(physical-to-logical-address table)に該第2アドレスを書込むように作動することを特徴とする請求項35に記載のメモリ装置。
【請求項４３】
該コントローラがさらに、ポインター・テーブルに該第2アドレスを書込むように作動することを特徴とする請求項35に記載のメモリ装置。
【請求項４４】
該メモリ配列がリマッピング・オペレーション用に指定された、あらかじめ割り付けられたエリアを含み、該メモリ配列に空きアドレスがこれ以上ないことを該ファイル・システム構造が示す場合に、該コントローラが、該あらかじめ割り付けられたエリアへ書込むように作動することを特徴とする請求項35に記載のメモリ装置。
【請求項４５】
該あらかじめ割り付けられたエリアは、該ホスト装置でアクセス可能であることを特徴とする請求項44に記載のメモリ装置。
【請求項４６】
該コントローラが、2つの状態を含むフラグを保存し、第1状態はポインタ追跡スキームが使われていることを示し、第2状態はテーブル・スキームが使用されていることを示すことを特徴とする請求項35に記載のメモリ装置。
【請求項４７】
該メモリ配列が一回プログラム可能なメモリ配列を含むことを特徴とする請求項35に記載のメモリ装置。
【請求項４８】
該メモリ配列が数回プログラム可能なメモリ配列を含むことを特徴とする請求項35に記載のメモリ装置。
【請求項４９】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項35に記載のメモリ装置。
【請求項５０】
該メモリ装置が、該ホスト装置上の対応する電気的なコネクターと対をなすように設定された電気的なコネクターを有し、該ホスト装置が多数回書込みファイル・システムを含むことを特徴とする請求項35に記載のメモリ装置。
【請求項５１】
部分的に書込みできる複数の論理ユニットに組織化され、それによって、個々の論理ユニットへの複数の書込みを、該ロジック・ユニットが一杯になるまでは、実行することができるようにしたメモリ配列論理ユニットと、
メモリ配列と接続しているコントローラとを備え
該コントローラは、一つの論理ユニットに対しECCデータを、最後の書き込みオペレーションがその論理ユニットになされるまで、書込むようにされている
ことを特徴とするメモリ装置。
【請求項５２】
最後の書き込みオペレーションが該論理ユニットになされる場合だけに、該コントローラが、該論理ユニット用にECCデータを書込むように作動することを特徴とする請求項1に記載のメモリ装置。
【請求項５３】
最初の書き込みオペレーションが該論理ユニットになされる場合および最後の書き込みオペレーションが該論理ユニットになされる場合の両方に、該コントローラが、該論理ユニット用にECCデータを書込むように作動することを特徴とする請求項51に記載のメモリ装置。
【請求項５４】
最後の2バイトが論理ユニットに書込まれる場合に、該コントローラが、論理ユニット用にECCデータを書込むように作動することを特徴とする請求項51に記載のメモリ装置。
【請求項５５】
最後の6バイトが論理ユニットに書込まれる場合に、該コントローラが論理ユニット用にECCデータを書込むように作動することを特徴とする請求項51に記載のメモリ装置。
【請求項５６】
ECCワードが無効とされていることに応じて、該コントローラがさらにリマップ・オペレーションを実行するように作動することを特徴とする請求項51に記載のメモリ装置。
【請求項５７】
該メモリ配列が一回プログラム可能なメモリ配列を含むことを特徴とする請求項51に記載のメモリ装置。
【請求項５８】
該メモリ配列が数回プログラム可能なメモリ配列を含むことを特徴とする請求項51に記載のメモリ装置。
【請求項５９】
該メモリ配列が三次元のメモリ配列を含むことを特徴とする請求項51に記載のメモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連する出願に対する相互参照）
この出願は、2004年8月24日に申請の米国の仮出願番号60/604,353の特典を主張し、ここに参照することによって組み入れる。
【背景技術】
【０００２】
モジュール式で、ポータブルな不揮発性メモリ装置は、ディジタル・カメラ、ディジタルオーディオ・レコーダーおよびパソコンのようなホスト装置に容易に接続したり接続を切ったりできるようにすることが可能である。これらの装置の中で使用されるフラッシュカードのような従来のメモリは、書き換え可能で、メモリ・アドレスをシステムまたはユーザの目的のために消去し、書き換えることができる。一回プログラム可能(OTP)又は数回プログラム可能（ＦＴＰ）のどちらにしても、より廉価なメモリ技術が出来たので、アナログカメラの場合のフィルムと同様に、単に写真を撮り、プリントすると同時に、廉価なカードを「ネガ」として保存できるような、ホスト装置での新しい使用法モデルが使えるようになった。理想的には、標準的なフラッシュ・カメラでこの廉価なカードを使用することができることであるが、ポータブル装置が、システム構造に消去可能なことを要求するDOS
FAT12/16ファイル・システムを使用することが一般的なので、これらの技術は必然的に互換性がない。装置の中のファームウェアをOTPかFTPメモリ技術用にカスタマイズされたファイル・システムに更新すれば、この問題は解決できるが、これでは、全体の有効市場がソフトウェアをアップグレードした新しいカメラに制限されることになるか、さもなければ、ユーザにフィールドで既存のカメラのソフトウェアをアップグレードすることを要求することになる。そこで、エンドユーザが既存のカメラで、OTPまたはFTPのメモリーカードが比較的シームレスに使えるようにするハードウェア・コントローラ・ソリューション、つまり、下位互換性をもつコントローラ(BCC)を作り上げる必要がある。
この好ましい態様は、ここに添付した図面を参照して記述する。
【発明の開示】
【課題を解決するための手段】
【０００３】
（現在好ましいとされる態様の詳細な記述）
システム概観
ここに記述された態様は一回又は数回プログラム可能なメモリを、ファームウェアのアップグレードを要しないで、既存の家庭用電子機器(フラッシュ、つまり消去可能な、不揮発性メモリで作動するような機器)との作動を可能にするように使用することができ、そのため、ユーザに対する影響を最小限に止める一方、下位互換性を提供する。それによって、これらの態様は既存のフラッシュカード・スロットを備えた家庭用電子機器と、一回又は数回プログラム可能なメモリとの橋渡しをする実行可能な方法である。これらの態様は、又、一回又は数回プログラム可能なメモリ用にカスタマイズしたファイル・システムを組み込むためにファームウェアを更新しなくても、将来の家庭用電子機器を設計できるようにする。
【０００４】
さて、図面に注目すると、図1は好ましい態様のホスト装置5およびメモリ装置10のブロック・ダイヤグラムである。ホスト装置5およびメモリ装置10の両者は、電気的にホスト装置5をメモリ装置10と連結するために互いに対をなす、電気的なコネクターを含む。ここに使用されたように、用語「と連結される」は、直接に連結されているか、一つ以上の介在する部品を通して間接的に連結されているかを意味する。ホスト装置5は、ディジタル静止画または動画カメラ、携帯情報端末(personal
digital assistant)、携帯電話、ディジタルオーディオ・プレーヤーあるいはパソコン(USBリーダ/ライタ付きあるいはPCMCIAカード・アダプター付型)のようであるが、これらに制限されない家庭用電子機器の形式をとることができる。この態様では、ホスト装置5が、DOS-FATファイル・システムのような多数回書き込み（write-many,）ファイル・システム7を含む。
【０００５】
メモリ装置10は、メモリーカードまたはスティックのようなモジュールでコンパクトな、携帯型のユニットの形式をとることができる。メモリ装置10はコントローラ20と一回書き込みメモリ・配列（アレイ）30を含む。図2はコントローラ20のブロック図である。図2に示すように、コントローラ20は、それぞれ、フロントサイドバス・プロトコル・ロジック36およびバックサイドバス・プロトコル・ロジック38と連結し、フロントサイドバス32およびバックサイドバス34を含む。フロントサイドバス・プロトコル・ロジック36は、マルチメディア（MultiMedia）、セキュアディジタル（Secure
Digital, メモリスティック(Memory Stick)、コンパクトフラッシュ(Compact Flash)（登録商標）、スマートメディア（Smart
Medaia)、xD、USB、HS-MM、あるいは利用可能な多くのポータブル記憶メディア用にコンフィギュアできる。バックサイドバス・プロトコル・ロジック38は、NANDフラッシュ、NORフラッシュあるいはその他私有または公共のメモリ・インターフェース用にコンフィギュアできる。コントローラ20はさらに2個のページ・レジスタ40、42(ページレジスタ0
[page register 0]およびページレジスタ1[page register 1])、スマートフィルタ・ロジック44(smart filter
logic 44)、リマップ・ロジック46{remap logic 46}およびスマートECCロジック48(smart filter 48)を含む。簡潔にするため図2に示していないが、メモリ装置10はさらに計時ネットワークおよび他の「接着(glue)」ロジックを含むことができる。下に詳細に記述するように、コントローラ20は、多数回書込み
ファイル・システムを使用して、メモリ装置10がホスト装置と下位互換性をもつことができるようにする。そのため、時には、コントローラ20は「下位互換性があるコントローラ」あるいは「BCC」とここで呼ぶことがある。
【０００６】
コントローラ20の好ましいインプリメンテーションは、標準の組み合わせロジックと組み合わされた有限状態機械（マシン）(ミーリ[Mealy]および/またはムーア[Moore])を使用する、エイシック(ASIC)である。しかしながら、コントローラ20は様々な他の形式でインプリメントすることができる、例えば、ファームウェアを備えたマイクロコントローラあるいはマイクロプロセッサーであるが、これらに制限されない。さらに、この態様では、コントローラ20が、バックサイドバス34でメモリ配列30から分離されているが、設計はコスト削減のために単一のダイに統合することができる。大部分は、この態様でコントローラ20のデザインは、書き換え可能メモリ技術用に使用のコントローラに非常に似ている。違いの例は、このコントローラ20が不揮発性のメモリの消去と関連したウエアレベリング(wear-leveling)あるいは他のロジックを好ましくは必要としないということである。ここに示した設計がこれらの追加のブロックおよび機能を含んでもよいが、それらは恐らくコスト的には最適ではないはずである。したがって、これらを除外した方がよいだろう。同様に、互換性問題を回避するための新しいソフトウェア・ファイル・システムを使用するOTP
またはFTPメモリと作動するよう設計された超低コストのコントローラは、1個より多いページレジスタ、リマップ・ロジック、あるいはスマート・フィルタ・ロジックを必要としないかもしれない。
【０００７】
一回書き込みメモリ配列30は、複数のフィールド・−プログラム可能な一回書き込みメモリ・セルを含む。フィールド・プログラム可能な一回書き込みメモリ・セルは、最初の、プログラムされていないディジタル状態で組立てられ、組み立て後の時期に、代替のプログラムされたディジタル状態に切り替えることができるメモリ・セルである。例えば、最初のプログラムされていなディジタル状態は、ロジック1(あるいはロジック0)状態として確認ができ、プログラムされたディジタル状態は、ロジック0(あるいはロジック1)状態として確認できる。メモリ・セルが一回書き込みであるので、ストレージ（記憶装置）の位置(例えばロジック1状態)の最初のプログラムされていなディジタル状態は、一旦、プログラムされたディジタル状態(例えばロジック0状態)に切り替えられると回復できない。一回プログラム可能な(つまり、一回書き込み)メモリ配列である代わりに、メモリ配列30は、多数回書込みメモリ配列ほどの回数ではなく、二回以上書き込めることができるメモリ配列である、数回プログラム可能な(FTP)メモリ配列の形式をとることができる。さらに、メモリ装置10は追加のメモリ配列(一回書き込み、数回プログラム可能、あるいは多数回書込み）を含むことができる。
【０００８】
該一回書き込みメモリ配列30は、固体（ソリッド・ステート）メモリ装置(つまり、電気的読み取り、書き込み信号に応答するメモリ装置)、磁気記憶装置(ハードドライブのような)、あるいは光学記憶装置(CDかDVDのような)のようなどんな適切な形式も採れる。固体メモリ・ユニットの形式では、メモリ配列30中のメモリ・セルは、二次元あるいは三次元的に組織化できる。一つの好ましい態様において、メモリ配列30は、ジョンソン等の米国特許番号6,034,882、ザングの米国特許番号5,835,396、および米国特許出願番号09/560,626に記述された配列のような三次元の配列であり、これらすべては参照によってここに組み入れられる。
【０００９】
これらの態様を説明するのに、DOS FATファイル・システム(ウィンドウズ（登録商標）・オペレーティング・システムのような)を多数回書込みファイル・システム7の例として使用することとする。注目すべきことは、これらの態様は、他の多数回書込みファイル・システムと共に使えることである。図面に再び戻ると、図3は様々なファイル・システム構造を示す、典型的なFAT
12/16に基づいた記憶カードのメモリマップ50である。ここに使用するように、「ファイル・システム構造」とは、メモリ内のパーティション、パーティション内のメモリ・スペースおよび/またはファイル・システムがそのパーティションで使用できるか、あるいは、できないコマンドのタイプを記述するすべてのデータのことを言う。ファイル・システム構造の例は、マスター・ブート・レコード、パーティション・ブート・レコード、ファイル割付けテーブル(「FAT」あるいは「FATテーブル」)、ルート・ディレクトリー、およびサブディレクトリーを含むが、これらに制限されない。マスター・ブート・レコード(MBR)は、個々の論理パーティションのスタートする位置はもとよりカード(つまりメモリ装置10)のブート情報を保存するために使用される。ここに示されたような大抵のメモリーカードは論理パーティションを一つだけ含む。この例で、クラスタ・サイズ、クラスタの数、パーティション・タイプ、パーティション名などのような情報を含むパーティション・ブーツ・レコード(PBR)は、アドレス0x4000でスタートする。FAT1はFATテーブル1に相当し、それは、カード10上の各ファイル、ディレクトリーおよび他の情報のクラスタ番号のリンクしたリストを含む。FAT2はFATテーブル2に相当する。最後に、ルート・ディレクトリーおよびファイル・データ・エリアは物理アドレス0C200で始まる。これらのエリアは、各FATテーブル中のクラスタ番号に対応するクラスタに分割される。この例の目的には、各クラスタのサイズが正確に4KBであると仮定する。これがFATファイル・システムのほんの一例であって、本発明を全く制限する意図が無いことに注意すること。各構造に対する異なる位置、異なるクラスタ・サイズおよび、異なるファイル・システムさえも、ここに記述された態様に関連ができることである。
【００１０】
本システムの一般的なコンポーネントを記述したので、ハードウェア・コントローラ20のスマート・フィルタ・ロジック44、リマッピング・ロジック46およびスマートECCロジック48を検討し、どのようにして、これらのロジック・ブロックが使われ、消去可能フラッシュ・メモリー用に設計されたホスト装置がOTPメモリを実際にシームレスに使用できるようにするかを例証する。これらのロジック・ブロックは、多くの既存のホスト装置が消去コマンドを送らず、その代り、消去管理(例えば、ウエアレべリングおよびガーベジ・コレクション)を実行するためにコントローラ20に依存すると言う事実を利用する。ホスト装置は、アドレスに書込まれた最も最近のデータが、後にそのアドレスが読み取られる時に存在するものと全く予期している。上述したように、コントローラはこれらのロジック・ブロックのうちのいくつかあるいはすべてを使用することができるが、３個のロジック・ブロックをすべて使用することはそこに明示されていない限り請求項で要求されない。
【００１１】
スマート・フィルタ・ロジック44
スマート・フィルタ・ロジック44は、コントローラ20がユーザが希望する行動に基き、スマートにホスト・オペレーションを修正することを可能にする。スマート・フィルタ・ロジック44の1つの形式は、アドレスに書き込みを要求されたデータをそのアドレスに以前書込まれたデータと比較するために書き込みの前の読み取り（read-before-write）オペレーションを実行する（つまり「新しい」データを「古い」データと比較する)。最も単純な場合では、以前に書込まれたデータの何らかの修正がある場合、スマート・フィルタ・ロジック44はリマップ・オペレーションを実行することができるが、これは好ましくないユーザ・モデルという結果になるかもしれない。複雑さを加え、スマートにデータの差異を判断することによって、コントローラ20は、ホスト装置5が何を行おうと試みているか推論することができ、次いで、次のオペレーションのうちの一つを選んで実行することができる：そのアドレスに新しいデータを書込か、データを「偽書き（fake
write）」する (つまり、実際には何も書込まれなかったのに、ホスト装置5に、書き込みオペレーションはうまく実行されたと伝えるか、書き込みを却下しカード・エラーを発生するか、あるいはリマップ・オペレーションを実行する。これは、図4のフローチャートに図示されている。図示のように、下位互換性をもつコントローラ(BCC)20は、書き込みオペレーション(実行60)を受け取る。データがブランクページにもたらされて書込まれるか、あるいは、データが付加される場合(実行65)、コントローラ20はホスト装置5によって要求されたままのデータを書込む(実行70)。「最後にアクセスした」フィールドが更新中か、あるいは、FATテーブルを「ゼロ」に設定しようと試みがなされている場合、コントローラ20は「偽書き」を実行する(実行80)。書込みがPBRになされる場合、あるいはリマップ・ゾーンとのコリジョン(実行85)がある場合、コントローラ20はカード・エラーを出す（実行90)。その他すべての書込みオペレーション(実行95)に対応する場合、コントローラ20はリマッピング・オペレーションを実行する。これらのブランチ（分岐）はより詳細に以下記述する。大切なことは、スマート・フィルタ・ロジック44は、フローチャートに示された全４個のブランチ、全４個のブランチ未満、或いは、示されていない追加のブランチをインプリメントできることに注目することである。
【００１２】
図4に図示のように、スマート・フィルタ・ロジック44が、好ましくはデータがどこに書込み中かによって異なる実行をする。従って、スマート・フィルタ・ロジック44は、ホストが要求する新しいデータだけでな、アドレスもチェックすることが好ましい。例えば、FATテーブルへの書込み用に配置されているフィルタは、ユーザ・データ・エリアへ書込み用に配置されているフィルタとは異なることができる。したがって、コントローラ20は、カード10上のFATテーブルのアドレスと他のファイル・システム構造を理解していることが好ましい。これは、これらのアドレスを静的にロジックへハードコードするか、スタートアップでコントローラ20にMBRおよびPBRを読み取らせて解釈させるか、あるいは、アドレスを、パワー・オンで様々なコンフィガレーションデータを与える「マジック・ページ」内に保存することで実行することができる。
【００１３】
完全にスマート・フィルタを理解するためには、ユーザがメモリ装置上で実行し得るかもしれないオペレーション、および、それらがファイル・システム構造およびデータを操作するコマンドにどのように翻訳されるかを先ず理解しなければならない。先ず、ユーザが写真を撮るか、ファイルをコピーするか、新しいファイルを保存するか、あるいは、ファイルをメモリーカードに移動させる時に何が起こるかを説明しょう。これらのオペレーションは装置によって変わり得るが、一般的傾向には従う。最初に、ホスト装置は、空きスペースがカード上、どこで利用可能か決めるため、どちらかあるいは両方のFATテーブルを読み取る。この空きスペースはFAT 16ファイル・クラスタの中で0x0000として表わされている。次に、ホストは、新しい32バイトファイルのリスティングの最初の26バイトを適切なディレクトリー・クラスタへ書込む。この32バイト構造のメモリマップは図5に示されている。次に、ホストは、クラスタのリンクしたリストを書込むことで、ファイル用に使用されるメモリをFATテーブルへ割り付ける。メモリが割り付けられた後、ホストは適切なクラスタにファイル・データを書込む。留意することは、この割付けおよび書込みはどの順序で行ってもよく、分けてもよく、この場合、一回につき単一のクラスタが割り付けられ、データが書込まれることである。データをすべて書込んでから、始めのクラスタ番号およびファイル・サイズを示すために、最終の6バイトをファイル・リスティングに書込む。
【００１４】
この例は図6および7で見ることができる。ホストがメモリの未使用のスペースにFile2.jpgを書込み中であると仮定する。ファイル名、属性情報などは、適切なディレクトリーに最初に書込まれる。その後、FATテーブルは、ファイルに対して更新されるが、ここでクラスタ0x09に0x0Aを書き込むことによりスタートし、次のクラスタがクラスタAにあると表示する。ファイルの終りがクラスタ0x11に書き込まれた0xFFで示されるまで、リンクしたリストが書込まれる。その後、ホストは、カードへのファイル・データを新しく割り付けられたクラスタに書込む(もう一度、このオペレーションは、分けて、ファイルの端に到達するまで、一回につき単一のクラスタを割り付けることができる。)最終的には、最後の6バイトがファイル・リスティングに書込まれ、File2.jpgは、クラスタ0x09でスタートし、サイズが45KBであることを示す。
【００１５】
新しいディレクトリーは、新しいファイルの作成と非常に似た方法で作成される。事実、ディレクトリーおよびファイル、ディレクトリー属性ビットを除けば、FATファイル・システム・インプリメンテーションにおいて全く同じである。したがって、ホストは、適切なディレクトリーに(ROOTディレクトリーは、FAT2後の、ユーザ・データ・エリアの初めに定義される)、先ずディレクトリー名および属性ビットを書込むことにより、ディレクトリーを作成する。次に、新しいディレクトリー用のクラスタは、FATテーブルに0x
FFを書き込むことにより割り付けられる。任意の新しく作成されたディレクトリーの内部には、ファイル「．」とファイル「．．」があり、ディレクトリーとその親をそれぞれ指す（その「．」ファイル・クラスタ番号はディレクトリー・クラスタと同じである。)これらの二つファイルが書込まれた後、ホストは、最終の6バイトを32バイトのリスティング書込むことによりディレクトリー・リスティングを完成する。
ユーザのオペレーションの別の例は、以前にカードに書込まれたファイルを削除することである。ユーザが削除する場合、FAT系オペレーティング・システムは、普通にはカードからファイル・データあるいはファイル名を削除しない。代わりに、文字0xE5がファイル・リスティングの第1番目のバイトに書込まれ、ファイルのクラスタは、FATテーブルのそれらの位置に0x00を書込むことにより割り付けが解除される。ファイル・リスティングで第1番目の文字として「E5」を読み出すホストは、どれも、このファイルが削除済みとしてスキップすることを知る。これにより、さらに、ファイルへ正しい文字を書換え、オリジナルのクラスタを再び割り付けることにより、ファイルを回復する機会が与えられる。
【００１６】
メモリ中の各ファイルは、ファイル名、読み出し専用、隠し、ディレクトリー、アーカイブのようなファイル属性;ファイル生成期日；ファイルを最後にアクセスした日付;  ファイル・サイズ;および第1のクラスタ・エントリーのような情報を含む32バイトのファイル・エントリーを含む。ファイルをリネームするか、あるいは、その属性(例えば、隠し、アーカイブ、読み出し専用)を変更するには、ホスト5は、オリジナルのリスティングに、新しいファイル名あるいは属性ビットを書込むデータを備えた書き込みコマンドを単に送る。一般に、コントローラ20は、ホスト5がリマップ・オペレーションの実行により、これらのパラメーターのうちのどれでも修正することが可能になる。しかしながら、コントローラは、ファイルリスティングの「最後にアクセスした日付フィールド」
(図5のバイト18-19)が更新されるときに、偽書きの実行によりメモリを保存することに決めてもよい。この例外の理由は、ファイルが読み取られるごとに、マイクロソフト・ウィンドウズ（登録商標）のようなホストの中には、このフィールドに新しい日付を書込み、これで、メモリの512バイトをリマップのために使われる可能性があるためである。これはユーザが知らないうちに書き込みオペレーションを実行するシステムの例である。これを回避するために、スマート・フィルタ・ロジック144は、この特定の更新をインプリメントしないように選択できる。これらの隠しオペレーションの意味および取り扱い方については、この明細書で後に、より深く詳細に検討することとする。
【００１７】
ユーザは、さらにメモリーカードをフォーマットするよう選択できる。これはホスト装置で様々な方法で実行される。ある装置では、単にFATおよびルート・ディレクトリーに0を書きこみ、それにより、メモリ・スペースをすべて「解放する」。他のホストは、新しい情報でMBRおよび/またはPBRを書換え、それで、ホストとルートのディレクトリーをゼロに設定することにより、カードを再フォーマットしようと試みる。さらに、他のホストはメモリ・スペースがすべて消去されていることを保証するために全カードに0を書込むと同様に上記の一つまたはすべてを実行する。最後に、あるホストは、上記のオペレーションの一つ以上を実行し、さらに、データがすべて完全に消去され新しいデータの準備ができていることを保証する消去コマンドを使用する。
【００１８】
ユーザが試みることができる最終のオペレーションは非常に広い--既存のデータを修正することである。ユーザは、カメラ上の画像を回転させるか、色あるいは別の変数を改善するツールを使用後、再度カードへ画像を保存するするか、あるいは他の多くのオペレーションのどれでも選択できる。ホスト装置は、新しいデータを書込み、古いファイルを消去することから、単に古いファイルの適切なクラスタに新しいデータで上書きすることに及ぶ様々な異なる方法でこれらのオペレーションのうちのどれでも実行することができる。
【００１９】
ホストがどのように異なるユーザ・オペレーションを実行するかについての基礎的な理解が得た以上、スマート・フィルタおよびそれらがどのように作動するか理解し始めることができる。BCCコントローラは、大抵の書き込みコマンドを受け取ると、書き込み前-読み取り(read-before-write )  (RBW)を実行する。ホストから希望の書き込みアドレスを受取ると直ちに、メモリ装置が読み取られるれることが好ましい。コントローラ20が希望のデータを読み取り、ページレジスタ1(PRI)42にそれを挿入することができるとともに、一方ホスト10がページレジスタ0(PR0)44に移送されるデータを送信しているので、これで動作を改善することができる。このRBWオペレーションについてのより詳しいことは、この文書で後にリマッピングの記述の中にある。スマート・フィルタ・オペレーションの様々な例は、図5に示すFATテーブルに関連してここに述べることとする。
【００２０】
新しいファイルあるいはディレクトリーを作成するのに、ホスト装置5は適切なサブディレクトリ中に新しい32バイトのファイル・エントリーを書込み、正しいメモリ・スペースを割り付けるためにFATテーブルを更新する。ホスト装置5が新しいファイルを書込もうとしている場合、ホストはこの図の中の最終2個のクラスタを、最も恐らく値0x13および0x14でそれぞれ割り付けようとするであろう。図4のフローチャートを見ると、データが修正されていないので、「データを付加する」に相当することになる。したがって、スマート・フィルタ・ロジック44は、変更せずオリジナルのアドレスに単にデータを書込む。この一般的な場合では、コントローラ20によって、新しいファイルのために、ホスト装置5が空きスペースに単に上書きすることができた。しかし、ある場合には、以前の削除の所為で、スペースはホスト装置5に空きのように見えるかもしれないが、現実には、メモリは決して消去されなかった。この場合、下記のように、スマート・フィルタ・ロジック44は、新しいデータが古いデータに取って代わるために、リマップ・オペレーションを実行することができる。
【００２１】
ファイルを削除するのに、ホスト装置5は二つの機能を実行する。第1に、ホストは、ホスト装置5にデータ・エリアは今利用可能であることを示すために、FATテーブルのクラスタ・ポインタに「00h」で上書きする。OTPまたはFTPのメモリの場合には、メモリを削除することが極めてできそうでないので、したがって、コントローラ20は、そのような方式でメモリを「フリーアップ（使えるように空ける）」ことはしたがらないであろう。言いかえれば、コントローラ20は、好ましくは、リマッピング・アルゴリズムを使用して、ホスト装置5がデータを修正したと見せかけるが、しかし実際には、削除してこの空きスペースを取り戻すことはできない。このため、スマート・フィルタ・ロジック44は、以前に割り付けられたクラスタに、ホストが0x00を書込むことを決して許可しないことが好ましい。このアクションは図4で「偽書き込み」と呼ばれている。特に、コントローラ20は、ホスト装置5に、メモリに[複数の]0が書込まれたことを伝えるが、実際にどんな書き込みも行わない。FATテーブルに[複数の]0を書込むとカードに実際より多くのスペースがあるようにユーザに思わせることになるので、カードがより多くのスペースがあるように見えても、新しいデータは最早書込めないとしたらユーザに良くない経験をさせることになると理解することは重要である。第２に、ホスト装置5は、32バイトのファイル・エントリーの第一番目の文字に「E5h」で上書きし、FATファイル・システムに該ファイルを飛ばす（スキップ）ように知らせる。ホスト5がコントローラ20へ書き込みコマンドを送る場合、コントローラ20は、以前のものと新しいデータの比較が出来るようにするために、書き込み前―読み取り(Read-Before-Write)オペレーションを実行する。この時に、下記のように、スマート・フィルタ・ロジック44は、リマップ・オペレーションが、元のファイルの最初の文字に「E5h」で上書きすることを可能にする。
【００２２】
FATテーブルのスマート・フィルタリングで起こる最後の例は、ホスト5が以前に書き込まれたクラスタに0x00以外の何かを書込んで、データを変更しようと試みる場合である。これは、例えば、ファイルが修正されて、長さが拡張される場合、(例えば、thumbs.dbファイルへデータが加えられて、16KB
から24KBに拡大する場合)これが起こり得る。ここで、エンド・オブ・ファイル・マーカー0xFFは、新しく付加したデータを指すクラスタ番号と取り替えられることになる。この場合、リマップ・オペレーションが起こり、ホスト5が望むようにデータを修正することが可能になる。
【００２３】
重要なことは、偽書き込みオペレーションで、ホストが、書込まれていると信じる事と、現実にメモリの中にある事との間にずれがあることを理解することである。ウィンドウズ（登録商標）のように揮発性のRAMにFATテーブルをキャッシュ(cache)するホスト・システムでは、これが、一個を越えるスマート・フィルタが一つのオペレーションで適用されるかもしれないことを意味する。例えば、ユーザが一つのオペレーションで1MBのファイルを削除し、BCC
20が、FATテーブルの1MBの値のクラスタをゼロに設定することを偽造する、と仮定する。次に、ユーザがメモリ30に500KBファイルを書込もうとすると仮定する。この場合、ホスト5は、削除オペレーションによって空けたクラスタに新しいファイルを入れようと試みるであろう。ホストは、したがって、新しいクラスタ割付けを書込み、残余のクラスタ0x00を残すであろう。したがって、該スマート・フィルタは、同時に、以前に偽造されたスペースをゼロにしない一方、新しいファイルのクラスタをリマップしなければならない。この例は図8および9で見ることができる。時間0では、偽書き込みが、カード上に値11-FFを維持し、時間1でリマップ・オペレーションにより、カードに新しいファイルのクラスタ11-FFが書込まれるが、猶、スペースが空けられたようには見えないことを保証するために14-FFも維持される。
【００２４】
この態様では、データ・エリア用のスマート・フィルタは、FATテーブル中のものとは異なる。ユーザ・エリアに保存できるデータは、実際のファイル・データの32バイトのファイル/ディレクトリーリ・スティングおよびクラスタに制限されている。最も簡単な場合では、またしても、スマート・フィルタが、使用歴のある(ノンバージン)（non-virgin)スペース上のどの書き込みデータもリマップするよう選択できる。しかし、またしても、これでは、以前に言及した、隠しシステム・オペレーションがユーザが好まなかったリマップ用に余分のメモリ・スペースを使用することになるので、好ましくない使用法モデルと言う結果になってしまう。これらの余分のリマップ・オペレーションを回避するために、BCCコントローラ20がページ・レジスタ0およびページ・レジスタ1のデータを比較し、図7で示すように、一つのまたは複数の変更だけが特定のフィールドに関連している場合、偽書込みを実行するのが好ましい。例えば、ページレジスタ0でのデータが、オフセット18の2バイトを除いて、厳密にページレジスタ1のデータと一致した場合、コントローラ20は、ホスト5が「最後にアクセスした」フィールドを更新しようと試みていると決定し、したがって、偽書込みを実行することになる。したがって、ホスト5は、フィールドが更新されたと見なすが、実際には、書き込みは起こらなかった。
【００２５】
既知のファイル・システム構造フィールドのどんなデルタあるいはデルタの組み合わせも、スマート・フィルタに適用することができる。例えば、設計者がOTPメモリがユーザによる修正を可能にすべきでないと決めると仮定すると、したがって、どのリネームまたは削除オペレーションも許可されないことになる。この場合、フィルタ・オペレーションは、バイト0〜11に対する変更を検知することができ、偽書き込みを実行することができる。さらに、設計者がリネームはよいがファイルを隠すことは許可しないと決定したと仮定しよう。もしユーザがファイルをリネームし、属性ビットを変更しようとすれば、スマート・フィルタ・ロジック44は、これがしかるべきフィールドに起こっていることを検知することができる筈で、データを新しい名前でリマップできる、しかしファイルを隠せるように属性ビットを変更できない。
【００２６】
スマート・フィルタ・ロジックが呼び出せる最後のオペレーションはエラーを示すことである。好ましい態様では、これが二つの場合だけに起きる:  (1)ユーザがカード10をフォーマットしようとする場合、あるいは、(2) カード10が一杯で、これ以上のデータを書込むことができない場合。カード10をフォーマットするのに、ホスト5は少なくとも二つのオペレーションを実行する:FATテーブルを取り除き、PBRを希望のフォーマット情報で更新。この状況で、コントローラ20は、FATテーブル上位(図3の中のアドレス0x0000〜0x4000)で書き込みオペレーションが起こっていることを検知し、ホストのコマンドに応答する時に、一連のエラー・ビットをセットする。これらはCRCエラーか、書込み失敗エラーか、あるいはカード形式因子に適切な他のステータスエラー信号であり得る。更に、コントローラ20は、またしても、FATテーブルをゼロに設定しようとする如何なる書き込みも「偽造」できる。カード10が一杯で、これ以上のデータが書込めない場合、カード10が一杯であることを、コントローラ20は、FATテーブル、あるいは書き込みアドレスを通じて検知できる。この時点では、追加データは書込むことができなく。エラーが表示される。さらに、どの書き込み保護ビットも、OTPカード10が現在一杯で本質的にはROMであるとユーザに合図するようにセットできる。コントローラ20は、カード10が一杯であることを、FATテーブル中の検知から、リマップ・アドレシングおよびホスト書込みアドレシングの重複に気付くことに及ぶ様々な方法で検知することができる。
【００２７】
上記の例では、ホストが、ファイルまたはシステムのデータを削除せよとする実際の消去コマンドを送らず、代わりにこのオペレーションを実行するのにコントローラに依存するとすべて想定した。しかしながら、実際には、ホストの中には、自身で消去オペレーションを実行するか、或いは物理および論理ブロックを無効にして、消去オペレーションを後日実行するかの何れかを要求されて余分に複雑化しているものもある。このようなシステムの例は「スマート・メディア」・インターフェースであるが、該明細書は、如何にして論理ブロックをメモリの側波帯エリアに作り、無効フラグをマークし、また他のもっと複雑なオペレーションを実行するかを示している。
重要なことは、オペレーションが書き込みであったか、消去、または他のコマンドであったかどうかを問わず、コントローラが、古いデータと新しいデータの比較に基づいた規定のオペレーションをスマートに実行するこの種のシステムにも同じく容易ににスマート・フィルタの概念を適用できることに注目することである。
【００２８】
要約すれば、ホストが実行できる個々のオペレーション各々を考察すると、スマート・フィルタ・ロジックは比較的複雑に見えるかもしれない。しかし、よく調べるとこの行動には様々なパターンを見ることができる。コントローラ20がプリフォマット済で販売されている場合、PBRのアドレス、FATテーブル、ルート・ディレクトリーおよびデータ・エリアが既知である。ホスト5がPBRに上書きしようとすれば、これはカード10のフォーマットを変更するので、コントローラ20がカード・エラーを強制するのが好ましい。メモリ配列30技術のOTP/FTP特性により、コントローラ20は、FATに以前書込まれたアドレスに00hを書込むことにより、カード10上のスペースを空けようとするどんな書き込みも偽造するのが好ましい。同様に、最後のアクセスされたフィールドのようなファイル・エントリーへの不適当な更新はメモリ利用の改善のために偽造することができる。ホスト5が未使用の（バージン）メモリ・スペースへ書込む場合、スマート・フィルタ・ロジックは、書き込みが中断されずに継続させるのが好ましい。また、用心過ぎると言う誤りになるが、ホスト5がスマート・フィルタ・ロジック44が理解しないやり方で、以前のデータに上書きする場合、、ホスト・オペレーションがうまく継続するのを可能にするよう、書き込みをリマップできるのが好ましい。最後に、単一の書き込みコマンドに対して、コントローラ20に幾つもの機能を実行させることが可能なフィルタの組み合わせは、注意を払うのが好ましい。例えば、ホスト5がFATテーブルキャッシュに入れ、大きなファイルを消去し、次に、「空けられたスペース」に小さなファイルをコピーしようと試みるならば、コントローラ20は、新しいファイルをFATテーブルに余分なスペースを空けないで書込ませることが好ましい(キャッシュに入れられたFAT対フィルターされた実際のFATとのミスマッチがこれらの組合せの問題を起こす)。
【００２９】
リマッピング・ロジック46
リマッピング・ロジック46は、特定のアドレスを消去したとホスト装置5に思わせることが出来る新しい論理アドレスに、データを移動させるのに使用することができる。リマッピングはメモリ・コントローラ20による、データおよびアドレスのインディレクション(間接化indirection)を記述するために使用される用語である。この用語は、ホスト5が供給した論理アドレスとは異なる物理位置にデータを書込む概念を指す。リマッピングはフラッシュ・メモリーを含む様々な技術が使用するが、その理由は、性能の向上からウエアレベリング・アルゴリズムによるデータ保全までと色々である。しかし、BCCで作動するOTPまたはFTPのメモリにとって、リマッピングが、消去性を模倣するために使用されるという点で独特である。例えば、ホストがデータセットAをアドレス0に書込むように要求する場合、コントローラ20はアドレス0にデータを書込むことを選ぶことができる。その後、前述のように消去オペレーションを実行するため、文字「E5」を書込むような時に、ホスト5はデータをAからBに変更したいと思うかもしれない。この時に、コントローラ20は、スマート・フィルタを使用し、ホスト5が適切にデータセットAを修正していたと断定し、アドレス1のような異なる物理位置にデータセットBを書込むことになる。さて、ホスト5がアドレス0を読み取る場合、コントローラ20は、代わりに、アドレス1にあるデータを返すことを承知していなければならず、従って、ホスト5およびユーザにとってメモリが修正されたように見せるのである。
【００３０】
ホスト装置からデータをリダイレクト（出力先変更）するのに多くの方法がある。例えば、次の特許書類を参照のこと(これらは本発明の譲受人に譲渡されており、参照によってここに組込まれる):米国特許出願番号09/877,719;09/878,138;  10/327,680;及び10/023,468。一つの共通する方法はスタートアップで読み取られるか、あるいは、計算され、次いで、コントローラ2の揮発性メモリに保存される物理-論理-アドレステーブルを使用することであるが、このテーブルは非常に大きくなることがあり、コントローラ20にダイ・サイズおよびコストが加えられることになる。ここに記述されたインプリメンテーションについては、アプリケーションの必要条件を越えて性能を危うくさせないで、コストをできるだけ低く維持することが好ましい。好ましい態様では、二つのリマッピングの方法がある。
【００３１】
最初で最も簡単なスキームはホストに見えないメモリ・ページの「側波帯エリア」を使用することである。現在の好ましい態様では、メモリ配列30が528Bページに編成されているが、FATファイル・システムは512Bセクターを使用する。この余分な16Bは、側波帯と呼ばれ、コントローラ20が、ECCデータ、データおよびアドレス有効性フラグ、およびリマッピング・ポインタを含むがこれらに制限されない余分な情報を保存するの使用できる。このスキームでは、ページがリマップされた場合に、物理アドレスを保存するの、コントローラ20がこの側波帯の一部を使用する。初めて該ページを書込む場合、物理・論理アドレスが同じになるので、リマップ・ポインタは必要ない。ホスト5がデータを修正しようとする時、コントローラ20は新しい位置に新しいデータを書込み、この位置の物理アドレスを古い位置の側波帯へ保存する。
【００３２】
図10は、データがこのリマッピング・スキームの下でどのように読込まれるれるかを図示すフローチャートを含む。最初に、読み取りコマンドおよびアドレスがカード10(実行110)へ送られる。コントローラ20は528Bページ全体(またはポインタを含むのに必要なだけ)を読込む(実行120)ことを承知しており、アドレスがリマップされたかどうかをコントローラ20に伝えるFFh(実行130)を側波帯が含むかどうか決める。ポインタがバージンの場合(つまり、FFhを含む)、コントローラ20はホスト5に512Bページを返す。側波帯がアドレスを含む場合、コントローラ20は最も最近書込まれたデータを見つけるために側波帯に保存されたページ・アドレスを読み取る。このアドレスを側波帯に直接保存でき、あるいはアドレスのオフセットを保存できる。この型のリマッピングはコントローラ20がリマッピングに使用される余分のスペースを割り付けるのにFATテーブルを修正しないので、静的と言われる。このインプリメンテーションでは、カード10は、FATテーブルに既に割り付けられていたリマップ・データの規定量でプレフォーマットされていた。一旦この量のデータが使用されていた場合、リマップは最早行われ得ない。ホスト5がそれ自身の目的(例えば画像データを保存する)のためにこのスペースを使用しよぅとしないように、FATテーブルはリマップ割付けを示す。
【００３３】
この最初のリマッピング・スキームは非常に強力で、実行するのにほんの僅かのロジック・オーバーヘッドを要するだけである。しかしながら、カレントデータを見つけるには、N回リマップしたページはN回読み取りが必要となるので、比較的高い性能上のオーバーヘッドが付随することになってしまう。その代わり、この性能を改善するのに、もう一つ他の単純なリマッピング・スキームが使用できる。ここでは、リマップしたページへのポインタを保存する代わりに、リマップ・テーブルへのポインタを利用する。このテーブルは、最も最新のページ・データを保存するのに、時間一空間へのマッピング技術を使用することができる。時間一空間へのマッピングは、米国特許番号6,738,883に記述され、本発明の譲受人に譲渡されており、参照によってここに組み入れられる。さて、N回リマップされたページは、高々三回の読みで読み取ることが出来、ほんの僅かなコストと複雑さが加わるだけで製品性能が大幅に向上するのである。
【００３４】
注目すべきことは、アドレスがアクセスされる度ごとに、コントローラ20がこれらの読み取りを実行して最新のページを見つけるのが好ましい。コントローラ20が書込み前読み取りを実行する前記の個々のスマート・フィルタ・オペレーションについては、コントローラ20が、最も最近のページを見つけるのにリマップのチェーンをウォーク(walk)することも好ましい。
【００３５】
容易にこれらのアルゴリズムをさらに複雑に出来ることも理解されるべきである。例えば、複雑性を最小限に留めて、一つ以上これらのアルゴリズムを別のものと共に使用して、性能を改善できる。複雑性に関する別の例は、キャッシュ(cache)した読み取りオペレーションを実行するのに、FATファイル・システムでのデータの強い位置依存性を利用することであろうが、ここでコントローラ20があるページおよびその近傍の複数ページを読み取り、ホスト5あるいはコントローラ20のいずれかが実行している他のオペレーションと並行してデータを見出すことになる。これでコントローラ20にコストが幾らか増す一方、書き込み前読み取りおよびリマッピング−ウォーキングのオーバーヘッドを大巾に縮小できる。
【００３６】
BCCコントローラ20がインプリメンできる標準的リマップ・アルゴリズムとの他の大きな1つの特徴は、ホスト5へのフロー・コントロールの問題を解決するのに利用される。言いかえれば、コントローラ5が、ホストに知るせないで新しい位置にデータを移動させており、亦ホスト5は、このデータが現実に消去されて書き直されていると見なす場合、ホスト5は、どれだけの空きスペースが現実に利用可能かをどのようにして知るか？この問題を解決するために、BCC
20は2つの別個のオペレーションを実行する。第一に、前記のように、スマート・フィルタ・ロジック44は、ホスト5がスペースを空けようとFATテーブルに複数の0を書込むことがないように保つ。これは、ファイル削除のような、ユーザが支配するオペレーションがメモリを削除し、開くように見えることのないように保つであろう。しかしながら、リマッッピング用にコントローラ20が消費するメモリは説明がつかなけばならない。
【００３７】
この問題を解決する一つの簡単な方法は、メモリ装置10の販売時以前にリマッピング用にメモリを割り付けるることである。この静的量のリマッピングは、あらかじめ割り付けられたスペースの残りがなくなるまで、コントローラ20が使用することができる。この時に、コントローラ20はカード・エラーを表示するか、リマップでないすべての書き込み、あるいは他の多くのオペレーションを許可することが出来る。静的リマップ割付けと呼ばれるこの方法は、ユーザが実行できるオペレーションの回数およびサイズを制限するので、好ましくないかもしれないことを理解することができる。
【００３８】
動的なリマップ割付けと呼ばれる、より複雑な形式のリマッピングがこの問題を解決する。図11にこの方法のフローチャートを見ることができる。先ず、ホスト5は書き込みコマンドを送り、データはページレジスタ1に保存される(実行160)。  次に、コントローラ20は書込み前の読み取り(RBW)オペレーションを実行し、ページレジスタ2にデータを保存する(実行170)。  ページレジスタ2が空の(実行180)場合(つまり、FFhを含む)、ページレジスタ1の内容は、メモリ配列に書込まれる(実行190)。そうでなければ、コントローラ20は、ページレジスタ1の内容が、付加（アペンド）されたデータを備えたページレジスタ2と一致するかどうかを決める(実行200)。そうである場合、ページレジスタ1の内容はメモリ配列に書込まれる(実行190)。そうでない場合、スマート・フィルタリング・ロジックが可能（イネーブル）になっているかどうか決める(210実行)。そうである場合、データはフィルターされる(220実行)。そうでない場合、リマップが要求される(230実行)。リマップを実行するのに、メモリの一番上の最初の空きページを見つけ(実行240)、ページレジスタ1の内容は、エラーの無い最高の空きページに書込まれる(実行250)。その後、FATテーブルは、該ページのクラスタを使用済みとするよう更新される(実行260)。最後に、新しいページ・アドレスを元の（オリジナル）のページの側波帯に書込む(実行270)。パフォーマンスの節約（(例えば、アドレスが利用可能な場合、およびホスト5からのデータ入力が完了する前に、書込み前読み取りが起こる)を提供するのに、二つのページレジスタがここに示されているが、単一のページレジスタを使用することは可能である。
【００３９】
フローチャートに図示のように、コントローラ20は、FATテーブルに書込むことで、リマッピングのためにスペースが使用されたことをホスト5に通知する。補足メモリが必要になるにつれて、ちょうどホスト5がファイル・データにクラスタを割り付けるように、コントローラ20はそれ自身の使用に新しいクラスタを割り付けることができる。すなわち、このスキームは、上記のようなアルゴリズム追跡ポインタを使用するが、補足スペースがリマッピングのために必要になると、また、動的にFATテーブルを更新する。このインプリメンテーションの利点は、ホスト5およびユーザが実行できるリマップ/ファイル修正の数に制限がないということである。カードが完全に一杯になるまで、コントローラ20はホストおよびユーザがリマップするのを許可する。この好ましい態様では、図12に示すように、大抵のホストが上から下に向けてメモリを割り付けるので、コントローラ20は下から上にメモリを割り付ける。この割付けスキームは、割付けが衝突する（コリジョン）チャンスを非常に小さくして、コントローラ20とホストの5が別々にメモリを割り付けるのを可能にする。又これにより、この二つの割付けゾーンが衝突する場合は常に、カード10が一杯であるとコントローラ20が認めることができる。カードが一杯である時に、コントローラ20は、その永久および仮の書き込み保護レジスタをセットすることに決め、カード10にはこれ以上書込むことは出来ないとホスト5に合図してもよい。キャッシュに入れられていないシステムは、どれだけのメモリが残っているかが判る一方、キャッシュに入れられたシステムは、スタートアップ時FATテーブルを読み、そのセッション以前にどれだけのリマップ・スペースが使用されたかを知る。
【００４０】
またしても、留意すべきことは、静的および動的リマッピングは相互に排他的でないことである。事実ユーザを支援するために、単一の製品に両方を組み入れるように選択してもよい。例えば、カードが一杯でも、ユーザはファイルを削除するか、あるいは、修正したいかもしれないし、追加のファイルを加えることができない。規定したメモリの量があらかじめ割り付けられ、正常なオペレーション下で使用されない場合には、付加的なデータ修正を許すことができる。例えば、カード10は、ホストとコントローラの割付け衝突（コリジョン）によってカード10が一杯になっているように見えるまで、コントローラ20が使用しない500KBの静的リマップを予備に取って置くことができ。この時に、コントローラ20は、希望のオペレーションが完了するまで、ホストの追加のデータを静的割付けゾーンに書込むのを認めることができる。その後、スマートフィルタは、削除とかリネームのようないくつかのユーザ・オペレーションが静的エリアで起きるのを許可するのに使用できるが、一方カード10が大抵の使用には本質的に一杯であるので、他のオペレーションはエラーの結果になることになる。
【００４１】
またしても別の例では、BCC技術のソフトウェアで更新されたホストはこの静的割付けエリアにアクセスできる。本発明の譲受人に譲渡され、ここに参照によって組込まれる米国特許番号6,424,581に記述のように、パソコン（PC）あるいは他の電子装置は、すべてのカード・メモリの明示的なアクセスを許す信号をカードへ送るアプリケーションで可能に（イネーブル）できる。この時点で、該アプリケーションは、どんなスマートフィルタ、リマップなどもオーバーライド（無視）することになり、リマップ・チェインを最適化したり、あるいは静的エリアへ、可能になっていないシステムでは出来なかった追加のオペレーションを許すことさえして、パフォーマンスを改善するのに使用することができる。したがって、静的および動的リマップ・アルゴリズムを組み合わせれば、可能にされたシステムと可能にならなかったシステム両者を最適なユーザ経験として提供できる。
【００４２】
さらに、上記の単純なポインタ追跡スキームを置き換える他のインプリメンテーションが可能である。幾つかを以下に列挙する:
Read3コマンド:  READ3として知られるより速い読み取りコマンドが使えるが、これは、コントローラ20が側波帯データを読み取るだけ出来るようにする。これは、最も最近のデータを見つける前にデータの多くの全ページを読み取るオーバーヘッドを減らすでしょう。
【００４３】
ポインタのテーブル:  最も最近の書き込みを見つけるために各ページを読む取るパフォーマンス・ヘット(performance hit)を減らすのに、各ページがリマップをすべてリストしたテーブルを持つようなポインタのテーブルが使用できる。ホスト5は概テーブルを読み取り、白紙(バージン)エントリー以前の最後のポインタを使用して、最も最近の更新版を決める。テーブルのアドレス自身は、ページの側波帯に保存することになっている。これは、先に参照した特許出願に記述されたハードウェア・リマッピングに使用されたテーブルに似ている。
【００４４】
システム・キャッシュ:  コントローラ20は、側波帯に保存されたリマップ・テーブルあるいはポインタからのデータを保存するためにSRAMか同様のキャッシュを使用することができる。この付加的なSRAMがエリアを要し、したがって、コントローラ20をよりコスト高にする一方、このアーキテクチャーはリマップが非常に速く起こり、パフォーマンス・オーバーヘッドを最小限にすることが出来るでしょう。
【００４５】
リマップ・アルゴリズムの組み合わせ:  コントローラ20は、単純なポインタ追跡か、あるいは、テーブル・スキームが使用中であるかを示すリマップ利用フラグを作成することができる。したがって、あるページが何度もリマップされたことをコントローラ20が知れば、コントローラは、将来のリマップの影響を減らすためのテーブルを作成するように選ぶことができる。しかし、ページがただ二、三回リマップされる簡単な場合には、ポインタ・スキームで十分でしょう。コントローラ20は、このフラグを動的にセットすることができるが、あるいは、静的に、リマップ位置に基づいてもよい。例えば、FATテーブルは何度もリマップされるだろうから、したがって、テーブルまたはSRAMのスキームを常に使用することは意味をなすかもしれないが、データは頻繁にリマップされないので、したがって、ポインタ追跡スキームをここで使用することが好ましいかもしれない。このインプリメンテーションは、猶最適に近いシステム・パフォーマンスを提供する一方、SRAMのコストを減らせるかもしれない。
【００４６】
スマートECCロジック48
フィールドで起きるかもしれない信頼度エラーに対して保護するために、ECCを使用するのが好ましい。現在の好ましい態様では、BCC 20が、上記のリマップ・ポインタもECCデータも保存するために側波帯を使用する。ECCは側波帯利用可能性の点で8バイト、16バイトか、あるいは任意の適切なサイズであってよい。現在の好ましい態様では、128B
ECCアルゴリズムが使用され、ここでは「スマートな大きいブロックECC」(”smart large block ECC”)と呼ぶ。大きいブロックECC  (「LB
ECC」)はECCワードにつき二個のクローズ(closes)を使用するが、これは、補遺Ｉで検討する。BCC 20がリマップおよびECC情報の両用に側波帯を利用するに当たり、側波帯は、正常な大きいブロックECCスキームに基づいて、ワード当たり二箇のクローズを保存するだけの十分なスペースを持たないかもしれない。従って、この大きいブロックECCスキームは、ワードの最終の2バイトが書込まれてしまうと、各ワードを1回クロ−ズするだけにより「スマート」になる。FATテーブル中の各エントリーがサイズで2バイトであるので、2バイトの値が選ばれる。(LB ECCと組み合わせて動的リマッピングを実行する場合、コントローラ20は、フィールドでの製品の最高の信頼度を保証するために、ECCのクローズ・オペレーションを考慮するのが好ましい。言いかえれば、割付けは、好ましくは、FATテーブル中のECCワードをクローズし、続いて後日、同じワードを更新してはならない。)  亦、データ・エリアに依存するクローズ・オペレーションを持つこともできる。例えば、FATテーブルを更新する場合、上記のように2バイトのセグメントに基づいて更新するのが意味があるかもしれないが、データ・エリアを更新する場合には、これは意味をなさないかもしれない。データ・エリアを更新する場合、大抵のホストは、完全にデータをすべて書込んだ後にだけ、ファイル・エントリーの最終の6バイトを更新するので、クローズオペレーションは、ワードの最後の6バイトに基づいて実行することができる。最後に、BCC
20は、以前にクローズしたECCワードが更新中であることを検知する場合、リマップ・オペレーションを実行することを決めてもよい。これは、フィールドでの最高の信頼度を維持するために、ECCと組み合わせてリマップ・オペレーションを利用することになる。
【００４７】
本発明の譲受人に譲渡されており、参照によってここに組込まれる、米国特許番号6,738,883は、OTPまたはFTP製品のデータ信頼度を改善する方法としてECCの使用を教示している。本特許で検討したように、ECCワードはたった一度だけ書込むことができる。ECCワードの新しいデータに上書きすると、ECCデータ値は間違いとされ、それにより、製品に必要な信頼度の積み重ねがなくなることになる。OTPかFTPメモリで動作可能になったシステムでは、これはライン、つまりメモリになす最小の書込みサイズの概念を作成することで容易に取り扱うことができるが、これは、上記参照の'883(6,738,883)特許の中で検討されている。しかしながら、設計複雑さを持ち、イネーブル（可能化）されていないシステム(つまり、オクトバイト・アラインメント概念でイネーブルされていないホスト)でBCC製品が使用される状況に対して補償することが好ましい。
【００４８】
BCCコントローラ20は多くの方法でECC保全を維持することができる。一つの簡単な方法はECCワードが無効にされた場合は常に、リマップ・オペレーションを起動することでしょう。ここでは、コントローラ20は、スマートフィルタあるいは他の論理スキームでECCワードが上書き中かどうか検知するでしょう。ECCワードを無効にする場合には、リマップ・オペレーションがデータを新しいECCデータで書き直し、したがって非常に信頼できる製品を保存することになる。
【００４９】
メモリの100% ECCカバレージ(coverage)を維持するためにリマッピングを使用するできるが、これは多くの追加のリマップという結果をもたらし、よって、ユーザ用のオペレーションの数を制限するかもしえない。この場合、コントローラ20がECCの取り扱いを改善するように設計できる。好ましい態様では、データの特定の部分が書込まれるまで、ECCデータが書込まれず、ECCワードは終了しないことになる。例えば、ECCワードが32バイトであると仮定する。前記ファイルを書込む場合には、ホスト5は26バイトのファイル・リスティング・データを書込み、後に、ファイル・データの完成後、最後の6バイトを書込む。この場合、コントローラのECCスマートフィルタ・ロジック48は、ファイル・リスティングが書込中であったと断定することができ、最終の6バイトが書込まれるまで、ECCワードを終了させることができない。これは、リマップオーバーヘッドを最小限にする傍ら、ECCの保全を維持するでしょう。このスキームは、様々なECCワード・サイズ、ファイル・システム構造、およびデータ構造について修正することができる。
【００５０】
要約すれば、現在好ましい態様のスマートECCロジック48は、側波帯に保存されたシンドロームビットを備えた128B ECC言葉を使用し、データの最終の2バイトを書込むことに基づいてワードをクローズし、ワード当たり一回クロ−ズを許すだけであり、FATテーブル対データ・エリア(2B対6Bクロ−ズ)のために異なるクロ−ジング・スキームを使用し、ECCワードが無効にされるか、あるいは、壊れている場合、リマッピングを使用することができる。側波のスペースが多数のECCクロ−ズに十分でないので、この態様では、スマートECCロジック48を使用する。
【００５１】
結論
これらの好ましい態様と共に使用できる代案が多数ある。例えば、メモリ装置のコントローラにインプリメントする代わりに、スマートフィルタ・ロジック、リマッピング・ロジックおよびスマートECCのどれか、あるいはすべてを、全体的にあるいは部分的に、メモリ装置あるいはホスト装置中の別のコントローラのような別のコンポーネント中で実行することができる。さらに、用語「回路類」は、それに記述された機能をインプリメントすることができるすべてのコンポーネントを指す。回路類の例は、上記の例も、コンピューター実行可能な命令を実行するプロセッサー、アプリケイション専用集積回路、フィールドでプログラム可能なゲート・アレイ、アナログ回路、あるいは現在既知か将来開発されるその他すべてのハードウェア装置(ソフトウェアを実行するかまたは実行せず)も、さらにこれらの任意の組み合わせも含む。
【００５２】
上述の詳細な記述は、発明がとることができる選択された形式の実例として、発明の定義としではなく、理解されることを意図している。この発明の範囲を定義するように意図されたのは、等価物をすべて含めて次の請求項だけである。最後に、ここに記述された、如何なる好ましい態様のうちのどの態様例も単独であるいは相互の組み合わせて使用できることに注目すべきである。
【００５３】
補遺I
大きなブロックECCのインプリメンテーション
概観
大きなブロックECCは下記を含むことが好ましい:
&#151;  128BのECCワードサイズ。
&#151;  単一のエラー修正、しかしダブルのエラー検知なし。
&#151;  高々二回のECCパリティー更新を許可するスマートECC更新。
【００５４】
SEC ECCインプリメンテーション
ECCインプリメンテーションは、ECCパリティ・ビットがバイト当たり計算されることを可能にするインプリメンテーションに類似。側波帯中の記憶装置（ストレージ）が制限されているので、パリティ・ビットを縮小するために、DEDなしでSECのみを行うため次の修正を行った。図13は、どのようにパリティ・ビットが8ビットのデータの例に作動するかを示す:
&#151;  P0はD1、D3、D5、D7をカバーする。
&#151;  P1はD2、D3、D6、D7をカバーする。
&#151;  P2はD4、D5、D6、D7をカバーする。
&#151;  P3はD0、D1、D2、D3をカバーする。
&#151;  P4はデータ・ビットをすべてカバーする。
【００５５】
次のテーブルは、任意の1ビットエラーに起因するシンドロームを示す。シンドローム[4:0]は、予期および実際のパリティ・ビットをXORすることにより作成される。このアルゴリズムでは、2ＮビットをカバーするのにN+2のパリティ・ビットを要求するのが好ましい。128バイト(210ビット)のＥＣＣワードについては、12のパリティ・ビットを要求するのが好ましい。
【表１】
2008511072.tif 000002
【００５６】
12-ビット・パリティー方程式
下記は、1024ビット(すべての1のECCワードはすべての1のパリティ・ビットに帰着すべきである)のECCワードに好ましくは要求される12のパリティー方程式である:
&#151;  P0=!XOR(D1,D3,D5，．．．，D1023)
&#151;  P1=!XOR(D2-D3,D6-D7，．．．，D1022-D1023)
&#151;  P2=!XOR(D4-D7,D12-D15，．．．，D1020-D1023)
&#151;  P3=!XOR(D8-D15,D24-31，．．．，D1016-D1023)
&#151;  P4=!XOR(D16-D31,D48-D63，．．．，D1008-D1023)
&#151;  P5=!XOR(D32-D63,D96-127，．．．，D992-D1023)
&#151;  P6=!XOR(D64-D127,D192-D255，．．．，D960-D1023)
&#151;  P7=!XOR(D128-D255,D384-D511，．．．，D896-D1023)
&#151;  P8=!XOR(D256-D511,D768-D1023)
&#151;  P9=!XOR(D512-D1023)
&#151;  P10=!XOR(D0-D511)[0091]
&#151;  P11=!XOR(D0-D1023)
【００５７】
スマートECCの更新
スマートECCの更新が、パリティ・ビットがECCワードにつき二度書込まれることを可能にするのが好ましい。この特性は、部分的なページ書き込みをECCによってカバーするのを可能にする。パリティ・ビットの第一セットは、新しいデータの第一書き込み中にECCワードに書込まれる。新しいデータを備えたどんな後の書き込みも、パリティ・ビットの第1セットを無効にするのが好ましい。ページが「クローズ」中の時、パリティ・ビットの第2セットが書込まれる。ページは、ECCワードの最後のオクトバイト中の任意のビットがプログラムされるとき、ページが「クローズ」されたと見なされる。このモデルは、部分的なページ書き込みを要するFAT構造とうまく作動する。
【００５８】
新しいパリティ・ビットが既存の有効なパリティ・ビットと一致しない場合、スマートECCフラグおよびパリティ・ビットが更新されるだけであるのが好ましい。同じデータ(一致するパリティ・ビットに帰着する)の書換えは、スマートECCフラグの状態を変更しない。
【００５９】
【表２】
2008511072.tif 000003
上記に示すのは、未だプログラムが済んでいないデータのワード用ECCのパリティ(parity)、未使用(unused)、および有効(valid)ビットである。有効(valid)および未使用(unused)ビットは、冗長性用に各々二回複製される。この状態でParity0  が有効であるので、ECCは読み取りによって可能になる。Valid0が1である場合、Unused0の値が何であるかは構わないことに注意すること。(これはParity1ビットでは真実ではない。)
【００６０】
上記のパリティ(parity)、未使用(unused)、および有効(valid)ビットの数は、32ビット、つまり4Bである。1ページ当たり4箇の128B
ECCワードで、1ページ当たり16BのパリティーのECCパリティ(parity)、 未使用(unused)、および有効(valid)ビットがある。
【００６１】
【表３】
2008511072.tif 000004
上記に示すのは、一度プログラムされたデータのワード用ECCのパリティ(parity)、未使用(unused)、および有効(valid)ビットである。Unused0が以前1であったので、書込み中のデータを反映するようにParity0をプログラムできることを分かっていた。Parity0が書込まれたことを示すように、Unused0も0にプログラムされた。この状態で、Parity0がまだ有効であるので、ECCは、読み取りの間イネーブル（可能に）される。    
【００６２】
【表４】
2008511072.tif 000005
上記に示すのは、そのParity0ビットが、Valid0を0にプログラムしたことで無効にされたデータのワード用ECCのパリティ(parity)、未使用(unused)、および有効(valid)ビットである。データのワードへの第1の書き込み後、既にUsed0が0にプログラムされていた場合、後の書き込みはParity0ビットを無効にする。この状態で、Parity0が無効にされていて、Parity1がまだ更新されていなかったので、ECCは読み取りによって不能（ディセーブル）となる。
【００６３】
【表５】
2008511072.tif 000006
上記に示すのは、そのParity1ビットが書込まれたデータのワード用ECCのパリティ(parity)、未使用(unused)、および有効(valid)ビットである。これが起きるのは、ワードの最後のオクトバイト中の任意のビットがプログラムされ、Unused1が以前に1にあった場合である。Unused1も、Parity1が書込まれたことを示すよう、0にプログラムされる。大抵の場合、最後のオクトバイトがプログラム中の場合、これがデータのワードへの最後の部分的ページ書き込みである。この状態で、Parity1が有効で書込まれているので、ECCは読み取りによって可能イネーブル）になる。（Parity0ビットと異なり、Unused1フラグはパリティ・ビットが有効であるために0でなければならない。)        
【００６４】
【表６】
2008511072.tif 000007
上記に示すのは、そのParity1ビットガ、Valid1を0にプログラムしたことで無効にされたデータのワード用ECCのパリティ(parity)、未使用(unused)、および有効(valid)ビットである。Parity1ビットが書込まれた後、データのこのワードに後の書き込みがある場合、Parity1ビットを無効にしなければならない。この状態で、Parity0もParity1も有効ではないので、ECCは読み取りによって不能にされる。
【００６５】
冗長な未使用および有効なフラグのデコード
Unused[1:0] フラグおよびValid[1:0]フラグは、パリティ・ビット用に三つの異なの状態をエンコードするのに使用される。次のテーブルはこれらの状態を列記する。
【表７】
2008511072.tif 000008
【００６６】
2008511072.tif 000009
しかしながら、冗長ビットのうちの1つにビット・エラーがある場合、フラグ当たり2個のビットがあるだけなので、冗長ビットのうちのどの1箇が誤りかを決めることは困難である。このために、パリティー状態を決定するためにUnused[1:0]およびValid[1:0]の両方を常に使用する。次のテーブルは、これらのビット中の0の総数を数えることにより、デコードが行われることを示す。
【００６７】
【表８】
2008511072.tif 000010
フラグ当たり4個の冗長ビットの代わりに2個使用することは、冗長性のロバスト性を減少させてメモリの中で使い果たされるビットの数を減少させる。
【００６８】
特別の場合- PAGE 0
TF_SECC_PAGE0_TB='1='の場合、メモリのPAGE 0の取り扱いは、わずかに異なる。通常は、ワードの最後のオクトバイト中の任意のビットがプログラムされる場合に限り、Parity1ビットを書込むことができる。この特別の場合では、この制限が撤廃される。したがって、一旦Parity0ビットが使用されれば、次の書き込みは常に使用されているParity1ビットに帰着する。
【００６９】
トリム・ヒューズ・ビット
ECCロジックに影響するトリム・ヒューズ・ビットが３個ある:
TF_ECC_DISABLE_TB
【００７０】
TF_ECC_DISABLE_TB='1’の場合、ECCロジックは無効になり、ホストは各ページの側波帯中のバイト512-527へ完全な読み取りと書き込みアクセスを持つ。
【００７１】
TF_ECC_DISABLE_TB='0’の場合ECCロジックは可能になり、また、各ページの側波帯中のバイト512-527は、LBECCおよびSmartECC更新を実行するのに使われる様々なECCビットを保存するために使用される。側波帯エリアへなされたどんなホストの書き込みも廃棄される。側波帯エリアからのどんなホストの読み取りも不定データを返す。
【００７２】
TF_SMARTECC_DISABLE_TB
TF_SMARTECC_DISABLE_TB='1’の場合、Smart ECC更新ロジックは無効（ディセーブル）にする。TF_SMARTECC_DISABLE_TB='0’の場合、Smart
ECC更新ロジックが可能にする。(TF_ECC_DISABLE_TBも'0’にセットしければならない。
【００７３】
TF_SECC_PAGE0_TB
TF_SECC_PAGE0_TB='0’の場合、すべてのページは同じSmart ECロジックを使用する。TF_SECC_PAGE0_TB='1’の場合、pageの取り扱いは、Smart
EC更新ロジックに関して、すべての他のページとは異なる。
【００７４】
メモリマップ
すべてのECCのパリティ(parity)、 未使用(unused)、および有効(valid)ビットは、各ページの側波帯中のバイト512-527に存在する。
以下に4つのＥＣＣワードすべてのビットがどのように配列されるかを示す。
【表９】
2008511072.tif 000011
【００７５】
以下にビットが一個のECCワード(例はワード0)に対してどのように配列されるかを示す。
【表１０】
2008511072.tif 000012
【００７６】
テスト
ECCロジックのテストはDAMモードを使用して行うことができる。DAMモードが書き込みか読み取りのどちらかのトランザクション用に可能になっている場合は、データはページ・レジスタとメモリ配列間で転送されない。ECCロジックをテストするのには、TF_ECC_DISABLE_TBビットをデアサート(deassert)しなければならない。次にこのテストをより詳細に記述する。
【００７７】
ECC修正
1.  DAMモードを可能にし、ECCを可能にする。
2.  書き込みデータの512バイトおよびECCデータの16バイトでDATAINコマンドを出す。
3.  READコマンドを出す。(データをリードバック出来る前に、ECCのスクラッビングがなされるので、チップは使用中になる。)
4.  データの512バイトが予想通りであることを確認する。(シングル・ビット・エラーがPRに書き込まれた場合は、エラーが修正されたことを確認する。)
【００７８】
ECC生成
1.  DAMモードを可能にし、ECCを可能にする
2.  書き込みデータの512バイトでDATAINコマンドを出す。
3.  PROGコマンドを出す。(これによってECCの生成された16バイトが、PRに書込まれる。)
4.  READコマンドを出す。(書き込みデータの以前の512バイトは、ECCデータの生成された16バイトと一緒にリードバックされる。)
5.  16ECCバイトが正確に生成されていることを確認する。
【００７９】
上記のように、ECC使用にたいする取り組み方の一つは、8B(オクトバイト)ECCワーズ使用するが、その際ECCシンドロームは1Bの幅がある。これは、1度のインプリメンテーションで12.5%のオーバーヘッドを作り、総ダイ・サイズの約9〜10%を占める。この取り組みでは、一つの、シングル・ビット修正/ダブルビット-検知アルゴリズムを使用するするが、これは72ビットのデータをパラレルで処理する。これに反して、大きなブロックECCは、シンドローム・記憶装置（ストレージ）のオーバーヘッドを減らすのに十分大きいECCワードを使用する。上記のように、さらにオーバーヘッドを減らすのに、現在は、シングル−ビット−検知のみのアルゴリズムを使用することが好ましい。このアルゴリズムはデータを逐次処理する。
【００８０】
ECCシンドローム記憶装置（ストレージ）には様々なオプションがある。一つのオプション(オプション1)では、ECCシンドロームビットを拡張ページ・エリアに保存する。現在好ましい一つのアーキテクチャーは、拡張ページに18B（16Bのデータと2BのECCシンドローム・ビット)割り付ける。このオプションでは、トリム・ヒューズ・ビットまたはピンを使用して、次のことができる：(1)
内部ECC生成を拡張ページ・スペースに保存されたシンドロームと使い、ユーザが拡張ページ・スペースにアクセスすることができない；および(2) 内部ECC生成をバイパスし、ユーザが拡張ページ・スペースにアクセスし、かつ自己のECCアルゴリズムを使用することを可能にする。別のオプション(オプション2)では、ECCシンドロームビットを専用スペースに保存する。ブロック・サイズによっては、これは、CRスペースのうちの幾分かを使用することもある。
【００８１】
部分的ページ書き込みに書込める最低量はECCワードサイズと等しく、現在の好ましい態様中では目下8Bにセットされている。いくつかのオプションがある。オプション1では、メモリ装置が部分的ページ書き込みを認識し、そのページのECCを不能にする。このオプションには下位の互換性問題はないが、部分書き込み後のデータ保全が危険にさらされる。オプション2は、N回用書換えECC機能を加えたオプション1と同じである。メモリ装置は部分的書き込みを認識し、以前のECCシンドロームを無効にし、新しい位置に新しいシンドロームを書込む程スマートである。128Bおよびそれ以上という大きなブロック・サイズを持ち、これで、ブロック当たり二〜三回の書換え用に十分な記憶機能を提供できる。より複雑になるが、これは従来の解決法より改善されている。オプション3はスマートECCシンドロームの更新を提供する。ECCワードへなした第1の書き込み時に、シンドロームが書込まれる。ECCワードへなした第２の書き込みはシンドロームを無効にし、データはそのECC保護を解くであろう。次いでECCワードに付加後、それが完全に書込まれると、新しい(かつ究極の)シンドロームが作成され、データは以後永久に保護される。唯一の無保護なエリアは、ECCワードで完全に満たされていない少数の動的エリアであるので、これでDPMのリスクは劇的に縮まる。オプション4は冗長列の修復能力を加えたオプション2と同じである。オプション2でN回書換え後、N+1回目の書換えで列の修復が始動され、書換えカウントがリセットする。
【００８２】
別の代案では、読込み後データ・スクラッビングのテクニックが提供される。このテクニックでは、読取りの間、前方ストレスが妨害の主な原因である場合、ECC修正ロジックの状態をチェックし、状態が悪くなると直ちに、悪いビットを識別できる。その後、既存のCRスキームを使用して修理することができる。もし二つのビットが同時に悪くなるのでなければ、このスキームは読み取り妨害を追及するのに非常に有効な方法になる。
【図面の簡単な説明】
【００８３】
【図１】好ましい態様のホスト装置およびメモリ装置のブロックダイヤグラムである。
【図２】好ましい態様のコントローラのブロックダイヤグラムである。
【図３】好ましい態様のメモリマップである。
【図４】好ましい態様のスマート・フィルタ・ロジックのオペレーションを図示するフローチャートである。
【図５】好ましい態様の32バイトファイル・リスティング構造の図表である。
【図６】一態様のFATテーブルの図表である。
【図７】図6のFATテーブルに関連するファイル・リスティングの例である。
【図８】好ましい態様のスマート・フィルタ・オペレーションを例証する。
【図９】好ましい態様のスマート・フィルタ・オペレーションを例証する。
【図１０】側波帯エリアがリマッピング情報を保存する場合にデータを読み取るための一態様の方法のフローチャートである。
【図１１】好ましい態様の動的リマッピング割付け方法のフローチャートである。
【図１２】好ましい態様のリマッピング例の中で使用されるメモリマップである。
【図１３】好ましい態様のパリティ・ビットのレイアウトの例証である。
【図１】
2008511072.tif 000013
【図２】
2008511072.tif 000014
【図３】
2008511072.tif 000015
【図４】
2008511072.tif 000016
【図５】
2008511072.tif 000017
【図６】
2008511072.tif 000018
【図７】
2008511072.tif 000019
【図８】
2008511072.tif 000020
【図９】
2008511072.tif 000021
【図１０】
2008511072.tif 000022
【図１１】
2008511072.tif 000023
【図１２】
2008511072.tif 000024
【図１３】
2008511072.tif 000025