BADBlock検出について
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に保存します。
全ブロック検査について
2023/06/16 に公開させて頂きました「BAD Bolck Scan」では、SigNAS-3のGUIでの方式、専用コマンドを使用したScriptによる方法を紹介させて頂きました。
実は、Script作成に不慣れな方でも…
GUIに準備された 「Error Rate」を使えば、容易に同様な検査が可能です。
詳細は後半をご覧ください
BAD Blockの定義は、お客様によっても異なりますが、特別な用途では NAND Flash Memory (以下NAND)全ブロックについて、1箇所もエラーが無いことが求められます。
この検査の手順と要件は下記の通りです。
- 全ブロックにデータをプログラム(書込み)し、読取りを行い、実施中にエラーが発生しないこと。
- そしてデータ比較し、不一致な箇所が存在しないこと。
これに対応したScript例を下記します。
- All Area Write & Read to find NG Block
- VSET04 0 0000
- 'Repeat for all Blocks (4096dec=1000hex)
- REPEAT 0000009 0001000
- 'Block Erase
- BKERAS 0 $V04_0$
- 'Block Program
- BKPROG 0 $V04_0$ RDMOVL 456789AB
- Block Read Error count
- BKRDEC 0 $V04_0$ RDMOVL 456789AB
- BKRDCP 0 $V04_0$ 0210 RDMOVL 456789AB
- 'Block number increment
- VADD04 0 0001
※12、13行は目的により何れか一方でも十分かもしれません
実行時の設定画面

BKRDEC: Block Read & Error Count
指定したブロックの全ページをリードし、指定したパターンと比較を行い、エラー数をカウントします。
エラーカウント結果をError Count Fileに保存します。
BKRDCP: Block Read & Compare
指定したブロックの全ページをリードし、指定したパターンと比較します。
不一致の場所と比較結果(XOR値、不一致のビットが1で表される)をCompare Fileに保存します。
Compare Fileの内容
Line | Cnt | Channel | Chip | Block | Page | WordNo | Comp |
00000008 | 000008DD | 0E | 0 | 18DC | 002C | 01D9 | 00002000 |
また、Result File には、コマンド実行時に発生したエラー情報が記録されます。
Result Fileの内容
- Error at Line9 Repeat-103-Line11: Erase Fail CH11 (Status CH11:E1)
- Error at Line9 Repeat-103-Line13: Block Program Fail CH11 (Status CH11:E3)
- Error at Line9 Repeat-431-Line11: Erase Fail CH11 (Status CH11:E1)
- Error at Line9 Repeat-431-Line13: Block Program Fail CH11 (Status CH11:E3)
実は、Script作成に不慣れな方でも…
GUIに準備された 「Error Rate」を使えば、容易に同様な検査が可能です。
但し、Data Compare Errorが発生した場所は、Blockの特定までです。
勿論、GUIの他の機能で、より詳しく調査することも可能ですので、興味ある方は、Operation Guide を参照してチャレンジして下さい。

測定エリアをパラメータに設定した後、”Exceute” を押下すると測定が開始されます。


【Save Log】
チェックすると、ブロックごとのエラー数をファイルに保存します。
SigNAS3の実行ファイルSigNAS3.exe と同じフォルダに、ErrorRate.logとして保存します。
同名のファイルが既に存在する場合は上書きされます。
ファイルの内容(例)
Repeat | Channel | Block | BitError | UncError1 | UncError2 | UncError3 | UncError4 |
---|---|---|---|---|---|---|---|
0 | 11 | 2 | 1 | 1 | 0 | 0 | 0 |
0 | 11 | 4 | 3 | 3 | 0 | 0 | 0 |
0 | 11 | 6 | 2 | 2 | 0 | 0 | 0 |
0 | 11 | 12 | 1 | 1 | 0 | 0 | 0 |
【Save Failure Log】
チェックすると、NANDの動作でエラーが発生した場合、エラー内容をファイルに保存します。
SigNAS3の実行ファイルSigNAS3.exe と同じフォルダに、ErrorRateFailure.logとして保存します。
同名のファイルが既に存在する場合は上書きされます。
ファイルの内容(例)
Repeat | Channel | Block | FailureDescription | |
---|---|---|---|---|
0 | 11 | 102 | EraseFail | |
0 | 11 | 430 | EraseFail |
尚、W/Rのデータエラーのより詳細な評価は、2023/6/24に公開した「Readデータエラーの検査」もご参考として下さい。