我正在尝试从我们的硬件中拯救一些数据。在板上我有一对三星 k9f4g08u0d NAND 芯片。每个芯片都被转储到包括每个块,包括备用区域。如果我反转转储中的每个字节并交错两个芯片(例如输出chipA[0],chipB[0],chipA[1],chipB[1] ...
等),我可以看到整个转储中都有 ascii 文本。根据 1 个芯片的数据表,我知道以下内容:
- 块:每台设备 4096 个
- 页数:每块 64 页
- 页大小:(2K 数据 + 64 备用)= 2112 字节
但由于芯片交错在一起,实际上每页有(4K 数据 + 128 备用)= 4224 字节的数据。
备用区域是相邻的,而不是分开的,因此页面中 512 字节数据的每个部分紧跟其后是 16 字节的备用数据(或带外:OOB)。
相邻布局: +-----+----+-----+----+-----+----+-----+----+----- +----+-----+----+-----+----+-----+----+ | 第512话 16 | 第512话 16 | 第512话 16 | 第512话 16 | 第512话 16 | 第512话 16 | 第512话 16 | 第512话 16 | +--^--+-+--+--^--+-+--+--^--+-+--+--^--+-+--+--^-- +-+--+--^--+-+--+--^--+-+--+--^--+-+--+ | | | | | | | | | | | | | | | | +----+ +----+ +----+ +----+ +----+ +----+ +----+ +----+
独立布局: +-----+-----+-----+-----+-----+-----+-----+-----+- ---+----+----+----+----+----+----+----+ | 第512话 第512话 第512话 第512话 第512话 第512话 第512话 第512话 16 | 16 | 16 | 16 | 16 | 16 | 16 | 16 | +--^--+--^--+--^--+--^--+--^--+--^--+--^--+--^--+- +--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+ | | | | | | | | | | | | | | | | +----------------------------------------------+ | | | | | | | | | | | | | | | | | | | | | +---------------------------------------------------------+ | | | | | | | | | | | | | | | | | | +--------------------------------------------------------+ | | | | | | | | | | | | | | | +--------------------------------------------+ | | | | | | | | | | | | +-----------------------------------------+ | | | | | | | | | +-----------------------------------------+ | | | | | | +----------------------------------------+ | | | +----------------------------------------------+
仅分析备用区域时,我可以看到前 3 个字节似乎在增加。我认为前两个字节是块号,我相信第三个字节是页码。在“页码”值0x3F
重置后0x00
,“块号”增加。我对剩余的 13 个字节一无所知,但我假设有些(如果不是全部)是 ECC 字节。
问题是有些块在转储中多次出现。例如,“块号”有三个部分,0x2C47
我知道这可能是因为 NAND 的磨损均衡;但是,我不知道如何读取好的页面/块,以便我可以安装/提取它。它似乎没有标准,相信我 - 我已经搜索了很多哈哈。系统正在运行 QNX6。