Bad Block Scan
NAND Flash Memory(以降NAND)のBad Block とは、データの保存に適さないブロックのことです。
Bad Blockには、初期Bad Blockと後発Bad Blockの2種類があります。
初期Bad BlockはNANDの製造工程で容量の1%程度で発生するものです。
後発Bad BlockはNANDのプログラムとイレーズを繰り返すことで、劣化により発生するものです。
SigNAS3では、GUI のOperations のメニューに、初期Bad Block検出機能が装備されています。

この機能は、初期(工場出荷時)のBad Block をスキャンします。
各ブロック内の最初のページと最後のページの指定バイトをリードし、どちらかが "00" であれば、そのブロックはBad Blockであると判断します。
殆どのNANDメーカーが識別の為、出荷前に上記のように、Bad Block Marker を記録していますが、詳しくはデータシートを確認して下さい。

Bad Block が存在する場合の、Script 実行時の注意
下図のように "Treminate with NAND Fail "を有効にした状態で、Scriptを実行中にBad Blockをアクセスすると、下図のようなメッセージと共に、Scriptの実施が中断します。
中断を避けるためには、 "Treminate with NAND Fail "のチェックをはずすか、Bad Blockの無いエリアで測定を行います。
但し、Error Rate測定では、Bad Block Registrationを事前に行えば、その情報を基に
自動的にBad Blockをスキップします。

ScriptによるBad Block 検出例
プログラム(Script等で)Bad Blockを検出することも可能です。
あるNAND (3D-TLC)のデータシート内のBadBlockの定義は、下記の通りです。
SLC mode にて各ブロックの最初のページにプログラムを行った時に、フェイルとなる。
この定義に基づき、簡単なScriptで検査してみました。
【Script 例】

Script実行


測定結果の比較検証
下記の通り、GUIのBad Block Scan 機能による測定結果と一致しています。
Sub board

Script

RESULT file

このScriptでは、
NANDメモリへのプログラムのループは0から始まっているので、Program Failとなったブロックは、ブロック番号 = リピートカウント ー1
62-1 = 61 --> 3D hex
286-1=285 --> 11D hex
GUIのBadBlockScanの結果

Read Status の定義(あるNANDのデーターシートより)

Bad Block の定義は、ユーザにより種々あります。
SigNAS3のScriptには、下記のコマンドもありますので、評価や選別の目的に合わせて適当な検査プログラムを作成して下さい。
BKRDCP: Block Read & Compare
指定したブロックの全ページをリードし、指定したパターンと比較します。
不一致の場所と比較結果(XOR値、不一致のビットが1で表される)をCompare Fileに保存します。
BKRDEC: Block Read & Error Count
指定したブロックの全ページをリードし、指定したパターンと比較を行い、エラー数をカウントします。
エラーカウント結果をError Count Fileに保存します。