不良ブロックの処理
NAND型フラッシュは、フローティングゲートの絶縁部の消耗により、メモリセルの書き込みが規定時間で完了しなくなることがあります。
その場合、消去やプログラムの実行がエラーとなるため、該当ブロックをバッドブロックとして以降のメモリ管理対象から除外する必要があります。
不良ブロックが発生した場合には、このブロックをこれ以降利用しないようにフラッシュの管理対象から除外します。
ただし、エラーが発生した時点では、そのブロック中に有効なデータがまだ格納されたままになっている場合があります。
その場合には、その有効データを正常なブロックに移動したうえで、不良ブロックを除外する必要があります。
不良ブロックは、メモリの出荷直後から、10万回以降の書き換え寿命までの間、ほぼ均等な確率で発生するといわれています。
発生確率は製造プロセスやルールによっても異なりますが、フラッシュ全体でみて、カタログデータで規定されている不良ブロックの総数を超えない範囲 (おそらく 一桁程度小さい) で発生します。
このような、通常使用時に発生する不良ブロックを後天性の不良ブロックと呼びます。
NANDフラッシュの場合には、工場出荷時にすでに不良ブロックが存在する場合があります。
これを先天性の不良ブロックと呼びます。
出荷検査時点で見つかった不良ブロックにはバッドブロックマークが付けられます。
バッドブロックマークは、通常は各ブロックの先頭ないしは先頭から規定数分のページ中の特定オフセット上のビットが「非1」になっているかどうかで示されます。
正常なブロックは消去直後のように、すべてのビットが「1」になっているので、このマークを見分けることができます。
そのため、フラッシュのドライバソフトウェアやフォーマットプログラムを開発する場合には、この点にも留意する必要があります。
また、このことは、製品の機能的な側面だけでなく、工場での製品の製造工程においても意識しておく必要があることを意味します。
プリント基板上にマウントされるNAND型フラッシュに対して、初めて初期データやプログラムイメージを書き込む際に、すでに先天的不良ブロックが存在し、そのブロックを検出する手順や、検出後にその状態を保持し、通常のシステム起動後にフラッシュのメンテナンスプログラムにその情報が正しく渡されないといけません。
確率的にはどのブロックも同じ割合で先天性不良となりますが、実際に利用するにはこのままではたいへん不便です。
そこで、NAND型フラッシュでは、工場出荷時にブロック0だけは、必ず正常ブロックであることを保証しています。
開発段階でフラッシュへのアクセスを確認したり、製品の組み立て工程で、製品情報の重要なデータを必ずここに書くなど、ブロック0の存在はいろいろと役に立ちます。

