如何确定 NAND 块是否是好块?

逆向工程 记忆 硬件 倾倒 闪光 qnx
2021-07-08 09:13:37

我正在尝试从我们的硬件中拯救一些数据。在板上我有一对三星 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。

1个回答

我不知道它是否完全适用,但QNX的以下文件表明:

  • 备用由“序列号”、“文件ID”、“偏移量”、“CRC”和“ECC”组成
  • 有包含磨损均衡信息的特殊块,例如坏块、擦除计数和文件系统层次结构

因此,您要查找的信息可能不在备用区域中,而是有一个专用块。页面建议这可能是基于事务的 ETFS 文件系统。