即使是新的,NAND 设备也可能有坏块。坏块可能是某个位发生故障或无法正确擦除的块。供应商通常会为每个部件提供已知现有坏块的预建地图。工厂坏块在每个块的第一页上的工厂坏块标记偏移量中用非 0xFF 值进行标记。
对于小页设备,此工厂偏移量通常为页面中的字节 516 和 517。对于大页面设备,此工厂偏移量通常为 2048。您可以通过扫描 NAND 设备上每个块的第一页并检查数据中的工厂坏块标记偏移量中的值是否为非 0xFF 值来获取坏块列表。
SLC NAND 控制器和所有 NXP 为 SLC NAND 控制器开发的软件(Linux、WinCE 或独立软件)使用与工厂标记相同的位置进行坏块标记和检测。因此,NAND 设备不需要对坏块进行特殊处理或重新定位。
MLC NAND 控制器只能以 528 字节的块读取和写入带有 ECC 的数据。因此,数据和 ECC 值在 NAND 页面中交错。此方案的工厂坏块标记无法使用。如果必须将 MLC NAND 控制器用于芯片启动以外的任何用途,则需要在将数据写入设备之前记录并移动工厂坏块标记。对于使用 MLC 控制器在 LPC32x0 上进行 NAND 启动的块 0,任何 NXP 软件均不使用坏块检测或标记。这是因为 NAND 设备制造商通常只保证有限次数(即 1000 次)写入周期内块 0 的数据可靠性。