我正在尝试从我们的硬件中抢救一些数据。在板上,我有一对三星k9f4g08u0d NAND芯片。每个芯片都已转储以包括每个块,包括备用区域。如果我反转转储中的每个字节并交错两个芯片(这样输出是chipA[0],chipB[0],chipA[1],chipB[1] ...等),我可以看到整个转储中都有ascii文本。根据1芯片的数据表,我了解以下信息:


块:每个设备4096
页面:每个块64
页面大小:(2K data + 64个备用字节)= 2112字节

但是由于芯片交错在一起,实际上每页有(4K数据+ 128个备用字节)= 4224字节数据。

备用区域是相邻的,而不是分开的,因此页面中512字节数据的每个部分紧随其后是16字节的备用数据(或带外:OOB)。 >
Adjacent layout:
+-----+----+-----+----+-----+----+-----+----+-----+----+-----+----+-----+----+-----+----+
| 512 | 16 | 512 | 16 | 512 | 16 | 512 | 16 | 512 | 16 | 512 | 16 | 512 | 16 | 512 | 16 |
+--^--+-+--+--^--+-+--+--^--+-+--+--^--+-+--+--^--+-+--+--^--+-+--+--^--+-+--+--^--+-+--+
   |    |     |    |     |    |     |    |     |    |     |    |     |    |     |    |
   +----+     +----+     +----+     +----+     +----+     +----+     +----+     +----+


仅分析备用区域时,我可以看到前3个字节似乎在增加。我认为前两个字节是块号,而我相信第三个字节是页码。在“页码”值为0x3F之后,它将重置为0x00,并且“块号”将递增。我对剩余的13个字节什么都不知道,但是我假设有些(如果不是全部)是ECC字节。例如,有三个部分的“块号”为0x2C47,我知道这可能是由于NAND的损耗均衡所致。但是,我不知道如何读取良好的页面/块,因此无法装入/提取它。似乎没有任何标准,相信我-我搜寻了很多哈哈。系统正在运行QNX6。

评论

检查一下:linux-mtd.infradead.org/tech/mtdnand/x144.html

@yaspr我认为该链接仅适用于基于MTD的FSes。 QNX可能使用另一种方法。

#1 楼

我不知道它是否完全适用,但是QNX的以下文档建议:备用件由“序列号”,“文件ID”,“偏移量”,“ CRC”和“ ECC”
有一些特殊的块,其中包含损耗均衡信息,例如坏块,擦除计数和文件系统层次结构
不在备用区域,但有一个专用区域。该页面建议这可能是基于事务的ETFS文件系统。