(57)【要約】  フラッシュメモリデバイスの外部で実装されるデータスクランブリング手法を開示する。これは、フラッシュデバイスの内部で作用するフラッシュメモリオンチップコピー機能と協調的に使用できるため、高性能コピー操作をサポートする。ヘッダや制御構造等、フラッシュに記憶されるデータはすべてスクランブルできる。停電に耐えるうえ、データを逆スクランブルし再度スクランブルせずともフラッシュの内部でデータを再配置できる等、堅牢なファイルシステム操作を達成できる。ハードウェアに基づく典型的なソリューションの場合はシステム全体の性能におよぶ影響が皆無かごく僅かであり、非常に低い増分コストでシステム全体の信頼性を向上させることができる。このデータスクランブリング手法では、望ましくはシードスクランブル鍵の決定にあたって物理アドレスではなく、論理ブロックアドレスや論理ページアドレス等の論理アドレスを使用する。
2011508363.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリに情報を記憶する方法であって、
シード鍵とデータグループの論理ページアドレスとに基づき開始鍵を決定するステップと、
前記開始鍵に対応する確定的鍵系列を用いてデータグループをランダム化するステップと、
前記ランダム化されたデータグループを不揮発性メモリの物理ページに記憶するステップと、
を含む方法。
【請求項２】
請求項１記載の方法において、
前記論理ページアドレスの認識情報なしに開始鍵を決定するためのさらなる情報を、前記不揮発性メモリの物理ページに記憶するステップをさらに含む方法。
【請求項３】
請求項２記載の方法において、
前記物理ページ内の複数の場所に前記さらなる情報を記憶するステップをさらに含み、これにより、開始鍵の決定にあたって、たとえ１つの場所が壊れていても別の場所は引き続き読み出すことができる方法。
【請求項４】
請求項２記載の方法において、
前記決定するステップは、
論理ページオフセット値に基づきスクランブル鍵系列のインデックスを決定するステップと、
前記シード鍵に対応する反復Ｍビットスクランブル鍵系列の中で前記開始鍵を識別するためにインデックスを使用するステップと、
を含む方法。
【請求項５】
請求項２記載の方法において、
前記開始鍵に対応する前記確定的鍵系列を用いてランダム化された情報として前記さらなる情報を記憶するステップをさらに含む方法。
【請求項６】
請求項２記載の方法において、
論理ページオフセット値に関連するページコードを決定するステップと、
前記論理ページオフセット値と１：１に対応するマッピング済みページオフセットコードを生成するため、前記開始鍵に対応する前記確定的鍵系列を用いてページコードをランダム化するステップと、
前記不揮発性メモリの物理ページのページヘッダに前記さらなる情報として前記マッピング済みページオフセットコードを記憶するステップと、
をさらに含む方法。
【請求項７】
請求項６記載の方法において、
電源投入時に前記不揮発性メモリを初期化するステップをさらに含み、
前記初期化するステップは、
マッピング済みページオフセットコードを含むランダム化メモリページヘッダを読み出すステップと、
前記マッピング済みページオフセットコードから対応するページオフセット値を抽出するステップと、
前記ページオフセット値と前記シード鍵とに基づき開始鍵を決定するステップと、
前記開始鍵に対応する確定的スクランブル鍵系列を用いて前記メモリページを読み出しかつ逆ランダム化するステップと、
を含む方法。
【請求項８】
請求項７記載の方法において、
前記シード鍵と第２のデータグループの物理ページアドレスとに基づき第２の開始鍵を決定するステップと、
前記第２の開始鍵に対応する確定的鍵系列を用いて前記第２のデータグループをランダム化するステップと、
前記ランダム化された第２のデータグループを前記不揮発性メモリの第２の物理ページに記憶するステップと、をさらに含み、
前記初期化するステップは、開始鍵が論理ページアドレスに基づくブロックと、開始鍵が物理ページアドレスに基づくブロックとで行われ、
前記第２のデータグループは、フラッシュファイルシステムの制御ブロックに対応する方法。
【請求項９】
請求項１記載の方法において、
前記ランダム化されたデータグループをＥＣＣ符号化するステップと、非ランダム化ＥＣＣ冗長バイトを前記不揮発性メモリに記憶するステップと、をさらに含む方法。
【請求項１０】
請求項２記載の方法において、
前記不揮発性メモリに書き込まれる全ページヘッダ情報をランダム化するステップをさらに含む方法。
【請求項１１】
請求項１０記載の方法において、
論理ページアドレスではなく物理ページアドレスを用いてフラッシュファイルシステムの制御ブロックをランダム化するステップと、
所定のデフォルトシード鍵を用いて前記フラッシュファイルシステムのブートブロックをランダム化するステップと、
をさらに含む方法。
【請求項１２】
請求項１記載の方法において、
前記確定的鍵系列は各々ＭビットからなるＭ個の独立したスクランブル鍵を含み、それぞれのスクランブル鍵Ｎ（ＫｅｙＮ）は、事前定義のシード鍵（Ｋｅｙ０）のＮビット環状循環に対応し、
前記ランダム化するステップは、確定的Ｍビットスクランブル鍵系列を用いるビット単位ＸＯＲ操作を含む方法。
【請求項１３】
請求項１２記載の方法において、
確定的系列内で連続する各スクランブル鍵は、先行するスクランブル鍵の単一ビット循環である方法。
【請求項１４】
請求項１２記載の方法において、
前記確定的系列内で連続する各スクランブル鍵は、ビットの計算値によるシード鍵のビット単位循環であり、
前記連続する鍵のビットの計算値は、現在の鍵に依存する方法。
【請求項１５】
不揮発性メモリにデータを記憶する方法であって、
メモリページの論理ブロックアドレスを用いてページオフセット数を決定するステップと、
シード鍵と前記ページオフセット数とに基づき開始鍵を決定するステップと、
前記開始鍵に対応する確定的スクランブル鍵系列を用いてページデータをスクランブルするステップと、
前記ページオフセット数に対応する識別子を前記不揮発性メモリの物理ページのヘッダに記憶するステップと、
前記スクランブルされたページデータを前記物理ページに記憶するステップと、
を含む方法。
【請求項１６】
請求項１５記載の方法において、
前記不揮発性メモリに書き込まれる全ページヘッダ情報をスクランブルするステップをさらに含み、
確定的鍵系列は各々ＭビットからなるＭ個の独立したスクランブル鍵を含み、それぞれのスクランブル鍵Ｎ（ＫｅｙＮ）は、事前定義のシード鍵（Ｋｅｙ０）のＮビット環状循環に対応し、
前記識別子は、反復Ｍビットスクランブル鍵系列の中で前記開始鍵を識別するインデックスを含む方法。
【請求項１７】
請求項１６記載の方法において、
前記スクランブルするステップは、確定的Ｍビットスクランブル鍵系列を用いるビット単位ＸＯＲ操作を含む方法。
【請求項１８】
装置であって、
不揮発性メモリと、
メモリコントローラであって、
シード鍵とデータグループの論理ページアドレスとに基づき開始鍵を決定し、
前記開始鍵に対応する確定的鍵系列を用いてデータグループをランダム化し、
前記ランダム化されたデータグループを前記不揮発性メモリの物理ページに記憶するように構成されたメモリコントローラと、
を備える装置。
【請求項１９】
請求項１８記載の装置において、
前記不揮発性メモリは、前記メモリコントローラから独立した別個の集積回路を備える装置。
【請求項２０】
請求項１８記載の装置において、
前記メモリコントローラは、前記論理ページアドレスの認識情報なしに前記開始鍵を決定することができるさらなる情報を、前記不揮発性メモリの前記物理ページに記憶するようにさらに構成された装置。
【請求項２１】
請求項２０記載の装置において、
前記メモリコントローラは、
論理ページオフセット値に基づきスクランブル鍵系列のインデックスを決定し、
前記シード鍵に対応する反復Ｍビットスクランブル鍵系列の中で前記開始鍵を識別するためにインデックスを使用するようにさらに構成された装置。
【請求項２２】
請求項２０記載の装置において、
前記開始鍵に対応する前記確定的鍵系列を用いてランダム化された情報として前記さらなる情報が記憶される装置。
【請求項２３】
請求項２０記載の装置において、
前記メモリコントローラは、
論理ページオフセット値に関連するページコードを決定し、
前記論理ページオフセット値と１：１に対応するマッピング済みページオフセットコードを生成するため、前記開始鍵に対応する前記確定的鍵系列を用いて前記ページコードをランダム化し、
前記不揮発性メモリの前記物理ページのページヘッダに前記さらなる情報として前記マッピング済みページオフセットコードを記憶するようにさらに構成された装置。
【請求項２４】
請求項２３記載の装置において、
前記メモリコントローラは、電源投入時に前記不揮発性メモリを初期化するようにさらに構成され、
前記初期化することは、
マッピング済みページオフセットコードを含むランダム化メモリページヘッダを読み出すことと、
前記マッピング済みページオフセットコードから対応するページオフセット値を抽出することと、
前記ページオフセット値と前記シード鍵とに基づき開始鍵を決定することと、
前記開始鍵に対応する確定的スクランブル鍵系列を用いてメモリページを読み出しかつ逆ランダム化することと、
を含む装置。
【請求項２５】
請求項２４記載の装置において、
前記メモリコントローラは、
前記シード鍵と第２のデータグループの物理ページアドレスとに基づき第２の開始鍵を決定し、
前記第２の開始鍵に対応する確定的鍵系列を用いて前記第２のデータグループをランダム化し、かつ
前記ランダム化された第２のデータグループを前記不揮発性メモリの第２の物理ページに記憶するようにさらに構成され、
前記初期化することは、開始鍵が論理ページアドレスに基づくブロックと、開始鍵が物理ページアドレスに基づくブロックとで行われ、
前記第２のデータグループは、フラッシュファイルシステムの制御ブロックに対応する装置。
【請求項２６】
請求項１８記載の装置において、
前記ランダム化されたデータグループはＥＣＣ符号化され、かつ非ランダム化ＥＣＣ冗長バイトは前記不揮発性メモリに記憶される装置。
【請求項２７】
請求項２０記載の装置において、
前記不揮発性メモリに書き込まれる全ページヘッダ情報は、ランダム化される装置。
【請求項２８】
請求項２７記載の装置において、
フラッシュファイルシステムの制御ブロックは、論理ページアドレスではなく物理ページアドレスを用いてランダム化され、
前記フラッシュファイルシステムのブートブロックは、事前定義のデフォルトシード鍵を用いてランダム化される装置。
【請求項２９】
請求項１８記載の装置において、
前記確定的鍵系列は、各々ＭビットからなるＭ個の独立したスクランブル鍵を含み、それぞれのスクランブル鍵Ｎ（ＫｅｙＮ）は、所定のシード鍵（Ｋｅｙ０）のＮビット環状循環に対応する装置。
【請求項３０】
請求項２９記載の装置において、
前記ランダム化することは、確定的Ｍビットスクランブル鍵系列を用いるビット単位ＸＯＲ操作を含み、
確定的系列内で連続する各スクランブル鍵は、ビットの計算値によるシード鍵のビット単位循環である装置。
【請求項３１】
請求項３０記載の装置において、
前記連続する鍵のビットの計算値は現在の鍵に依存し、また、ページオフセット値と対応する連続するワードのＤワードオフセット値にも依存する装置。
【請求項３２】
請求項１８記載の装置において、
前記確定的鍵系列は、前記開始鍵に対応する開始値を有する線形フィードバックシフトレジスタ（ＬＦＳＲ）によって生成される擬似ランダム鍵系列を含む装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にはフラッシュメモリ記憶システムに関し、より具体的には、フラッシュメモリに書き込まれるデータをスクランブルすることで、特定のデータパターンに左右される感受性と妨害効果の緩和に役立つシステムに関する。
【背景技術】
【０００２】
「フラッシュファイルシステム」はフラッシュメモリデバイスで磁気ディスクのようにデータを記憶し、操作するためのシステムである。フラッシュファイルシステムにより、アプリケーションやオペレーティングシステムは物理アドレスではなく論理アドレス（仮想アドレスと呼ばれることもある）を使ってフラッシュメモリデバイスとやり取りできる。ソフトウェアアプリケーションと物理的メモリシステムとの中間にあるソフトウェア層は、論理アドレスと物理アドレス間でマッピングを行う。いずれもその全体が本願明細書において参照により援用されている、Ban の米国特許第５，４０４，４８５号（特許文献１）、Ban の米国特許第５，９３７，４２５号（特許文献２）、ならびにLasserの米国特許第６，５９１，３３０号（特許文献３）には、論理−物理アドレスマッピングを実装するシステムが記載されている。
【０００３】
ＮＡＮＤフラッシュメモリは本質的に特定のデータパターンの影響を受けやすい。例えば、同一ビット線上にある多数のセルを同じデータ状態までプログラムしたり、同一ワード線上にある多数のセルを同じデータ状態までプログラムしたりすると、プログラムディスターブ現象が起こり得るので、その結果セルの電荷配分が変化し、１つ以上のセルが別のデータ状態にずれるおそれがある。フラッシュメモリへ頻繁に書き込まれるビットパターンにおいて、特に制御ブロック等、フラッシュファイルシステム内の特定のブロックへ書き込まれるビットパターンでは、そのような一定の反復データパターンは珍しくない。このような制御ブロックは、例えば論理−物理アドレスのマッピング情報や種々のデータブロックに関する情報をファイルシステムで把握するために使われる。ときには数行のワード線を特定のデータ状態までプログラムする場合でさえ、このようなディスターブ現象が生じ得る。「マルチレベルセル」（ＭＬＣ）アレイとも呼ばれる１セル当たり複数のビットを記憶するメモリアレイ（ＭＢＣアレイ）では特に、ディスターブ現象等の現象が問題となり、特定のユーザデータパターンに応じて１つ以上のセルで読み出しエラーが発生する可能性がある。その全体が本願明細書において参照により援用されているChenらの米国特許第７，０２３，７３９号（特許文献４）には、ある種のプログラムディスターブ現象が記載されている。
【０００４】
この問題に対処するため、フラッシュデバイスへのプログラミングに先立ちシステムレベルでのデータスクランブリングもしくはランダム化により、ユーザデータブロックや制御ブロックで特に問題となりやすいデータパターンを解消する手法が考案されてきた。この場合のデータのスクランブリングやランダム化とは、メモリのビット線やワード線に沿ってメモリセル状態にかかわるビットパターンを分解することを意味する。しかし、ＮＡＮＤメモリの外部で実施されるデータスクランブリング手法では、フラッシュメモリのオンチップコピー操作やコピーバック操作と適合せず、しかるべきシステム性能を達成できなくなる。オンチップコピーはある程度まとまったデータに作用し、あるひとつの物理メモリ位置から別の物理メモリ位置にかけてデータを自律的に移動するものであり、オンチップコピー操作を使わない場合よりも性能が向上し消費電力が少なくすむ。オンチップコピー操作を使用しない場合は、データをデバイスから読み出し、コンパニオンデバイス（フラッシュコントローラデバイス等）へオフチップで伝送し、ＮＡＮＤメモリの異なる物理位置に再度書き込むことになる。しかし、物理メモリアドレスに基づきスクランブルされたデータに対してオンチップコピー操作を行うと、スクランブルされたデータに意図しない新たな鍵／シードが対応付けられ、当初のデータを取り戻すために、誤った新たな鍵／シードを使用してしまい、データを正しく逆スクランブルできなくなる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第５，４０４，４８５号
【特許文献２】米国特許第５，９３７，４２５号
【特許文献３】米国特許第６，５９１，３３０号
【特許文献４】米国特許第７，０２３，７３９号
【特許文献５】米国特許第５，４３４，８２５号
【特許文献６】米国特許第６，５２２，５８０号
【特許文献７】米国特許第７，１３９，８６４号
【特許文献８】米国特許出願第１１／８０８，９０５号
【発明の概要】
【０００６】
本発明から提供されるデータスクランブリング手法はフラッシュメモリデバイスの外部で実装され、フラッシュデバイスの内部で作用するフラッシュメモリオンチップコピー機能と協調的に使用できるため、高性能コピー操作をサポートする。現代のフラッシュメモリサブシステムの多くに採用されている「フラッシュファイルシステム」はガーベッジコレクション手法を多用し、オンチップコピー機能を大いに活用している。これらの手法を例えばハードウェアベースのソリューションとして実装すれば、システム全体の性能におよぶ影響は皆無かごく僅かであり、システム全体の信頼性を向上させる費用効果的なソリューションとなる。
【０００７】
このデータスクランブリング手法では、望ましくはシードスクランブル鍵の決定にあたって物理ページアドレスではなく、論理ページアドレス等の論理アドレスを使用する。論理ページアドレスはデータの論理ブロックアドレスから決定されるため、メモリでスクランブルされるデータの物理的配置を制限しない。その結果、オンチップコピー操作を使用できる。オンチップコピー操作によってデータが再配置されてもデータの論理ページアドレスは変化しないから、データの逆スクランブルにあたっては同じシードスクランブル鍵を使用できる。ブロックの特定部分でユーザデータをスクランブルするには、このシードスクランブル鍵を使用する。しかし、１本のワード線にわたってさらなるデータが書き込まれ、ビット線に沿ってさらなるデータが書き込まれるときには、データ状態をあまねく「ランダム化」するためにスクランブル鍵が確定的に変更される。
【０００８】
常に停電に耐え、フラッシュメモリを再初期化し、そこに記憶された種々ブロックのマッピングを再現し、データを逆スクランブルして読み返し、データ種別とオンチップコピー操作によるデータ再配置を特定する等、本発明は堅牢なファイルシステム操作も提供する。ヘッダや制御構造等、フラッシュに記憶されるデータはすべてスクランブルできる。初期化のときにスクランブルされたデータからスクランブル鍵そのものを抽出できるようにするため、ページヘッダにはスクランブル鍵の情報を記憶できる。一部の実施形態では、初期化とデバッグ作業を支援するために異なるスクランブリング手法を用いて制御構造の中で情報をスクランブルする。
【０００９】
ある実施形態では、ＸＯＲロジックと確定的数のスクランブル鍵による単純な方法を用いてハードウェア、ファームウェア、またはソフトウェアにより効果的にデータのスクランブリングを果たすことができる。所定の初期スクランブル鍵シードをビット単位で循環させ、周回する一連のスクランブル鍵を作り、各々のスクランブル鍵には鍵番号を割り当てる。開始鍵番号（ＳＫＮ）と呼ぶことができる、論理データグループに使用する最初のスクランブル鍵番号からスクランブル鍵（「スクランブラ鍵」）を導き出すことができる。
【００１０】
ＳＫＮは論理グループメモリアドレスに関連付け、データのスクランブリングに使用できる。ＳＫＮそのものとその他のヘッダ（すなわち、オーバーヘッド）情報も、ユーザデータビットと同じ方法でスクランブルできる。いくつかの実施形態では、各メモリトランザクションが始まるときにフラッシュコントローラファームウェア（ＦＷ）かシステムホストソフトウェアでＳＫＮを設定するだけでよい。トランザクション中は、さらなるデータグループの読み書きにともない後続のスクランブル鍵を自動的に生成するようにスクランブラを構成できる。
【００１１】
スクランブル済みＳＫＮビットとスクランブル済みユーザデータビットにはＥＣＣ符号化を適用でき、フラッシュメモリに記憶できる。ＥＣＣの生成／訂正は、スクランブリング／逆スクランブリングの前でも後でもよい。ヘッダとデータ部分はスクランブルされるが、ＥＣＣのパリティバイトはスクランブルすることもでき、スクランブルしないでおくこともできる。
【００１２】
いくつかの実施形態では、スクランブル鍵生成メカニズムとデータスクランブリング手法について予備知識を有するフラッシュコントローラファームウェアかシステムホストソフトウェアで（ａ）データスクランブラ動作を模倣でき、（ｂ）所望のスクランブル済みＳＫＮを論理アドレスに順方向マッピングする表（例えば、３２項目）を効率的に作成でき（例えば、デフォルトシードを使用）、（ｃ）論理アドレスから所望のスクランブル済みＳＫＮへ逆方向マッピングする表を効率的に作成できる。
【００１３】
典型的なシステムはシステム初期化のときに以下のようにしてフラッシュメモリに記憶されたデータの種別と論理グループ位置を特定できる。（ａ）フラッシュコントローラファームウェア（ＦＷ）かシステムホストソフトウェアで所望のスクランブル済みＳＫＮの順方向・逆方向マッピング表を生成し、（ｂ）ハードウェアスクランブラを無効にし、各メモリブロックの最初のセクタをスキャンし、このメモリブロックに記憶された最初のスクランブル済みＳＫＮを抽出し（例えば、各セクタの最初の数バイト内）、（ｃ）抽出したスクランブル済みＳＫＮを使用し、フラッシュコントローラファームウェアかシステムホストソフトウェアで逆方向マッピング表を調べてスクランブルがかかっていないＳＫＮを確認し、（ｄ）ハードウェアスクランブラを有効にし、最初のセクタを再び読み出し、スクランブルがかかっていないＳＫＮを鍵として使用して逆スクランブルし（あるいはＦＷでＳＫＮを使用し、ヘッダの逆スクランブルを実行し、データは読み出さない）、（ｅ）メモリブロック種別を識別し、フラッシュコントローラＲＡＭに記憶する。
【００１４】
システム初期化の後には、フラッシュコントローラファームウェアかシステムホストソフトウェアで論理データグループを記憶する物理メモリ位置の割り当てを制御し、スクランブリングと逆スクランブリングの鍵／シードとして論理グループアドレスを使用し、所望のスクランブル済みＳＫＮの順方向マッピング表を使用し、論理グループに関連するスクランブル済みＳＫＮをフラッシュメモリに記憶できる。フラッシュコントローラファームウェアかシステムホストソフトウェアでは、ユーザデータビットを逆スクランブルするための鍵／シードとして論理グループアドレスを使用して読み出し操作を実行できる。論理セクタデータは、オンチップコピー操作によりフラッシュメモリ上で物理的に随時移動できる。オンチップコピーが行われるとコントローラがそれに気づき、データを再度マッピングする。
【００１５】
本発明は、一態様において、不揮発性メモリに情報を記憶する方法を提供し、この方法は、典型的な実施形態において、シード鍵とデータグループの論理ページアドレスとに基づき開始鍵を決定することと、開始鍵に対応する確定的鍵系列を用いてデータグループをランダム化することと、ランダム化されたデータグループを不揮発性メモリの物理ページに記憶することとを含む。
【００１６】
本発明は、別の態様において、不揮発性メモリに情報を記憶する方法を提供し、この方法は、典型的な実施形態において、メモリページの論理ブロックアドレスを用いてページオフセット数を決定することと、シード鍵とページオフセット数とに基づき開始鍵を決定することと、開始鍵に対応する確定的スクランブル鍵系列を用いてページデータをスクランブルすることと、ページオフセット数に対応する識別子を不揮発性メモリの物理ページのヘッダに記憶することと、スクランブルされたページデータを物理ページに記憶することとを含む。
【００１７】
本発明は、別の態様において、装置を提供し、この装置は、典型的な実施形態において、不揮発性メモリとメモリコントローラとを備え、このメモリコントローラは、シード鍵とデータグループの論理ページアドレスとに基づき開始鍵を決定し、開始鍵に対応する確定的鍵系列を用いてデータグループをランダム化し、かつランダム化されたデータグループを不揮発性メモリの物理ページに記憶するように構成される。
【００１８】
本発明の方法を、ソフトウェアにより、ハードウェアにより、あるいは双方の組み合わせにより実装することができる。かかるソフトウェアは、データを読み書きするホストコンピュータ上で実行するソフトウェアであることができ（例えば、記憶デバイスをサポートするソフトウェアデバイスドライバ内）、あるいはホストコンピュータとやり取りしメモリ媒体を制御するメモリコントローラの中で実行するファームウェアであることができる。かかるハードウェアを、メモリコントローラの中かメモリ媒体の中で実装することができ、メモリコントローラとメモリ媒体が２つの別々のダイ上にあるか、共通のダイ上にあるかは問わない。前述した構成と変形例はどれも本発明の範囲内にある。
【００１９】
本発明は特許請求の範囲によって規定され、前述した概要は本発明の紹介を助けるものであり、限定するものとして解釈すべきではない。また、ここで説明する発明概念と実施形態は単独での使用と様々な組み合わせでの使用が具体的に考えられる。したがって、ここで説明しない他の実施形態、変形例、改良が必ずしも本発明の範囲から除外されるわけではない。
【００２０】
添付の図面を参照することにより本発明をより良く理解でき、当業者にとっては本発明の数ある目的、特徴、利点が明らかになるはずである。
【図面の簡単な説明】
【００２１】
【図１】先行技術と標示された、ＮＡＮＤメモリアレイの回路図である。
【図２Ａ】１セル当たり単一ビットのメモリと１セル当たり複数ビットのメモリとにプログラムされるメモリ状態を示す図である。
【図２Ｂ】１セル当たり単一ビットのメモリと１セル当たり複数ビットのメモリとにプログラムされるメモリ状態を示す図である。
【図２Ｃ】１セル当たり単一ビットのメモリと１セル当たり複数ビットのメモリとにプログラムされるメモリ状態を示す図である。
【図３】図３Ａは本発明によるスクランブラブロックを概念的に示す図であり、図３Ｂは本発明による逆スクランブラブロックを概念的に示す図である。
【図４】典型的な８ビットスクランブル鍵系列の図である。
【図５】典型的な３２ビットスクランブル鍵系列を示す表である。
【図６】異なるページのワードごとにかつ異なるページごとに使用するスクランブル鍵が異なることを示す図である。
【図７】スクランブル鍵の中途にセクタ境界が位置する状態を示す図である。
【図８】物理ページ内の１６セクタに該当する数通りのスクランブリングパラメータの典型的な値を示す表である。
【図９】別の典型的な８ビットスクランブル鍵系列の図である。
【図１０】スクランブル鍵の中途にセクタ境界が位置する状態を示す別の図である。
【図１１】物理ページ内の４  ＥＣＣページに該当する数通りのスクランブリングパラメータの典型的な値を示す表である。
【図１２】物理ページ内の４  ＥＣＣページと３２の各物理ページにつき典型的なＳＫＮ値を示す表である。
【図１３】単一セクタＥＣＣページの場合の典型的なヘッダ形式を示す図である。
【図１４】２ＫバイトＥＣＣページの場合の別の典型的なヘッダ形式を示す図である。
【図１５】本発明の実施形態による典型的なページマッピング表である。
【図１６】本発明の実施形態による典型的なＳＫＮ表である。
【図１７】本発明の実施形態によるスクランブラの典型的な動作のフローチャートである。
【図１８】本発明の実施形態による典型的なスクランブラブロックの図である。
【図１９】スクランブルがかかっていない反復０ｘＦＦデータパターンのメモリセル状態を示す表である。
【図２０】本発明の実施形態によるスクランブリングの後、図１９の内容に対応するスクランブル済みデータのメモリセル状態を示す表である。
【発明を実施するための形態】
【００２２】
図１を参照すると、典型的なＮＡＮＤメモリアレイ１００の一部分を表す回路図が見られる。図に示された部分は、メモリセルプレーンが１つしかない二次元アレイを表す。あるいは、２つ以上のメモリセルプレーンを上下に積み重ねた三次元メモリアレイの１レベルを表す。その典型的なＮＡＮＤストリング１０２は、３２本のワード線１１１（ＷＬ０、ＷＬ１・・・ＷＬ３０、ＷＬ３１と標示）のいずれか１本によってそれぞれゲート制御される３２個の直列メモリセルトランジスタを含む。ＮＡＮＤストリング１０２はまた、ノード１１３上に伝達されるブロック選択信号ＢＳ０に従いＮＡＮＤストリングの一端をビット線１０３へ結合するブロック選択デバイス１１４を含み、さらに、ノード１１５上に伝達されるブロック選択信号ＢＳ１に従いＮＡＮＤストリングの他端を共有バイアスノード１０１へ結合する第２のブロック選択デバイス１１６を含む。
【００２３】
それぞれのＮＡＮＤストリング１０２、１０４、１０６はメモリアレイの中の同一ブロック１２４内に配置され、それぞれのビット線１０３、１０５、１０７へ結合されている。ＮＡＮＤストリングのメモリセル（ワード線のいずれか１本によりゲート制御されるメモリセル）には通常、フローティングゲート構造が採用されるか、あるいはゲートと下位チャネルとの間に電荷記憶誘電体層を採用することができ、メモリセルデバイスのしきい値電圧はプログラミングと消去によって変化させることができる。種々のブロック選択デバイス（１１４、１１６等）は一般的に、通常のＭＯＳデバイス（すなわち、プログラム不能）であるが、ある種のメモリ技術ではメモリセルデバイスと同様に製造することもできる。この典型的なＮＡＮＤアレイ１００のＮＡＮＤブロックには３２本のワード線が見られ、１６、６４、８８本等、ワード線の数は１ブロック当たり３２本以外でも可能であるが、２の整数倍に等しい数が典型的に実装される。
【００２４】
典型的なＮＡＮＤメモリセルアレイを、それぞれのビット線とワード線との交差点によって表わされるメモリセルを有するように一般化することができる。従来、各メモリセルに１ビットの情報を記憶し、２通りのメモリセル状態をサポートすることによって実現される。ひとつは論理「０」に相当する状態であり、もうひとつは論理「１」に相当する状態である。多くの場合は、セルのチャネル（セルのトランジスタのソースエレメントとドレインエレメントとを結ぶ部分）上にフローティングゲートを設け、さらにこのフローティングゲートの中に記憶される電荷の量に２つの有効状態を対応させることにより、２つの状態を実装することができる。通常、一方の状態でフローティングゲートの電荷はゼロで、消去後の書き込みがなされていないセルの初期状態であり（通常は状態「１」と定義される）、他方の状態ではある程度の負電荷がフローティングゲートにある（通常は状態「０」と定義される）。ゲートに負電荷があるとセルのトランジスタのしきい値電圧（すなわち、トランジスタを導通させるためにトランジスタのコントロールゲートに印加すべき電圧）が増加する。セルのしきい値電圧をチェックすることにより、記憶されたビットを読み出すことができる。しきい値電圧が高い状態にある場合、ビット値は「０」であり、しきい値電圧が低い状態にある場合、ビット値は「１」である。
【００２５】
実際にはセルのしきい値電圧を正確に読み出す必要はなく、セルが現在２つの状態のどちらにあるかを正確に識別するだけでよい。それには、２つの状態の中間にあたる基準電圧値に照らして比較を行い、セルのしきい値電圧がこの基準値より低いか高いかを判断すればよい。
【００２６】
図２Ａはこれを示すものである。具体的には、図２Ａは、多数のセルのしきい値電圧分布を示している。フラッシュデバイスの中にあるセルの特性や挙動はまったく同じというわけではないため（例えば、不純物濃度の僅かなばらつきやシリコン構造の欠陥のため）、全てのセルに対して同じプログラミング操作を行っても、全てのセルでしきい値電圧がまったく同じになることはない。（歴史的理由により、フラッシュメモリにデータを書き込むことを一般的にはフラッシュメモリを「プログラムする」と言うことに留意すべきである。）むしろしきい値電圧は分布する。値「１」を記憶するセルは負のしきい値電圧を通常持ち、ほとんどのセルは左側のピーク１２０に見られる値に近いしきい値電圧になるが、少数のセルではこれよりも低いか高いしきい値電圧になる。同様に、値「０」を記憶するセルは正のしきい値電圧を通常持ち、ほとんどのセルは右側のピーク１２２に見られる値に近いしきい値電圧になるが、少数のセルではこれよりも低いか高いしきい値電圧になる。
【００２７】
一般的に「マルチレベルセル」、略して「ＭＬＣ」と呼ばれる手法を用いて２ビット以上の情報を記憶するメモリセルが普及しつつある。しかし、前述したように、旧式のフラッシュセルでも２レベルを有し、２レベル以上になるから、この呼び方は誤解を招く。そこで本願明細書では２種類のフラッシュセルを「シングルビットセル」（ＳＢＣ）と「マルチビットセル」（ＭＢＣ）と呼ぶことにする。ＭＢＣフラッシュによる進歩として、各セルには２ビット（以上）が記憶される。ここでは説明を簡潔にするために２ビットの場合を強調するが、フラッシュメモリデバイスでサポートする１セル当たりのビット数がいくつであれ、本発明を等しく応用できることを理解できるはずである。１つのメモリセルで２ビットの情報を記憶するには、４通りの異なった状態のいずれか１つにメモリセルをプログラムできなければならない。セルの「状態」はセルのしきい値電圧によって表されるため、ＭＢＣセルでは当然、４通りの異なった有効しきい値電圧範囲をサポートしなければならない。図２Ｂは、典型的なＭＢＣセルの典型的なしきい値電圧分布の例を示す。図２Ｂには、図に示すように４つのピーク１３０、１３２、１３４、１３６があり、各ピークはいずれか１つの状態に相当する。ＳＢＣと同様に、それぞれの状態は実際には範囲であって単一の数値ではない。セルの内容を読み出すときには、セルのしきい値電圧がどの範囲内にあるかを正確に識別できさえすればよい。その全体が本願明細書において参照により援用されているHarariの米国特許第５，４３４，８２５号（特許文献５）には、ＭＢＣフラッシュデバイスの一実施例が記載されている。
【００２８】
ＭＢＣセルで２つのビットを４つの状態で符号化する場合は普通、両ビットが値「１」を持つ場合を左端の状態、すなわちピーク１３０（通常は負のしきい値電圧を有する）とする。以降の説明では以下のような表記を用いる。セルの２つのビットは「下位ビット」と「上位ビット」と呼ぶ。これらのビットの明示値を［「上位ビット」「下位ビット」］の形式で記述し、右側を下位ビット値とする。したがって、下位ビットが「０」で上位ビットが「１」の場合は「１０」と記述する。この用語・表記の選択が恣意的であって、これとは別の名称・符号化も可能であることを理解するべきである。この表記により、左端の状態は「１１」の場合に相当する。残りの３つの状態は通常、左から右の順に「１０」、「００」、「０１」と割り当てられる。その全体が本願明細書において参照により援用されているChenの米国特許第６，５２２，５８０号（特許文献６）には、かかる符号化を用いたＭＢＣ  ＮＡＮＤフラッシュデバイスの一実施例が記載されている。特に特許文献６の図８を参照されたい。４つの状態は単純にＥ、Ａ、Ｂ、およびＣと呼ぶこともできる。しかし、この状態割り当てに限定されるわけではなく、これとは別の順序も可能であることに留意すべきである。ＭＢＣセルの内容を読み出すときには、セルのしきい値電圧がどの範囲内にあるかを正確に識別しなければならない。しかし、この場合は、１つの基準電圧に対する比較でこれを果たすことはできず、数回の比較が必要となることがある。
【００２９】
図２Ｃには別の状態割り当てが描かれている。これはＬＭモードと呼ばれることがある。このモードには記憶状態「１１」、「０１」、「００」、「１０」にそれぞれ対応する４つのピーク１４０、１４２、１４４、１４６（左から右の順）がある。これらの４状態も単純にＥ、Ａ、Ｂ、およびＣと呼ぶことができる。通常は下位ページが先にプログラムされ、「０」がプログラムされる場合、ピーク１４８と標示された中間ＬＭ状態になる。上位ページをプログラムするときに上位ビットが「０」ならば、Ｅ状態１４０がＡ状態１４２までプログラムされるか、ＬＭ状態１４８がＢ状態１４４までプログラムされる。上位ビットが「１」ならば、ＬＭ状態１４８がＣ状態１４６までプログラムされる。
【００３０】
このＬＭモードには従来のモードを凌ぐ利点がいくつかある。第一に、ＬＭモードのプログラミング時間は従来モードより短く、プログラミングのストレスを減らすことができるため（例えば、従来モードでＥ状態１３０からＣ状態１３６までメモリセルをプログラムするにはメモリセルのしきい値電圧をシフトするのに時間がかかり、その間ずっと近傍のセルにストレスを与えることになるが、ＬＭモードのしきい値シフトは小さい）、プログラムディスターブは減り、信頼性が向上する。加えて、下位ページのみ使用する場合、Ｅ状態１４０と中間ＬＭ状態１４８との離隔は、従来モードのＥ状態１３０とＡ状態１３２との離隔より大きいため、メモリセルで信号マージンが大きくなる。最後に、ピーク１４８の幅は従来モードのピーク１３２の幅より広くとれるため、最終的なしきい値を従来モードのように厳密にコントロールする必要がなく、下位ページのプログラミングを迅速化できる。
【００３１】
サイズが同様のセルに１ビットではなく２ビットを記憶するＭＢＣデバイスは、コスト面で大変有利である。しかし、ＭＢＣフラッシュにもいくつかの欠点はある。ＭＢＣメモリの平均読み出し時間および書き込み時間はＳＢＣメモリより長く、性能低下を招く。また、ＭＢＣはＳＢＣより信頼性が低い。これは容易く理解できる。ＭＢＣではしきい値電圧範囲の差がＳＢＣより格段に小さくなるからである。そのため、しきい値電圧に外乱が生じる場合（記憶電荷の漏れによるしきい値電圧のドリフト、近傍セルにおける操作から生じる干渉等）、２状態の格差が大きいＳＢＣでは問題にはならないが、ＭＢＣではセルの状態が変わってしまってビットに誤りが生じることがある。このため、データ保持時間や多数の書き込み／消去サイクルに対するデバイス耐久性の点でＭＢＣセルの品質水準は低い。用途次第では、ＭＢＣセルとＳＢＣセルの両方を使用すると有利な場合もある。
【００３２】
前述した説明はフローティングゲート式のフラッシュメモリセルに関するものだが、これとはタイプの異なるフラッシュメモリ技術もある。例えば、ＮＲＯＭフラッシュメモリ技術には導電性フローティングゲートがなく、絶縁層で電荷をトラップする。ここではフローティングゲート技術の脈絡で説明するが、本発明はあらゆるタイプのフラッシュメモリに等しく応用できる。
【００３３】
プログラムディスターブ
フラッシュメモリデバイスのエラーにはいくつか原因がある。具体的な原因として「プログラムディスターブ」、略して「ＰＤ」と通常呼ばれるものがある。ＰＤ現象が起こると、書き込まれるはずのないセルが当初の左端の状態から他の何らかの状態まで意図せず移ってしまう（ここでの説明では図２Ａ、２Ｂ、２Ｃにも使われている一般的なしきい値電圧軸の描き方を前提とし、値は軸の左方向に沿って低くなる。これは恣意的なやり方であって、本発明の範囲を限定するものとして解釈すべきではない）。図２Ｃの１セル当たり２ビットの例を参照するならば、ビット値「１１」に相当する左端の状態（セルの消去済み状態）にあって本来その状態にとどまるはずのセルが、左端の次の状態「１０」へ移ってしまい、セルに記憶される２ビット中１ビットは誤りとなる。場合によっては、１セル当たり３ビット以上を記憶し５つ以上の状態を持つセルでは特に、ＰＤ現象の結果として左端の状態から直近の状態へ移動するばかりでなく、左端の状態からさらに離れた状態まで移動することもある。左端以外の状態から右の（しきい値電圧が高い）状態に移動することすらある。しかし、最初に述べた、左端の状態から直近の近傍状態へ移動する場合が最も一般的であり、ここでの実施例と説明にもこの場合を前提とし、本発明の方法の普遍性を制限することはしない。
【００３４】
ページをプログラムするときにＮＡＮＤフラッシュデバイスのセルに印加される電圧を考えれば、ＰＤ現象の原因は容易く理解できる。１ページのセルをプログラムするときには当該ページのセルのコントロールゲートへ接続されたワード線に比較的高い電圧が印加される。このコントロールゲート電圧の結果としてセルのしきい値電圧が増加するか否かは、そのセルへ接続されたビット線に印加される電圧によって決まる。データが書き込まれないセルのビット線は比較的高い電圧レベルへ接続され、セルの電圧差は最小限に抑えられる。書き込みが行われるセルのビット線は低い電圧へ接続され、セルの電圧差は大きくなり、その結果、セルのしきい値電圧は増加し、セルは図２Ｃの電圧軸に沿って右へ移動し、セルの状態が変化する。
【００３５】
しかし、書き込みが行われないセルの電圧差が、書き込みが行われるセルより低くとも、ある程度の電圧差はある。プログラムされないこれらのセルの電圧差をさらに減らすため、選択されたワード線に印加されるプログラミング電圧に近い電圧までセルのチャネルが「ブーストされる」ことで、メモリセルデバイスの電圧差を減らす。それには、書き込みが行われないセルに対応する、「比較的高い」ビット線電圧に近い中間の電圧まで、メモリブロックの中で選択されていない他のワード線にバイアスをかける。その結果、これらのセルのチャネルにより高い電圧までバイアスがかかり、選択されたワード線に高プログラミング電圧がかかると、さらに高い電圧までブーストされる。しかし、選択されたワード線に沿ってプログラムされるセルの電荷によって、選択されていないワード線に印加される電圧は部分的に打ち消される。全体的ブーストは、同一ビット線沿いの前のセルにプログラムされるデータ（すなわち、記憶状態）に左右される。例えば、「Ｃ」状態（メモリセルに記憶される最大電荷）までプログラムされるセルは、メモリセルデバイスで最も高いしきい値電圧を持つ。ビット線沿いの他のセルが以前「Ｃ」状態までプログラムされていた場合、ブーストされる電圧が減り、書き込み対象でないメモリデバイスで電圧が増加し、意図せぬプログラミングが発生する。
【００３６】
加えて、書き込み対象ページに高しきい値電圧（例えば、右端の状態等）まで書き込まれるセルがあると、プログラムされないセルの電圧差が高くなる。なぜならば、ページの全てのセルの全てのコントロールゲートには同じ電圧が印加されるが、到達すべきしきい値電圧が高ければ高いほど、その電圧は高くなるからである。つまり、一部のセルに高いコントロールゲート（すなわち、ワード線）電圧を印加する必要があるため、プログラムされないセルの電圧差は高くなる。そのような予想される電圧差の影響を受けないようにセルが設計されても、実際のＮＡＮＤフラッシュデバイスでは、かかる電圧差によってセルにストレスがかかり、意図しないかまたは望んでもいないのに、一部のセルで状態が変化することがある。
【００３７】
前述した説明を要約すると、ＰＤとは１ページのセルをプログラムするときに現在の記憶状態にとどまるべき一部のセルが別の状態に変化し、当該セルの読み出し時にビットエラーを生じさせる現象といえる。残念ながら、通常、実際のユーザデータはランダムではない。実際のユーザファイルを測定してみると、種々のセル状態の発生確率が等しくないことが分かる。書き込みが行われないセルのデフォルト値は左端の状態だから、最も頻発するのはこの状態である。これは容易く理解できる。ファイルの中で使われない初期化されないメモリ部分は大概、消去済み状態のセルと一致する。
【００３８】
実際の使用では、ランダムデータパターンの統計計算に基づく見込みよりもＰＤエラーの問題は深刻である。比較的多くのセルが消去済み状態となるが、これが最もＰＤエラーを被りやすい状態なので、実際にはランダムデータ分布モデルによる予測よりも多くのＰＤエラーが起こる。本発明は、ユーザデータを操作し、フラッシュにプログラムされる状態もしくは一連の電圧レベルをランダム化することにより、ＰＤ現象に起因するエラーの縮減に対処するものである。
【００３９】
ＮＡＮＤフラッシュコンセプトの紹介
残りの説明をより良く理解するため、典型的なＮＡＮＤフラッシュメモリデバイスとフラッシュファイルシステムのコンセプトと構造をこれより紹介する。
ブロックは、ＮＡＮＤフラッシュメモリで１つの単位として消去できる最小領域である。図１を参照すると、ブロックには、１対のブロック選択トランジスタによって選択されるワード線（ブロック選択線に挟まれたワード線）とビット線があり、ビット線のメモリセルは物理ワード線に結合されるメモリセルを含む。物理ページは、ＮＡＮＤフラッシュメモリで１つの単位として書き込める（すなわち、プログラムできる）最小領域である。図１を参照すると、１つの物理ページが１本のワード線沿いの全メモリセルを含むことができ、複数の物理ページが１本のワード線のメモリセルに相当することができる。例えば、ＭＢＣメモリでは、１本のワード線が下位ページと上位ページを含むほか、偶数ビット線に相当する下位・上位ページと奇数ビット線に相当する下位・上位ページとで、各物理ワード線につき全部で４つの物理ページを含むことができる。メタページとは、１つ以上の物理ページをつないでより大きなページを形成したものである。メタページ内の全物理ページを同時に読み出す／書き込むことで高性能化を達成する。
【００４０】
ＥＣＣページは１群のＥＣＣ冗長バイトによって保護される１つ以上のセクタを含む。例えば、シングルセクタＥＣＣページの場合は各セクタがそれぞれのＥＣＣ冗長バイトによって保護されるが、５１２バイトのセクタが４つあるＥＣＣページの場合は、それぞれ２ＫＢのデータ情報が１群のＥＣＣ冗長バイトによって保護される。ＥＣＣページは、データのほかに数バイト（２、６、１４バイト等）のヘッダを含む。
【００４１】
論理アドレス空間（ホスト等の論理アドレス空間）は、サイズが等しい論理セクタグループに分割される。それぞれの論理グループにはメタブロックに適合する数のセクタがある。メタブロックは１単位として消去できる物理セクタグループで、論理データグループの記憶に使用できる。ホストデータを記憶するデータセクタと、ファームウェアデータを記憶する制御セクタという２種類のセクタは、いずれもメタブロックに記憶される。制御セクタは通常、ホストによってアクセスされない。所定の時間、所定のメタページは通常、データセクタか制御セクタだけを収容する。（しかし、スクラッチパッドブロック等は両タイプのセクタを収容することがある。）
【００４２】
ホストの論理アドレスをフラッシュメモリの物理アドレスに関係づけるため、論理アドレスから物理アドレスへの変換を行う。論理グループで最も低い論理セクタアドレス（すなわち、ＬＢＡ）が、マッピングするメタブロックの最初のセクタになるとは限らない。換言すると、論理グループの最低アドレスとマッピングするメタブロックの最低アドレスとの間にはオフセットが存在することがあり得る。メタブロックの最初の物理セクタに記憶されたデータの開始論理セクタアドレスを識別する等、オフセットの識別にあたってはページタグを使用する。
【００４３】
メモリ管理システムは、論理グループの更新データを記録する専用のメタブロックを配置することによってデータの論理グループの更新が可能になる。ホストが論理グループでデータの書き込みを開始すると、アップデートブロックが開く。アップデートメタブロックは、更新データを受信の順に記録するが、記録が当初の正しい論理順序になっているか（連続）いないか（不連続）はかまわない。当初そのようなアップデートブロックはシーケンシャルなアップデートブロックとして開くが、不連続な書き込みがある場合には不連続な（すなわち、「カオス的」）アップデートブロックに変わる。最終的にアップデートメタブロックはさらなる記録のために閉じられる。数通りあるプロセスのいずれか１つが行われるが、最終的には正しい順序で完全に満たされたメタブロックとなり、当初のメタブロックはこれに差し替えられる。カオス的な場合には、頻繁な更新の助けになるように不揮発性メモリでディレクトリデータが管理される。
【００４４】
論理セクタグループのデータは、望ましくは論理的に連続する順序で１つのメタブロックに記憶される。この方法で、記憶された論理セクタのインデックスを予め設定しておく。メタブロックが論理グループの全セクタを所定の順序に並んでいる状態で用意しているとき、その状態を「インタクト」という。アップデートブロックに関して、最終的に論理的に連続する順序により更新データで満たされたとき、更新済みインタクトメタブロックとなり、当初のメタブロックと差し替えることができる。一方、更新データの順序がインタクトブロックの順序とは論理的に異なるアップデートブロックは不連続（すなわち、「カオス的」）アップデートブロックであり、順序が乱れているセグメントをさらに処理し、最終的にはインタクトブロックと同じ順序で論理グループの更新データが記憶されなければならない。好適な場合のものは１つのメタブロック内で論理的に連続する順序である。さらなる処理として、アップデートブロックの更新済みセクタと当初のブロックの変更されていないセクタを整理し、別のアップデートメタブロックにまとめる。できあがったアップデートブロックは論理的に連続する順序となり、当初のブロックと差し替えることができる。所定の条件下では、この整理統合プロセスの前に１つ以上の圧縮プロセスを行う。圧縮プロセスでは、同一論理セクタの更新によって用済みとなった重複論理セクタを排除しながらカオス的アップデートブロックのセクタを別のカオス的アップデートブロックに記録する。
【００４５】
論理グループと物理グループ（メタブロック）とのマッピングは１組の表とリストに記憶され、不揮発性フラッシュメモリとフラッシュコントローラ内のＲＡＭに配布される。フラッシュメモリでは、メモリシステム内の各論理グループにつきメタブロックアドレスを含むアドレス表を管理する。加えて、最近書き込まれたセクタの論理−物理アドレス記録が一時的にＲＡＭに保持される。これらの揮発性記録は、電源投入後にシステムが初期化されるときにブロックリストとデータセクタヘッダから再現できる。論理グループのアドレス記録階層は、オープンアップデートブロックリストと、ＲＡＭ内のクローズドアップデートブロックリストと、フラッシュメモリに保管されるグループアドレス表（ＧＡＴ）を含む。
【００４６】
オープンアップデートブロックリストは、更新されたホストセクタデータを書き込むために現在開いているデータのアップデートブロックのリストであり、コントローラＲＡＭの中にある。ブロックが閉じられると、そのブロックの項目はクローズドアップデートブロックリストに移される。クローズドアップデートブロックリストは、閉じられたデータアップデートブロックのリストで、コントローラＲＡＭの中にある。このリストに含まれる項目の一部は、制御書き込み操作のときにグループアドレス表内のセクタへ移される。
【００４７】
グループアドレス表（ＧＡＴ）はメモリシステム内のホストデータの全論理グループのメタブロックアドレスのリストである。ＧＡＴの中では各論理グループにつき１項目ずつが論理アドレスの順に並んでいる。ＧＡＴの中でｎ番目の項目にはアドレス「ｎ」を持つ論理グループのメタブロックアドレスが含まれる。これは望ましくは１組のセクタ（ＧＡＴセクタと呼ぶ）からなるフラッシュメモリ内の表で、メモリシステム内の全論理グループのメタブロックアドレスを定義する項目を含む。ＧＡＴセクタはフラッシュメモリ内の１つ以上の専用制御ブロック（ＧＡＴブロックと呼ぶ）に位置する。
その全体が本願明細書において参照により援用されているBennettらの米国特許第７，１３９，８６４号（特許文献７）には、そのようなフラッシュファイルシステムのコンセプトがより詳しく記載されている。
【００４８】
スクランブリング
メモリセルアレイに記憶されるデータは、論理的な観点から、ビット線を一方の軸としワード線を他方の軸とする二次元（２Ｄ）ビットマップとして表すことができる。これを踏まえ、効果的なデータパターンスクランブリングとは基本的に以下の２つを達成するものである。（１）データビットを適切に操作し、メモリセル状態のプログラムパターンに変化を与え、（２）ワード線からワード線、およびビット線からビット線に同じ状態にプログラムされたメモリセルの配置を最小限に抑える。
【００４９】
図３Ａおよび３Ｂでは、ここで単にスクランブラと呼ぶこともある、典型的なデータパターンスクランブラ１５０と逆スクランブラ１７０の概念ブロック図を示している。かかるスクランブラは、排他的ＯＲ（ＸＯＲ）ロジックと既知の鍵とを使用する簡素な暗号化法に基づく。簡素なＸＯＲロジックに鍵を用いてデータをスクランブルし、その後同じ鍵を用いた逆スクランブルにより当初のデータを取り戻す。図３Ａでは、スクランブルがかかっていないデータがホストからバス１５２上でＸＯＲブロック１５６へ伝送される。加えて、バス１５４沿いにスクランブル鍵がＸＯＲブロック１５６まで伝送され、このブロックがビット単位のＸＯＲ操作を実行することによってデータはスクランブルされ、バス１５８沿いに伝送される。鍵ジェネレータ１６８はクロック信号１６０を受信し、バス１６２上でシード鍵を受信し、バス１６４上で開始鍵番号ＳＫＮ（後述）を受信し、バス１５４上でスクランブル鍵を生成する。図３Ｂではスクランブルされたデータがメモリからバス１７２上でＸＯＲブロック１７６まで伝送され、このブロックがビット単位のＸＯＲ操作を実行することによってデータのスクランブルが解かれ、バス１７８上で伝送される。前述したものと同様に、鍵ジェネレータ１８８はクロック信号１８０を受信し、バス１８２上でシード鍵を受信し、バス１８４上で開始鍵番号ＳＫＮを受信し、バス１５４上で逆スクランブル鍵を生成する。ＸＯＲブロックと鍵ジェネレータブロックは別々のブロックとして図に示されているが、種々の入力および出力バスを適宜操作しながらスクランブリングと逆スクランブリングの両方に共用することもできる。ホストデータとスクランブル鍵とのビット単位ＸＯＲ操作は、スクランブルに使用した既知のシードと鍵番号による簡素な逆スクランブリングを可能にする。
【００５０】
つまり、スクランブラ１５０と逆スクランブラ１７０の核心は、基本的には鍵を生成することにある。鍵を数字とみなす代わりに、１と０からなる列と見ることもできる。ビット順序と列に含まれる数１および０を制御することが適切なスクランブル鍵を生成する基本原則のひとつである。
【００５１】
ビット列は、シードと呼ばれる初期ビット列を、ビットパターンの繰り返しが始まるまで、一度に１ビットずつ、循環させることにより、簡単に生成できる。それには、固定された長さのシフトレジスタを使って一連の循環する鍵を作ればよく、鍵値は最初のシード値によって制御される。例えば、８ビットシフトレジスタならば、最高８つの一意な鍵を生成できる。図４には典型的な循環８ビット鍵（左方向）が見られる。この例で、Ｋｅｙ０の後にはＫｅｙ１が続き、Ｋｅｙ１の後にはＫｅｙ２が続く。無論、初期ビット列を右に循環させて一連の循環する鍵を生成することもできる。いくつかの実施形態ではシリアルシフタを使用するが、実施形態によってはバレルシフタ等、他のシフタを使用することもある。
【００５２】
図５を参照すると、左へ循環して３２通りのスクランブル鍵を生成する典型的な循環３２ビット鍵が見られる。初期鍵（Ｋｅｙ０）は、０ｘ６９５３３４Ｃ６というシード鍵値を取る。これとは別のシード鍵も考えられ、実験的に求めることができる。シード鍵は、望ましくはビットパターンに十分な「ランダム性」を与え、かつ望ましくは１と０とで数のバランスをとる。それぞれの連続鍵は、先行鍵を１ビット左へ循環させることによって生成される。例えば、Ｋｅｙ１はＫｅｙ０を１ビット左にずらすことによって生成される。表に見られるように、３２通りの鍵には番号も振られており、鍵番号は、シード鍵がその鍵番号に等しいビット数により循環されることを意味する。例えば、Ｋｅｙ２１は、シード鍵Ｋｅｙ０を２１ビット左へ循環させたものである。この鍵は、シード鍵を１ビットずつ２１回循環させることにより（例えば、１クロック当たり１回）、あるいはバレルシフタを用いて１回のクロックサイクルで、あるいはその他の手法により生成できる。
【００５３】
ある実施形態では、初期シード鍵を一度に１ビットずつ循環させて連続するスクランブル鍵を作る。シードは、望ましくは最低でも３２ビットの長さがあり（しかし、これ以外の長さでもかまわない）、かつ望ましくは所定のハードウェアデフォルト値を持ち、このデフォルト値は初期化のときにファームウェア（ＦＷ）により変更できる（後ほど詳述）。スクランブル鍵により３２ビットのデータをＸＯＲにかけ、その後次の鍵が自動的に生成され（例えば、現在の鍵を左へ循環させることにより次の鍵を作る）、次の３２ビットデータに使われる。シードは初期鍵であり、後続の鍵はサイクルのたびに自動的に生成されるため（例えば、図３Ａおよび３Ｂに見られるＣＬＫ信号の切り替えにより）、シードだけはＦＷにより設定する必要がある。
【００５４】
鍵はデータチャンク（３２ビットのデータ等）により論理的にＸＯＲされ、したがって鍵内の１と０の数によりデータビットが切り替わることでワード線にわたってメモリセル状態がスクランブルされる。メモリページの先頭から１２８バイト（３２鍵×３２ビット÷８ビット／バイト）後に鍵番号は折り返して元に戻り、スクランブリングパターンそのものが繰り返される。メモリブロック２００のメモリページ２０８、２１６、２２４等を示す図６にはこれが視覚的に描かれている。最初のメモリページ２０８の最初の３２ビットワード（２０２と標示）はＫｅｙ０を使ってスクランブルする。ページ２０８でさらなるワードが書き込まれるにつれ鍵番号は図に示されたように増加し、３２番目のワード（２０４と標示）はＫｅｙ３１を使ってスクランブルする。ページ内の３２ワードにつき３２の鍵を再使用するから、次に書き込まれるワード（２０６と標示）はＫｅｙ０を使ってスクランブルされる。スクランブラの目的はデータを暗号化することではなく固定パターンを回避することにあるので、ワード線沿いに（ビット線を横切って）メモリセルの状態を分散させるにあたって、１２８バイト後の鍵の再使用で「ランダム性」は十分である。しかし、これとは別の、後述するさらに「ランダム」なランダム化手法を用いることもできる。
【００５５】
ビット線の方向にメモリセルの状態を分散させるため、各ページの始めには異なる鍵を使用する。次のメモリページ２１６の最初の３２ビットワード（２１０と標示）はＫｅｙ１を使ってスクランブルする。ページ２１６でさらなるワードが書き込まれる（あるいは読み出される）につれて、鍵番号は前述したように増加し、３１番目のワード（２１２と標示）はＫｅｙ３１を使ってスクランブルし、３２番目のワード（２１４と標示）はＫｅｙ０を使ってスクランブルする。前述したように、ページ内の３２ワードにつき３２通りの鍵を再使用するから、次のワード２１５はＫｅｙ１を使ってスクランブルされる。
【００５６】
それぞれのページに使用する最初の鍵の識別は開始鍵番号（ＳＫＮ）によって提供される。ＳＫＮは、一定の基準点（Ｋｅｙ０、シード）からのインデックスまたはオフセットとして機能する。このインデックスが論理ページの遷移のたびに変更されることで、循環鍵のビット列から階段状のビットパターンが作られる。このような論理ページアドレス遷移は、ある１つのワード線から次のワード線へ遷移するときに起こるほか、１本のワード線の中で起こることもある（ワード線のメモリセルに上位ページと下位ページが記憶されるＭＬＣセルの場合、ワード線のメモリセル数がページ内のビット数より多い場合等）。開始鍵をオフセットすることにより、０と１が移動するビットマップのようなパターンになり、データのＸＯＲ化により、メモリセルアレイにわたってストライピング効果が得られる。つまりスクランブル鍵はビットを切り替える働きをする。鍵の循環は、ワード線にわたって（ページにわたって）ビットパターンをずらす働きをする。開始鍵番号は、該当するページに応じて適切な鍵を設定しながら、ビット線の方向にビットパターンをずらす働きをする。
【００５７】
ページ内の所与のバイト（ワード線沿い）にどの鍵を使用するかの判断を助けるため、ページの最初のワードから始まって０〜３１までカウントし、後続の３２ワードごとに反復するＤワードオフセット数を導入する。換言すると、Ｄワードオフセット数は０〜３１までのカウントを繰り返し、ページ内の最初の鍵（ページ２０８ではＫｅｙ０、他のページ２１６、２２４等では別の初期鍵）を基準にして使用すべき鍵を指示する。このＤワードオフセット数は、物理ページの中でアクセスされる最初のセクタのカラムオフセットから導出され、以下の式により計算できる。
2011508363.tif 000003
Ｃｏｌｕｍｎ＿Ｓｔａｒｔは物理ページ内で読み出すか書き込みが始まる最初のデータバイトであり、データバイトとヘッダを含む（が、ＥＣＣバイトもスクランブルされる場合を除きＥＣＣバイトは含まない）。これは、ヘッダ長（すなわち、６バイト、１４バイト等の適切な値）＋物理ページ内の前のセクタ（いくつかの実施形態ではＥＣＣページ）のデータフィールド長（すなわち、５１２バイト、２，０４８バイト等の適切な値）の和によって計算される。Ｋｅｙ＿Ｌｅｎｇｔｈはバイト単位によるスクランブル鍵の長さである。「ｍｏｄ」関数（「モジュロ」関数）は、第１の引数を第２の引数で割った余りを返し、「ｒｏｕｎｄ＿ｄｏｗｎ」関数は、第１の引数を第２の引数によって指示される桁数まで切り捨てたものを返す。ここでの桁数は０だから整数まで切り捨てる。後ほど図１０との関係で数字の例を説明する。
【００５８】
各ページの最初のセクタの場合、Ｄワードオフセットは０に通常設定されるが、セクタの長さは多くの場合、１２８バイト（すなわち、４バイト鍵×３２鍵＝１２８バイト）の偶数倍数ではないから、物理ページの別のセクタでは通常０にならない。ページはどれも、望ましくはメタページの構成（メタページ内の物理ページ数）にかかわりなく０カラムオフセットで始まる。
【００５９】
前述したように、ＳＫＮは３２個の鍵のうちの物理ページ内の最初のワードに使う鍵がどれかを指示するものとして解釈できる。いくつかの実施形態では、以下の式に見られるようにページオフセット数とＤワードオフセット数との和の下位５ビットを取ることによってＳＫＮを計算できる。
2011508363.tif 000004
ページオフセット数は、望ましくはブロック内の物理ページアドレスの最下位５ビットに設定されるか、ブロック内の論理ページアドレスの最下位５ビットに設定される。この関係は、例えば図６で各ページ内の最初のセクタ（Ｄワードオフセット＝０）のＳＫＮがページオフセット数に等しいことから確認できる。ページ内の各セクタのサイズが１２８バイトの偶数倍数ならば、各セクタは同じＳＫＮから始まる。しかし、通常は、ページ内の各セクタでＳＫＮが異なるようにセクタのサイズを選択する。
【００６０】
セクタのサイズが４バイトの偶数倍数ではない場合には、新規セクタの最初のバイトが３２ビットワードの中（したがって、３２ビットスクランブル鍵の中）に入ることがある。３２ビットスクランブル鍵の中で開始バイト位置を指示するためにバイトオフセット数を導入する。これは鍵がセクタ境界（またはＥＣＣページ境界）にまたがる状況に対処するためのものであり、０以外のカラムオフセットでメモリの読み出しを行う場合（メモリページの中間で読み出しが始まる場合）に適切なＳＫＮを決定する上で重要な判断材料となる。各ページの最初のセクタの場合、バイトオフセットは０に通常設定される。他のセクタのバイトオフセットは、ＥＣＣを除くセクタサイズ（またはＥＣＣページサイズ）と、セクタ数もしくはＥＣＣページ数次第で決まる。バイトオフセット数は以下の式により計算できる。
2011508363.tif 000005
前述したように、Ｃｏｌｕｍｎ＿Ｓｔａｒｔは物理ページ内で読み出すか書き込みが始まる最初のデータバイトである（ヘッダとデータバイトを含み、ＥＣＣバイトは含まない）。バイトオフセットは０〜３までのカウントを繰り返し、Ｃｏｌｕｍｎ＿Ｓｔａｒｔ値を増加させる。換言すると、バイトオフセット値は、スクランブル鍵の４バイトのどれが物理ページ内のバイトに対応するかを指示する。
【００６１】
図７には、３２ビット鍵によるバイトオフセット数の例が見られる。最初のセクタにあたるセクタ０は５１８バイト長である（例えば、６バイトのヘッダと５１２バイトのデータ部分を反映）。これは４バイトの偶数倍数ではないから、このセクタはスクランブル鍵１の途中で終わっている。（図６でバイト５１２は１２８バイトの偶数倍数だから、Ｋｅｙ０の最初のバイトに一致する。）セクタ１の最初のバイトはＫｅｙ１内のバイト２に一致する。つまり、セクタ１はバイトオフセット値＝２とＤワードオフセット値＝１で始まる。１６セクタを含むページのＳＫＮ計算を示す図８にこれを見ることができる。この表には、０および１のページオフセット値に対応する最初の２ページが表示されている。各ページの最初のセクタは６バイトのヘッダを含み、各ページのさらなるセクタは２バイトのヘッダをそれぞれ含む。この表の最初の２行が図７に示された例に相当する。特に２行目にはＤワードオフセット値＝１とバイトオフセット値＝２が表示されている。前述したように、ページ内のセクタのＳＫＮが全面的には同じでないことも分かる。さらに前述したように、各ページの最初のセクタのＳＫＮはページオフセット数に等しい。
【００６２】
他のある実施形態では、スクランブル鍵の「ランダム性」を向上させるため、単純な開始鍵の単一ビット循環とは別の方法で後続スクランブル鍵を生成する。例えば、初期数すなわちシードを複数回循環させてさらなるスクランブル鍵を生成する。ＸＯＲ操作が終わるたびに次の鍵番号を計算し（例えば、鍵を左に何ビット循環させるかを計算し）、相応に鍵を循環させる。こうすることでスクランブル鍵の繰り返しは減り、データのＸＯＲにより簡素な単一ビット循環よりランダムなデータパターンが達成される。図９には典型的な計算済み８ビット鍵系列が見られる。それぞれのスクランブル鍵は、鍵番号により当初のシードを左循環させたものである。つまり、Ｋｅｙ６はシードＫｅｙ０を６ビット左に循環させたものであるが、図に示されているように、後続鍵は単なる先行鍵の単一ビットシフトではない。この例で、Ｋｅｙ０の後ろにはＫｅｙ６が続き、その後ろにはＫｅｙ３などが続いている。
【００６３】
しかし、前述したように、８ビット鍵より３２ビット（以上）鍵のほうが好適である。そのような例では以下の式により開始鍵番号（ＳＫＮ）を再帰的に計算できる。
Ｋn ＝ＳＫＮn により左に循環されるシード
ＳＫＮn+1 ＝［ＳＫＮn ＋Ｃ＋Ｐ＋（ＳＫＮn ＋Ｐ）］＞＞５
ここで、Ｃ＝Ｄワードオフセット  ＆  ０ｘ１ｆ
Ｐ＝ページオフセット数  ＆  ０ｘ１ｆ
ＳＫＮ0 ＝Ｐ
ページオフセット数とＤワードオフセット数とバイトオフセット数は前述した式を用いて計算する。演算子「＞＞」は右非循環シフト関数であり、ここでは「３２により除算、剰余なし」関数となる。演算子「＆」はビット単位ＡＮＤ演算子である。図１０には、２，０６２バイトのＥＣＣページがあるメモリでＤワードオフセット数とバイトオフセット数を計算する例が見られる。それぞれのＥＣＣページは１４バイトのヘッダと４つの５１２バイトセクタを含み、全部で２，０６２バイトになる。
【００６４】
必ずしもページ全体にアクセスせずとも部分的ページにアクセスできる。ＳＫＮを設定し、適切な鍵を計算すれば、スクランブル鍵を設定するためにさらなるセクタを読み書きせずとも、カード内の任意のセクタから読み書きを行える。望ましくはＦＷで開始鍵番号を設定し、メモリカード内の任意のＥＣＣページからスクランブリング／逆スクランブリングを開始するようにスクランブラを構成する。後ほど詳述するように、ＳＫＮは読み書きする最初のセクタの物理位置か論理ブロックアドレス（ＬＢＡ）に従い各チャンクの先頭に設定される。ＦＷは、ページオフセット数、Ｄワードオフセット数、およびバイトオフセット数レジスタの設定に加え、ＳＫＮを設定する。ＳＫＮを設定した後には、読み書きの対象となるセクタにとって適切なスクランブル鍵を鍵ジェネレータ（ハードウェア、ファームウェア等）で計算できる。
【００６５】
ページの途中で操作が始まる場合は、図１１の表に従いページオフセット、Ｄワードオフセット、およびバイトオフセットレジスタをＦＷにより設定できる。この表は、先に紹介した１４バイトのヘッダとその後に続く４つのセクタをそれぞれ含む２，０６２バイトＥＣＣページの例を反映するものであるが、当然ながらこれとは別のサイズも考えられる。Ｄワードオフセットおよびバイトオフセットレジスタは、望ましくはページオフセットレジスタを設定するときにクリアされ（ほとんどの読み出しと書き込みはページの先頭で始まるため）、ページオフセットレジスタが設定された後に設定される。これらのレジスタが設定された後には、図１２の表に従いＦＷでＳＫＮ値を設定できる。このような表は、望ましくはＦＷにハードコーディングされ、メモリアクセスのたびに再帰的計算を行うことなくＳＫＮを速やかに決定できるようにする。あるいは、初期化のときにＦＷで３２の物理ページ内で４つの各ＥＣＣページにつき対応するＳＫＮを再帰的に計算し表を作ることもできる（すなわち、ページオフセット数の値に対応）。時間のかかる再帰的計算を一度だけ行い、表を保存すれば、メモリアクセスのたびに再帰的計算を行うことなくＦＷでＳＫＮを速やかに決定できる。
【００６６】
逐次操作（読み出し／書き込み）がページ境界にまたがって次のページにアクセスするときには、ＳＫＮを次のページのものに調整しなければならない。メタページ内の物理ページ横断（プレーンまたはダイ境界等）での鍵値の設定は、望ましくはハードウェア（ＨＷ）によって行い、Ｄワードオフセットおよびバイトオフセットレジスタはマニュアルでクリアし、ページオフセット値は現状どおりに保つ。メタページ横断での鍵値の設定は、望ましくはＦＷの指示によりＨＷにより自動的に行い、ＳＫＮオートインクリメントレジスタのページインクリメントビットに「１」を書き込むことで鍵調整を開始する。オートページインクリメントビットは、望ましくはメタページトランザクションの合間に設定され、望ましくはＨＷによる鍵調整の後に自動的にクリアされる。
【００６７】
メモリシステムまたはコントローラの中ではバッファ管理ユニット（ＢＭＵ）とフラッシュインターフェイス（＋ＥＣＣ）との間にスクランブラを配置できる。書き込み転送のときには、フィルパターンデータを多重化した後にスクランブリングを行うことで、フィルデータもスクランブルできる。ＥＣＣチェックビット生成はスクランブリングの後に実行（スクランブル済みデータに対して実行）でき、スクランブラに通す必要はない。ＥＣＣビットそのものは既にランダムで、重ねてスクランブルする必要はないため、問題はない。データ構造設計のため、重複するセクタデータパターン（ヘッダを含む）が連続するページ上で繰り返されることは滅多にない。
【００６８】
読み出し転送のときには、ミス−コンパリゾンカウンティング（miss-comparison counting）（後述するように「消去済み」セクタと「不良ブロック」のマーカを検出する場合にも使用）の後に逆スクランブリングを行う。ＥＣＣエラーの検出は逆スクランブリングの前でもよいが、訂正は、望ましくは逆スクランブリングの後に行う。こうすれば、逆スクランブリングの前にＥＣＣビットを訂正するためにセクタ全体をバッファに入れる必要がなく、余計なバッファ操作による性能への影響がなくなる。データと次の鍵の生成との間にはフィードバックメカニズムがないため、当初のデータストリームに含まれるＥＣＣエラーは、エラービットより先のスクランブルされていないデータストリームには影響しない。
【００６９】
オンチップコピー機能のサポート
ページタグ機能により、インタクトブロックは任意の論理ページで始めることができる。つまり、ページタグ値に従いブロック内の任意の物理ページにＬＢＡを書き込める。オンチップコピー機能では、データをコントローラに完全には通さずに同一ダイの異なるブロック間でデータをコピーできる。ＮＡＮＤの外にはスクランブラが存在するため、オンチップコピーによってデータがそのまま（逆スクランブルも再スクランブルもなく）コピーされるとは限らない。したがって、書き込み先の物理ページにかかわりなく、同じ論理ページアドレスには同じスクランブル鍵が使用される。
【００７０】
オンチップコピー（ＯＣＣ）をサポートするには、物理アドレスではなく論理アドレスに基づきページオフセット数レジスタを設定する（ほとんどのブロック種別の場合）。後述するように、ある種のブロック（制御ブロック等）の場合は物理アドレスに基づきページオフセット数レジスタが設定される。
【００７１】
論理ページ計算
メタブロックを物理メタページに分割するのと同様に、論理グループは論理ページに分割できる。それぞれの論理ページは１メタページと同じサイズを持ち、メタブロックの中に多数のメタページがあるように論理グループの中には多数の論理ページがある。論理ページアドレス（論理ページ値）はＬＢＡ値から求めることができる。それにはまずメタページのサイズでＬＢＡ値を割る。３２通りの鍵（３２ビット）しかないならば、以下の式のように下位５ビットのみとる。
2011508363.tif 000006
メタページ内のセクタはどれも同じ論理ページ値を持つ。ここではこれを論理ページオフセット値と記載することもある。前述したように、Ｄワードオフセットレジスタとバイトオフセットレジスタの値はページ内のセクタオフセットに応じて異なるため、具体的なスクランブル鍵はセクタごとに異なる。
【００７２】
初期化
ＦＷは初期化のときにオープンブロックリストの中にあるブロックをスキャンし、電源サイクル前のカードの最後の状態を確認する。ブロック種別（制御ブロック、データブロック等）はヘッダ内のＩＤバイトに従って確認し（後ほど詳述）、さらにヘッダをスキャンし、オープンブロックに書き込まれたセクタのＬＢＡを読み出してオープンアップデートブロックリストを作る。望ましくは初期化中、オープンアップデートブロックリスト作成前に、記憶データは全面的にスクランブルされる。ここでニワトリが先か卵が先かの問題が生じる。つまり、各セクタのＬＢＡを確認するには読み出しを行わなければならないが、各セクタの内容を正しく読み出すには、逆スクランブル鍵を設定しデータのスクランブルを解くため、論理ページアドレス（ＬＢＡに基づく）が必要となる。初期化におけるこの板ばさみの状況を解決するには、スクランブルされるセクタヘッダにスクランブル鍵の情報（ＳＫＮページオフセット数等のスクランブル鍵の決定に役立つ情報）を記憶しておき、カードの初期化のときに抽出すればいい。
【００７３】
初期化が完了した後、ＦＷはカードにおける各セクタのページオフセットレジスタ値と、ブロック種別と、位置とを把握しているため、ヘッダからＳＫＮを抽出する必要はない。あたかもＦＷにとってスクランブラが存在しないかのように、ＦＷはスクランブラレジスタを適切に設定でき、ＨＷはデータを読み出し逆スクランブルできる。
【００７４】
ヘッダにおけるスクランブル鍵情報の記憶
ページヘッダは、望ましくはスクランブル鍵の決定に役立つページオフセット数（あるいは他のスクランブル鍵情報）用として５ビットフィールド（あるいは５ビット以外の適当な長さ）を含む。図１３に表示されたヘッダ形式等、様々な構成が可能である。図１３のヘッダ形式には、ページ内の最初のセクタのための６バイトＬＢＡ／制御ヘッダと、残りのセクタのための２バイトヘッダがあり、シングルセクタＥＣＣページに適している（各セクタが独自のＥＣＣ冗長バイトによって保護される）。２バイトヘッダは、最初の４バイトがない点を除き、６バイトヘッダと同じである。ＬＢＡを記憶する必要があるのはページの最初のセクタだけである。データ構造ＩＤフィールド（ここではセクタＩＤフィールドとも呼ぶ）は、セクタの種類（制御セクタ、データセクタ等）を識別するために使用する。アプリケーションバイトフィールドは個々のアプリケーション用に残しておく。
【００７５】
ある実施形態ではページのサイズを大きくするのが望ましい。例えば図１４に見られるＥＣＣページは長さが４セクタあり（それぞれ２ＫＢのユーザデータ情報が一群のＥＣＣ冗長バイトによって保護される）、４つの各セクタにつき２バイトのセクタヘッダとページのＬＢＡを含み、１ヘッダ１４バイトとなっている。それぞれの２バイトセクタヘッダにはページオフセットフィールドがある。これはデータのスクランブリングに使われたページオフセット数を確認するために使われる。
【００７６】
望ましくはヘッダそのものも残りのセクタ内のデータとともにスクランブルされるため、実際のページオフセット値がヘッダに直接書き込まれるのではない。代わりにページコードがＦＷによってヘッダに書き込まれ、これが（ＨＷにより）スクランブルされ、マッピング済みページオフセットコードとしてメモリページに実際に書き込まれる。図１５に見られる典型的なページオフセットマッピング表は０ｘ６９Ｃ７３４Ｃ６のシードに対応するものである。これと同じデフォルトシードで別のマッピング表も可能であり、これとは別のデフォルトシードで異なるマッピング表も可能であるが、いずれも概念的にはこの表に類似したものとなる。この表の最初の列はページオフセット値（３２の鍵があるために０〜３１）である。２番目の列にはページコードが記載されている。これがＦＷによってメモリページに書き込まれる値である。ページのスクランブル鍵はページオフセット値に左右されるため、スクランブルはページごとに異なる。この例ではセクタ０の５ビットページオフセットフィールドがセクタ０内の最初のワードのビット位置１１〜１５に対応するため、書き込まれるページコードは該当するスクランブル鍵のビット１１〜１５によってスクランブルされ（３番目の列に表示）、４番目の列に表示されたマッピング済みページオフセットコードが生成される。
【００７７】
この参照表は、ページオフセット値と、ＦＷによって書き込まれ、スクランブルされ、メモリページに記憶されるページコードとの間に、１対１のマッピングを提供する。図１５の右側に見られる逆方向マッピング表は、実際にヘッダに記憶され、スクランブラを無効にした状態で読み出される、スクランブル済み５ビット値と、スクランブルされていないページオフセット値（ページ内で最初のセクタのＳＫＮ値）との間に、１対１のマッピングを提供する。このような参照表は特定のシードに基づき、望ましくはＦＷによりＲＡＭに記憶される。こうすれば書き込み中のマッピングが速くなり、スクランブルされたヘッダを読み出した後には速やかにＳＫＮを割り出すことができる。
【００７８】
ＦＷは書き込みコマンドのときに書き込みコマンドのブロック種別と、目標物理位置と、論理アドレスとを認識する。つまり、ＦＷは、論理ページに基づくものであれ、物理ページに基づくものであれ（本願明細書の他所で説明した制御ブロックの場合等）、ページオフセット値を認識する。ＦＷは書き込みコマンドの一部としてページオフセットマッピング表でページオフセット値を調べ、この表からヘッダのページオフセットフィールドに５ビットのページコードを書き込むことができる。それらの５ビットはページ内のデータとともに（例えば、ＨＷにより）スクランブルされ、特別な処理は必要ない。スクランブリングの後、５ビットマッピング済みページオフセットコードはそれぞれ別々の値を持ち、初期化のときにはこれらをもとにページオフセット値を一意に識別する。
【００７９】
ヘッダからのＳＫＮ抽出
初期化のときには鍵がまだ分からないため、スクランブラを迂回してヘッダを読み出すことができる。望ましくはヘッダ全体がスクランブルされるため、スクランブラを無効にした状態でページオフセット数を単純に読み出すことはできない。代わりにマッピング済みページオフセットコードを読み出し、図１５の逆方向マッピング参照表を使用するなどしてページオフセット値を割り出し、スクランブル鍵を計算する。初期化のときに読み出す必要があるのは各メタページの先頭のヘッダだけであり、Ｄワードオフセットとバイトオフセットはいずれも０に等しいため、５ビットのヘッダフィールドから抽出されるページオフセットは最終ＳＫＮ値に相当する。かかる表を変換関数に置き換えることもできる。かかる表を使用すれば、ページオフセット値と、実際にヘッダに書き込まれる５ビットフィールドとで１対１のマッピングが保証される。
【００８０】
ＳＫＮが分かれば、ＦＷでスクランブルシードをＳＫＮの分だけ左に循環させてスクランブル鍵を計算できる。鍵が判明したら、スクランブル鍵によりヘッダデータをＸＯＲ化し、ヘッダ情報を解くことができる。あるいは、スクランブラを有効にし、スクランブラレジスタを設定し、データを逆スクランブルするためにスクランブラ回路を使ってセクタを再度読み出すこともできるが、ヘッダの長さは通常僅か数バイト（例えば、６バイト、１４バイト等）だから、単にＦＷでデータをＸＯＲ化するほうが格段にシンプルかつ迅速である。ＦＷで逆スクランブルする場合は、前述したＸＯＲ操作のたびにＦＷで鍵の循環を計算（あるいは鍵をシフト）しなければならない。
【００８１】
図１５に見られる表は、物理ページ内の最初のＥＣＣページのみ参照するものであり、物理ページ内の他のＥＣＣページの場合、フラッシュに書き込まれる値は異なる。これまで説明してきた典型的な実施形態の場合には、図１６の表にこれを見ることができる。この表は、３２あるページオフセット値ごとに物理ページ内の４つのＥＣＣページのＳＫＮ値を示すものである。Ｃｏｌｕｍｎ＿Ｓｔａｒｔ値と、Ｄワードオフセット値と、物理ページ内における各バイト位置のバイトオフセット値と、対応するＳＫＮも表示されている。特にページの先頭で始まらないメモリの読み書きの場合にＳＫＮ操作の判断を迅速化するため、この表も望ましくは初期化のときにＦＷで作成する。また、前述したように、ＳＫＮを再帰的に計算する場合に特に有益である。
【００８２】
シーケンシャルなアップデートブロック／
インタクトブロックにおけるページオフセット数
シーケンシャルなアップデートブロックまたはインタクトブロックは、ブロックへの最初の書き込みのときにページタグオフセットパラメータを設定する。これは、論理グループの中でアップデートブロックに書き込まれる最初の論理ページのオフセットによって決まる。論理ページは１つのメタページに書き込まれる一連のセクタであってもよく、つまり、メタページのサイズを持ち、メタページの境界に揃えられる。ページタグパラメータが設定されると、最初の論理ページから全ての論理ページが順次アップデートブロックに書き込まれ、それぞれの論理ページは書き込み先の物理ページに対して同じオフセットを持つ。
ページタグ値からスクランブル鍵を独立させるため、ページオフセット数レジスタの設定は、物理ページ値ではなく論理ページ値に従って決定される。ページタグがゼロの場合には２つの値が一致する。
【００８３】
カオス的アップデートブロックにおけるページオフセット数
不連続セクタ順に書き込まれるブロックはカオス的アップデートブロックとして知られている。シーケンシャルなアップデートブロックと同様に、カオス的アップデートブロックもまたページオフセット数として論理ページを使用し、オンチップコピー機能の使用を可能にする。ここでの問題は、同じページを同じブロックに繰り返し書き込むことができるため、どのページにも同じスクランブル鍵が使われブロック全体を通じて反復するパターンができることである。この問題を回避するため、カオス的アップデートブロックの場合は下位メモリページのみ使用する。（つまり、１メモリセル当たり４  ＭＬＣ状態のうちの２状態のみ書き込むことで当該ブロックをバイナリブロックとして扱う。）こうすることで反復パターンに起因するブースト効果が緩和され、プログラムディスターブ現象は回避される。図２Ｃから分かるように、下位ページのみ書き込む場合の２状態間のしきい値電圧差は、下位・上位ページを両方とも書き込む場合より大きいため、マージンの向上が達成される。
【００８４】
制御ブロックとスクラッチパッドブロックにおけるページオフセット数
主に単一セクタ単位でアクセスされる制御ブロックにはオンチップコピーを使用しない。このため、望ましくは物理ページをページオフセット数として使用し、書き込み先の物理ページ番号に対応する鍵でページにスクランブルをかけるようにする。また、メモリセルの信号マージンを拡大するため、制御ブロックの場合にも下位メモリページのみ使用できる。
【００８５】
ファイルシステムブロックにおけるデータのスクランブリング
望ましくは、ブートブロックとファームウェア（ＦＷ）ブロック（ファイルシステムブロック内）を含む全ての制御ブロックをスクランブルする。典型的なフラッシュファイルシステムではＦＷによってブートブロックをスキャンし、読み出すことでファイルシステムブロックのポインタを見つける。このファイルシステムブロックも部分的にはＦＷによって読み出される。ブートブロックとファイルシステムブロックはいずれも書き込み時にスクランブルされるため、ＦＷでデータを逆スクランブルできなければならない。ＦＷではページの読み出し（＋逆スクランブル）に必要な機能だけサポートすればよい。具体的には、シードを読み出す種々のレジスタの設定と、使用する逆スクランブル鍵の指定をＦＷでサポートする。
【００８６】
メタブロックジオメトリと、ＥＣＣレベルと、デバイスＩＤに関する情報を保持するブートブロック内の最初のページには、望ましくはブートブロックとファイルシステムブロックのスクランブルに使ったスクランブラシードを入れる。しかし、最初のページそのものは、望ましくはＨＷに組み込まれたデフォルトのスクランブラシードを使ってスクランブルする。初期化プロセスが始まると、デフォルトシードを使って最初のページが読み出される。その後、カードの残りの部分に使用するシードが最初のページから読み出され、スクランブラに読み込まれ、以降の操作に使われる。ブートブロック内の残りのページは、（他の制御ブロックと同様に）物理ページ値に従って設定されるページオフセットレジスタを用いてスクランブルされる。ＦＷには、物理ページオフセットに従ってレジスタを設定する機能を盛り込まなければならない。スクランブラを正しく動作させるには、たとえシードがデフォルトシードと同じ値であっても、ブートブロックでシードを明示的に設定しなければならない。シード値が０の場合は基本的に、たとえスクランブラが有効になっていてもデータはスクランブルされない。
【００８７】
不良ブロック検出
通常、不良ブロックの検出はスクランブラを迂回して行う。最初のダウンロードではどのブロックにも情報が入っていないから問題はない。以降のダウンロードでカードにある程度の情報が書き込まれた後には、スクランブルされたデータが誤って不良ブロックと解釈されることがある。不良ブロックのマーキングはベンダによって異なるため、ベンダごとに異なる検出方式が求められる。
【００８８】
一部のベンダでは、ブロック全体に０を書き込むことによって工場不良ブロックをマークする。前述したように、スクランブル鍵（すなわち、デフォルト値０ｘ６９Ｃ７３４Ｃ６）を使用する場合、スクランブリング後に全てのヘッダバイト（ＬＢＡとデータ構造ＩＤ等）が値「００」となり、ページ内の最初のセクタに記憶されるようなヘッダの組み合わせはあり得ない。通常、ヘッダはスクランブル後に全てのヘッダバイトが「００」となる可能性をなくすように設計される。したがって、ヘッダで「００」パターンを探す検出方式を利用できる。そのような検出は、スクランブラを迂回することによって容易く果たすことができる。
【００８９】
ベンダによっては、ユーザデータエリア内の単一バイト（ヘッダエリアやＥＣＣではなくセクタの５１２データバイト以内）に「ＦＦ」以外のパターンを書き込むことによって工場不良ブロックをマークする。このバイトの具体的な位置はメモリのタイプによって変化する。ビッグブロック（各ページに複数のセクタを含む）ＭＢＣメモリではしばしば、最終ページのバイト２，０４８に非ＦＦパターンを書き込むことで不良ブロックをマークする。ビッグブロックＢＩＮメモリ（１セル当たり単一ビット）では、最初のページか２番目のページのバイト２，０４８に非ＦＦパターンを書き込むことによって不良ブロックをマークする。
【００９０】
スクランブリングの後には不良ブロックマーク用バイトが非ＦＦ値を持つことがあり、スクランブルがかかったデータ構造ＩＤも認識されないため、誤って不良ブロックとして検出されることがある。しかし、ＥＣＣエンジンは全てのビットが全てゼロか全て「ＦＦ」となる場合に訂正不能のＥＣＣエラー（ＵＥＣＣ）を指摘するので、ＥＣＣエンジンのミス−コンパリゾンカウンティングブロックを使って工場不良ブロックと良好ブロックを区別できる。
【００９１】
検出のときにはスクランブラを迂回し、ＥＣＣエンジンを有効にする。不良ブロックマークを保持するセクタの読み出しに成功する場合は、不良ブロックマークバイトの値にかかわりなく、ブロックは良好ブロックとして検出される。ＵＥＣＣでも訂正可能なＥＣＣでもないセクタは正常に読み出される。不良ブロックマークを保持するセクタの読み出し結果がＵＥＣＣで、不良ブロックマークバイトの値が全「ＦＦ」でなければ、不良ブロックの疑いがかかる。この場合は疑わしいブロックのページ０を読み出す。ページ０内の全セクタがＵＥＣＣになるならば、不良ブロックと判断される。ページ０内のいずれかのセクタが正常に読み出されるならば、良好ブロックと判断される。勿論これは数ある不良ブロック検出法の１つにすぎない。
【００９２】
典型的な実施例
前述した手法を様々な特定の実施例において実行することができる。図１７には、前述したスクランブラ機能を実施する典型的な作業の流れ図が見られる。図１８に見られる典型的なモジュールをこれより説明する。かかるスクランブラモジュールにはＡＳＩＣの実施例が適しており、望ましくは自立型のハードウェアブロックとし、ＣＰＵのタイプや特定のＡＳＩＣ設計アーキテクチャに左右されることなく様々なＡＳＩＣプロジェクトの中で容易に統合できる（もしくは除去できる）ようにする。
【００９３】
このスクランブラハードウェアブロックはデータ経路に直接配置できる。前述したように、ヘッダやユーザデータと併せてＥＣＣバイトもスクランブルでき、その場合は当然ながら、メモリインターフェイスへ至るデータ経路の終端にスクランブラブロックを配置すべきである。しかし、ＥＣＣビットのスクランブルは必須ではないから、終端より前にスクランブラを配置することもできる。このスクランブラモジュールにとっては１つのクロックソースで十分である。クロック周波数は、望ましくはスクランブラモジュールのバス速度以上とする。
【００９４】
例えば、３２ビットのデータ入力バスとデータ出力バスでスクランブラにデータを流すことができるが、そのようなポートのサイズを内部ＡＳＩＣバスによって１６ビットまで制限することができる。専用の１６ビット制御データ入力バスはコントロールレジスタへのアクセスを提供する。５ビット入力アドレスバスはコントロールレジスタをアドレス指定し、ＨＷフロー制御操作中に開始鍵番号をラッチするためのものである。
【００９５】
内部コントロールレジスタへのアクセスとＨＷフロー制御のため、望ましくは１組の制御線を盛り込む。スクランブラモジュールを初期状態にリセットしＨＷフロー操作を準備するには、リセット線をアサートする。Ｃｏｎｔｒｏｌ＿Ｄａｔａ＿Ｉｎ［１５：０］を通じてレジスタアクセスを制御するため、読み出し／書き込み（Ｒ／Ｗ）制御信号を提供する。加えて、コントロールレジスタアクセスモードとＨＷフロー制御モードを選択するためにＣｏｎｔｒｏｌ＿ＳＥＬ線を設ける。デフォルト選択は、望ましくはＨＷフロー制御に設定する。
【００９６】
スクランブラモジュールは、シードレジスタ、コンフィギュレーションレジスタ、ＳＫＮページオフセットレジスタ、ＳＫＮセクタオフセットレジスタ等、数通りのレジスタを含む。シードレジスタは、望ましくはシードと同じ初期鍵すなわちＫｅｙ０を記憶する３２ビットＲ／Ｗレジスタである。デフォルト鍵は０ｘ６９Ｃ７３４Ｃ６かこれとは別の適当な値とすることができる。加えて、記憶済みシードレジスタ値のシフタへの読み込みをトリガするためにコントロールレジスタを設ける。
【００９７】
また、スクランブラモジュールの動作を制御するためにコンフィグレーションレジスタが含まれる。例えば、このような制御には、シフタ連続循環を有効または無効にするかが含まれる。望ましくは、連続シフタ循環有効をデフォルト設定とする。循環を無効にすると、メモリページ全体で同じ鍵の使用が余儀なくされる（プリクロッキングにより鍵が循環される）。コンフィグレーションレジスタでは、スクランブリング機能の完全迂回を有効にするか否かも制御する。迂回が有効になると、データは操作されることなくモジュールを通過し、遅延と消費電力は最小限になる。望ましくは、完全迂回有効をデフォルト設定とする。
【００９８】
ＳＫＮページオフセットレジスタは、望ましくは開始鍵番号を記憶する５ビットＲ／Ｗレジスタである（３２通りの鍵を仮定）。デフォルト値は、望ましくは０（Ｋｅｙ０）とする。コントロールレジスタアクセスモードでは、望ましくはリセットのときにレジスタ値をデフォルト値に戻す。ＨＷフロー制御モードでは、リセットのときにアドレス入力ポートからレジスタ値を読み込む。ＳＫＮレジスタに読み込まれる値は、物理ページアドレスか論理ページアドレスの下位５ビットに対応するメモリページアドレスに基づく。
【００９９】
Ｄワードオフセット数（５ビット値等）とバイトオフセット数（２ビット値等）は別々のレジスタに記憶できるが、ＳＫＮセクタオフセットレジスタと呼ばれる１つの７ビットＲ／Ｗレジスタに便宜的にまとめることもできる。このＳＫＮセクタオフセットレジスタは、開始鍵番号からのオフセットを記憶するものと見ることができる。デフォルト値は、望ましくは０とする。このレジスタ値は、望ましくは動作モードにかかわりなくリセットのときにデフォルト値に戻るものとする。
【０１００】
前述したように、この７ビットレジスタは３２ビットの鍵サイズに基づき以下の表１に記載された２つのフィールドを含む。
2011508363.tif 000007
ＳＫＮセクタオフセットレジスタのビット［６：０］は、メモリカラムアドレス［６：０］か論理ページの先頭からの相対的７ビットバイトオフセット（前述したＣｏｌｕｍｎ＿Ｓｔａｒｔ値）に直接対応している。５ビットＤワードオフセット数は、スクランブル／逆スクランブルされる開始セクタの最初のバイトに対応するオフセット鍵番号を指示する。Ｄワードオフセット数はＳＫＮを基準とするため、値０はセクタ０アクセスに相当する。
【０１０１】
２ビットのバイトオフセット数は１鍵内での開始バイト位置を指示する。これは鍵がセクタ境界にまたがる状況に対処するためのものであり、０以外のカラムオフセットでメモリの読み出しを行う場合（メモリページの中間で読み出しが始まる場合）に適切なＳＫＮを決定する上で重要な判断材料となる。各ページのセクタ０のバイトオフセットは０である。他のセクタのバイトオフセットは、セクタサイズと、セクタ数と、バイト単位による鍵サイズ次第で決まる。３２ビット鍵に基づくＤワードオフセット数とバイトオフセット数の実施例は、図７、８、１０、および１１との関係で前に紹介した。
【０１０２】
スクランブラモジュールの内部にはまた、一定左方向にビットを循環させるパラレルイン／パラレルアウトシフトレジスタかこれに類似する回路がむしろ設計される。シフトされ一端から外されるビットは周回的に他端に復帰する。固定サイズ（３２ビット等）により、カラムオフセットによるメモリ読み出しで開始鍵番号を復号化するシステムの実装が容易になる（ＳＫＮページオフセットレジスタの説明を参照されたい）。このサイズによって鍵の数も決まる。
【０１０３】
シフトレジスタは、望ましくはリセットのときに自動的にシードを再度読み出し、開始鍵番号を読み出す。また、シードレジスタから最初の鍵を読み出せるようにする。ＳＫＮレジスタに記憶されたカウントに基づくプリクロッキングも可能にする。このようなプリクロックカウントはＳＫＮページオフセットレジスタに記憶されるページオフセット数と、ＳＫＮセクタオフセットレジスタに記憶されるセクタオフセット数に依拠することができる。シフトレジスタを使用すると、特にプリクロッキングのコンセプトにより待ち時間が生じる。これに対処するには、高速クロックを使用するか、バレルシフタ等の高速タイプのシフトレジスタを利用してデータが到着する前にプリクロックする。
【０１０４】
スクランブラモジュールはまた、２つの入力ポートと１つの出力ポートを有するＸＯＲ回路を含み、各々３２ビット幅まででパラレルイン／パラレルアウト操作に対応する。一方の入力ポートはデータ入力ポートへ接続され、他方の入力ポートはシフタ出力へ接続される。ただ１つの出力ポートはデータ出力ポートへ接続される。
【０１０５】
ＨＷフロー制御では、Ｃｌｏｃｋ、Ｒｅｓｅｔ、Ａｄｄｒｅｓｓ［４：０］のみでスクランブラ動作を全面的に制御でき、レジスタアクセスを必要としない。ひとたびスクランブラのレジスタが構成されたら、これが標準の動作モードとなる。基礎的なスクランブリング操作は、例えば以下の要領で果たすことができる。まずはスクランブラコンフィギュレーションレジスタをセットアップし、次にＨＷフロー制御モードに切り替える。アクセスすべき最初の５ビットメモリページアドレスをアドレス入力バス沿いに提示する。ＲＳＴパルスがアサートされると、アドレス入力バスからページ開始鍵番号レジスタが読み込まれ、シフタにはシード（シードレジスタの内容）が読み込まれる。クロック遷移に応じてスクランブラはスクランブルがかかっていないデータをデータ入力ポートから引き出し、データをスクランブルし、スクランブルしたデータをデータ出力ポートへ出力し、Ｒｅｓｅｔにより構成が変更されるまでこの要領で作業を続ける。いくつかの実施形態では、ビットシリアルシフタをプリクロックしスクランブラで使用する適切なスクランブル鍵を計算するため、いくつかのクロック遷移が必要となることもある。スクランブルを解く場合も全般的な動作は同じである。
【０１０６】
通常、メモリアクセスがメモリページの先頭に揃う場合はスクランブラモジュールを初期化する。これが標準の動作モードであり、（１）ＨＷフロー制御動作モードを有効にし、（２）適切な下位５ビットメモリページアドレスをスクランブラアドレス入力ポートへ送信するにあたって、最小限のＦＷ制御を必要とする。メモリアクセスがメモリページの先頭で始まらない場合は、コントロールレジスタアクセスモードにより開始鍵番号レジスタに適切な鍵値を読み込まなければならない。コントロールレジスタアクセスモードが有効になると、ＳＫＮページオフセットレジスタにメモリページアドレスが読み込まれ、ＳＫＮセクタオフセットレジスタにメモリカラムアドレスが読み込まれた後、スクランブラの動作はＨＷフロー制御モードに切り替わる。
【０１０７】
スクランブラは、制御データとしてファイルシステムに記憶されたパラメータ設定により制御できる。役に立つパラメータには、例えば、スクランブラを迂回するか否か、スクランブラのデフォルトシードを使用するか、それとも別のシードを読み込むか、連続循環のためにシフタを有効にするか、それとも診断等のために無効にするかといったことが含まれる。そのような構成は、望ましくは電源投入初期化のときに行う。
【０１０８】
その全体が本願明細書において参照により援用されている２００７年６月１３日に出願されたSharonらによる同時係属出願中の「Randomizing for Suppressing Errors in a Flash Memory」という米国特許出願第１１／８０８，９０５号（特許文献８）に記載されたランダム化モジュールを、本願明細書に記載されたデータスクランブリングモジュールに概ね相当するものとみなせば、特許文献８の図もまた本発明によるメモリシステムおよびモジュールを表しているといえる。
【０１０９】
図１９を参照すると、メモリブロック内の各ワード線の最初の１６バイトでスクランブルがかかっていない反復０ｘＦＦデータのメモリセル状態を示す表が示されている。図２０は、同じワード線の最初の１６バイトで前述したスクランブルをかけた後のスクランブル済みメモリセル状態を示す。
【０１１０】
追加の代替案
いくつかの実施形態では、システムで２段階のメモリ読み出し操作を行ってもよい。まず逆スクランブラを無効にして読み出しを行い、ＳＫＮを抽出し、抽出したＳＫＮを用いてスクランブルがかかっていない鍵を検索し、次にスクランブルがかかっていないＳＫＮを使用し逆スクランブラを有効にして２番目の読み出しを行う。しかし、この場合はシステム全体の性能に影響し、ホストのタイムアウトが懸念される。これとは別の実施形態も可能であるが、システム設計の課題および／または要求のトレードオフになる。例えば、ヘッダ等の制御情報は必ずしもスクランブルする必要はなく、その場合でもページ内データをランダム化する利点の多くは残る。もうひとつの実施例として、ＳＫＮ情報は暗号化されていない状態でセクタのヘッダに記憶することができる。
【０１１１】
いくつかの実施形態では、ページオフセット値ではなくＳＫＮをページヘッダに記憶できる。あるいは、ページに使用する最初の鍵を記憶できる。ビット線にわたって望ましくないデータパターンができる可能性があるが、鍵やページオフセット値は、まったくスクランブルされていない状態で記憶することもできる。
【０１１２】
前述した循環スクランブル鍵生成手法が確定的スクランブル鍵系列を生成する唯一の方法というわけではない。線形シフトフィードバックレジスタ（ＬＦＳＲ）を利用し、最初のシードに基づき擬似ランダム系列を生成する方法もある。このシードは、前述したものと同様のやり方で論理ページアドレスか物理ページアドレスに基づき各ページに関連付けることができる。前に援用されている米国特許出願第１１／８０８，９０５号（特許文献８）には、フラッシュメモリでデータをランダム化するＬＦＳＲの用例が記載されている。
前述した説明では、ページオフセット値を記憶するページオフセットレジスタ等、特定の値を記憶するレジスタに頻繁に言及している。これらは典型的なスクランブラの実装に言及するものであり、汎論を制限するものとして見るべきでない。
メモリページは多くの場合８〜１６セクタを含むが、これとは別の値も使用できる。それぞれのセクタは通常５１２バイトのデータとセクタヘッダを含むほか、ＥＣＣ冗長バイトを含むこともある。一部の形式では一群のＥＣＣバイトで複数のセクタを保護する。
本願のブロック図は、ブロックを結ぶ単一ノードという用語を用いて説明できる。しかし、文脈次第ではかかる「ノード」が実際には差分信号を伝送する１対のノードに相当することもあれば、数通りの関係信号を搬送するか、デジタルワードを形成する複数の信号を搬送する複数の個別電線（バス等）に相当することもある。ここで用いる結合とは、直接的な結合と間接的な結合のいずれかを意味する。
【０１１３】
ここで用いる用語は限定としてとられるかもしれないが、典型的な実施形態を説明するものにすぎず、発明自体を限定するものとして解釈すべきでない。これまで不揮発性ＮＡＮＤメモリの典型的な脈絡の中で様々な実施形態を説明してきたが、本発明は揮発性メモリデバイス等、タイプの異なるメモリデバイスにも役立てることができる。
ここで用いた鍵系列のコンセプトは実際、実施例の一目的にすぎない（一度に３２ビット等）。例えば、８つの８ビット鍵からなる系列は、実際には６４ビット鍵１個と何ら変わりない。例えば、スクランブル鍵が十分に長ければ、一定ビット幅のデータチャンクに対して鍵はただ１つでよいが、鍵が短ければ、データチャンクを完全にスクランブルするために一連の鍵が必要となる。実施形態によっては複数のシード鍵が使われ、それらのシード鍵は例えば論理アドレスに基づき決定される。
【０１１４】
前述した詳細な説明では、本発明の数ある実施例のほんの一握りを説明したにすぎない。このため、この詳細な説明は限定ではなく例説を目的とするものである。ここに記載された説明を踏まえれば、本発明の範囲と趣旨から逸脱することなく、ここに開示された実施形態の変更や修正を果たすことができる。また、前述した発明概念と実施形態は単独での使用と様々な組み合わせでの使用が具体的に考えられる。本発明の範囲を規定するものは添付の特許請求の範囲とこれの同等物だけである。
【図１】
2011508363.tif 000008
【図２Ａ】
2011508363.tif 000009
【図２Ｂ】
2011508363.tif 000010
【図２Ｃ】
2011508363.tif 000011
【図３】
2011508363.tif 000012
【図４】
2011508363.tif 000013
【図５】
2011508363.tif 000014
【図６】
2011508363.tif 000015
【図７】
2011508363.tif 000016
【図８】
2011508363.tif 000017
【図９】
2011508363.tif 000018
【図１０】
2011508363.tif 000019
【図１１】
2011508363.tif 000020
【図１２】
2011508363.tif 000021
【図１３】
2011508363.tif 000022
【図１４】
2011508363.tif 000023
【図１５】
2011508363.tif 000024
【図１６】
2011508363.tif 000025
【図１７】
2011508363.tif 000026
【図１８】
2011508363.tif 000027
【図１９】
2011508363.tif 000028
【図２０】
2011508363.tif 000029
【国際調査報告】
2011508363.tif 000030
2011508363.tif 000031