摘要:所有现代闪存设备都存在因 NAND 芯片质量差而导致的数据完整性问题。这个问题被称为“位错误”。当文件存储区域出现位错误时,文件就会损坏且无法读取。这些位错误很容易在多媒体文件上出现,如下图所示。
所有现代闪存设备都存在因 NAND 芯片质量差而导致的数据完整性问题。这个问题被称为“位错误”。当文件存储区域出现位错误时,文件就会损坏且无法读取。这些位错误很容易在多媒体文件上出现,如下图所示。
NAND 存储器中存在多种位错误来源(电子元件间干扰、电荷泄漏、读取干扰等),并且有多种减少位错误的方法(纠错码、功率操作、内置读取重试算法)。纠错码是保护数据并在发生错误时修复数据的最有效方法,因此所有闪存控制器都使用内置 ECC 编码器/解码器。在数据记录(编程)过程中,控制器生成特殊的校验和并将其存储在每个页内。当用户请求数据(页读取操作)时,控制器检查每个页的数据完整性,如果检测到错误则执行纠正。
BCH ECC 代码是闪存设备中最常用的代码之一。 BCH算法是可调的并且有一组参数。这些参数在控制器的固件中预先编程,并且因型号而异。当控制器损坏时,有关参数的信息会丢失,但 ECC 校验和仍然保留在 NAND 芯片的每个页内。 Visual Nand Reconstructor 有一个软件 BCH 解码器,可使用剩余的 ECC 校验和执行数据纠错。一旦提取出物理镜像(或者在删除 BCR 元素后出现坏列),就可以通过 ECC 算法进行纠错。有时数据应该在 ECC 之前进行非异或运算。
闪存的页通常由数据存储区、备用区和校验码区组成。几乎在每种情况下,这些区域都会重复多次,具体取决于页大小和页结构。对于 ECC,仅存在两个区域 - 有效负载和奇偶校验。奇偶校验是 ECC 区域本身,有效负载可能包含数据区域或带有备用区域的数据区域,具体取决于控制器型号。每个有效负载和奇偶校验形成一个代码字。一页可以包含多个代码字(1,4,8,16..)。
代码字的数量取决于页大小和有效负载+奇偶校验区域的数量。
VNR 具有内置的自动检测 ECC 机制(针对数据库中的控制器和代码字)。要启动 ECC 自动检测,只需按工具栏上的“查找代码字”按钮。
如果控制器品牌未知,请选择第一个选项。如果控制器供应商已知,则可以通过选择控制器供应商来缩小搜索范围。
按“查找”按钮开始分析,界面会显示各代码字的可能性。
代码名称(分别由控制器型号、页大小、ECC 大小、代码字数组成)结果(概率)。粗体值表示所有码字都匹配,否则仅测试第一个代码字。通常选择ECC最重要的标准是该值是粗体且高于80%。
控制器型号不太重要,因为某些控制器可能使用相同的 ECC 代码。
页大小不必精确,但代码字的数量和大小应该匹配。 (例如上图中前三个粗体值属于相同的代码)。
为了检查代码是否有效,请在参数选项卡中打开 ECC 映射,向下滚动并确保大部分页为绿色。
许多 TLC NAND 芯片都有坏列,很重要的一点是,在 ECC 自动检测之前要使用 BCR 元素删除它们(并使用 BCR 作为物理镜像的来源进行进一步分析)。在删除坏列期间,应特别注意 ECC 结束的区域。有些控制器在ECC代码末尾留下很多位“1”,看起来像坏列,但实际上包含ECC代码的位很少。
例如:
上图中只有 1 位 ECC,如果将其作为坏列删除,可能会影响纠错效率。
大多数控制器从加扰(异或)数据生成 ECC(奇偶校验),而有些控制器则根据原始数据生成 ECC(奇偶校验)。因此有时需要检查 ECC 是在 XOR 之前还是之后起作用。此外,当奇偶校验被异或时,可能需要在异或之后使用ECC元素。
物理镜像校正是逻辑镜像重建中的强制性步骤。 VNR 有几个选项可以纠正转储:
打开 ECC(在参数选项卡中,在不进行物理转储修改的情况下打开 ECC。创建标记表时对于 SA 校正非常有用)正确转储(一次性纠正并删除转储文件中的位错误)重新读取转储(使用读取重试算法进行多遍校正和未校正页面重新读取)当选择 ECC 元素时,所有这些选项都位于 BCH 工具栏上。
使用 ReRead 转储选项时,当前存储芯片必须连接到读卡器。
这里有几个选项:
起始地址最大通过次数重试读取(当芯片支持时自动分配Read Retry命令)ElcomSoft 定期使用新的 ECC 代码更新数据库,但内存芯片和控制器的组合太多,供应商也经常更新代码配置,因此,VNR 具有“代码字分析”工具,允许暴力破解任何 BCH ECC 代码字的公式。后面的代码字可以根据页结构填充到整个页面。
“代码字分析”功能位于 ECC 工具栏上。
必须指定一组参数才能启动 ECC 暴力破解过程。
代码字分析选项有:
页大小 - 芯片/转储的页大小Payload - 有效负载区域(如果ECC区域的位置不是很清楚,可以设置浮动边界)Parity - 奇偶校验区域(如果ECC区域的位置不是很清楚,可以设置浮动边界)多项式:通过多项式 - 对 BCH ECC 的已知多项式进行暴力破解逐级 - 对 BCH ECC 的所有现有多项式进行暴力破解(过程较长,可能需要 1 - 24 小时)操作: 无操作 - ECC 没有任何转换反转 位旋转反转和旋转 - ECC 具有位旋转且反转地址转储 - VNR 在自动选择的块上测试每个组合固定 - VNR 在特定偏移处测试每个组合代码字分析测试所有组合,以便找到正确的 ECC 代码。
例如:
页面大小 = 8640
页结构: DA(1024)+SA(8)+ECC(42)+7x[DA(1024)+SA(4)+ECC(42)]+EMPTY(76)
第一个代码字 = 有效负载(1032) + 奇偶校验(42)
当找到第一个代码字的 ECC 匹配设置时,其权重通常高于 20。要添加代码字,只需选择匹配的设置,然后按“添加”按钮。
添加第一个代码字后,需要根据页结构添加所有其他代码字。代码字分析器的主要功能是查找代码字的参数,而不是整个ECC结构。该芯片页大小为 8640 ,因此很容易注意到还有 7 个代码字需要添加。
要根据前一个代码字自动添加这 7 个缺失的代码字,请单击下面突出显示的按钮
如果备用区域大小因代码字而异,则需要根据页结构调整后续代码字。要编辑代码字,请选择它并单击“编辑”按钮。
第二个和其他代码字的有效负载区域小 4 个字节。调整完毕后,单击“确定”添加此代码字。
所有其他代码字都具有相同的结构,因此可以轻松地用当前代码字来填充。
添加所有代码字后,就可以检查 ECC 映射了。
大多数页的绿色地图意味着代码字可以正常工作。
如果大多数 ECC 映射元素都是红色,则意味着 ECC 不正确,必须重新检查代码结构。
来源:瑶哥科技