BADBlock検出について

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 を記録していますが、詳しくはデータシートを確認して下さい。

下図のように "Treminate with NAND Fail "を有効にした状態で、Scriptを実行中にBad Blockをアクセスすると、下図のようなメッセージと共に、Scriptの実施が中断します。

中断を避けるためには、 "Treminate with NAND Fail "のチェックをはずすか、Bad Blockの無いエリアで測定を行います。

但し、Error Rate測定では、Bad Block Registrationを事前に行えば、その情報を基に自動的にBad Blockをスキップします。

プログラム(Script等で)Bad Blockを検出することも可能です。

あるNAND (3D-TLC)のデータシート内のBadBlockの定義は、下記の通りです。

SLC mode にて各ブロックの最初のページにプログラムを行った時に、フェイルとなる。

この定義に基づき、簡単なScriptで検査してみました。

Script 例

Script 実行

BADBlock検出について

測定結果の比較検証

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

Sub board

Script

RESULT file

このScriptでは、NANDメモリへのプログラムのループは0から始まっているので、Program Failとなったブロックは、ブロック番号 = リピートカウント ー1

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による方法を紹介させて頂きました。

Bad Block Scan

NAND Flash Memory(以降NAND)のBad Block とは、データの保存に適さないブロックのことです。 Bad Blockには、初期Bad Blockと後発Bad Blockの2種類があります。 初期B…

実は、Script作成に不慣れな方でも…

GUIに準備された 「Error Rate」を使えば、容易に同様な検査が可能です。

詳細は後半をご覧ください

BAD Blockの定義は、お客様によっても異なりますが、特別な用途では NAND Flash Memory (以下NAND)全ブロックについて、1箇所もエラーが無いことが求められます。

この検査の手順と要件は下記の通りです。

  • 全ブロックにデータをプログラム(書込み)し、読取りを行い、実施中にエラーが発生しないこと。
  • そしてデータ比較し、不一致な箇所が存在しないこと。

これに対応したScript例を下記します。

  1. All Area Write & Read to find NG Block
  2. VSET04 0 0000
  3. 'Repeat for all Blocks (4096dec=1000hex)
  4. REPEAT 0000009 0001000
  5. 'Block Erase
  6. BKERAS 0 $V04_0$
  7. 'Block Program
  8. BKPROG 0 $V04_0$ RDMOVL 456789AB
  9. Block Read Error count
  10. BKRDEC 0 $V04_0$ RDMOVL 456789AB
  11. BKRDCP 0 $V04_0$ 0210 RDMOVL 456789AB
  12. 'Block number increment
  13. 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
00000008000008DD 0E 018DC 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 BlockBitErrorUncError1UncError2UncError3 UncError4
011211000
011433000
011622000
0111211000

【Save Failure Log】

チェックすると、NANDの動作でエラーが発生した場合、エラー内容をファイルに保存します。

SigNAS3の実行ファイルSigNAS3.exe と同じフォルダに、ErrorRateFailure.logとして保存します。

同名のファイルが既に存在する場合は上書きされます。

ファイルの内容(例)

RepeatChannel Block FailureDescription
011102EraseFail
011430EraseFail

尚、W/Rのデータエラーのより詳細な評価は、2023/6/24に公開した「Readデータエラーの検査」もご参考として下さい。

Readデータのエラー検査

NAND Flash Memory(以下NAND)は、様々な要因でデータエラーが起きます。 Scriptによる、検査例を下記に紹介します。 異常箇所の特定 SigNAS3には、Readデータをそのまま…