我正在研究具有 TSOP48 NAND 闪存芯片的设备,SK Hynix H27U1G8F2BTR(1Gbit/128Mbyte,2048byte(+ 64byte 备用)页面,128K 块)。
我已经拆焊了芯片并将内容转储到一个文件中。该文件还包含 OOB(带外)数据,从而生成一个 138412032 字节的文件。
我使用以下方法创建了一个新的模拟 NAND MTD 设备:
modprobe nandsim first_id_byte=0xad second_id_byte=0xf1 third_id_byte=0x00 fourth_id_byte=0x1d
这会导致设备具有正确的参数:
$mtdinfo /dev/mtd0
mtd0
Name: NAND simulator partition 0
Type: nand
Eraseblock size: 131072 bytes, 128.0 KiB
Amount of eraseblocks: 1024 (134217728 bytes, 128.0 MiB)
Minimum input/output unit size: 2048 bytes
Sub-page size: 512 bytes
OOB size: 64 bytes
Character device major/minor: 90:0
Bad blocks are allowed: true
Device is writable: true
我现在可以使用 将我的图像写入 mtd nandwrite
,并-o
选择指示转储包含 OOB 信息:
nandwrite -o /dev/mtd0 with_oob.bin
然后我可以使用nanddump
以下方法转储图像:
nanddump /dev/mtd0 -f without_oob.bin
这会产生一个没有 OOB 数据的 134217728 字节的文件。这个文件是合理的(例如,包含我可以挂载的文件系统)。
有几次,在玩的时候,我在运行时看到 ECC 错误nanddump
。
nandsim
,nandwrite
和 的这种组合如何nandddump
决定使用哪种 ECC 方案?flash来自TI AM335系统,据我所知,ECC方案是由处理器和操作系统的组合决定的。这些实用程序如何知道要做什么?