Zynq-7000 SoC,SMC — 支持 ECC 功能的 NAND 会漏掉单位元错误和部分双位元错误

描述
ECC 算法存在一个编码缺陷,它会漏掉 0 字节 0 位元的单位元错误,而且无法检测一些双位元错误情况。

奇偶校验计算中只有奇数部分经过测试,可针对通过/失败进行检测。当从支持 ECC 功能的 NAND 中读取数据时,在一些特定情况下寄存器中显示的结果是错误的。

(1楼)解决方案 影响: 主要影响。共有三个方面,参见“影响

judyzhong 在 星期五, 06/22/2018 - 14:14 发表。

解决方案
影响: 主要影响。共有三个方面,参见“影响详情”章节。该解决方法可显著降低发生疏忽错误的可能性。
规避措施: 敬请查看解决方法详情。
受影响的配置: 使用支持 ECC 功能 NAND 的系统。
受影响的器件修订版本:
参考 (Xilinx Answer 47916) - Zynq-7000 SoC 芯片修订差异.

影响详情

共有三个方面:

0 字节 0 数据位元中的单位元错误将无法检测。该错误情况会导致误认为数据已通过错误检测的错误肯定。
从备用区域读出的 3 个奇偶校验字节中的后 12 个位元中的单位元错误,会错误地认为已经通过了错误检测。算法应将备用区域中出现的该错误标记为不可修复的故障。
一些双位元错误情况未被正确识别为不可修复的故障。

双位元错误检测(第三方面):

  • 总共 8485140 个可能组合中有 90 个双位元错误 (0.001%) 未被正确识别为不可修复的故障。这 90 种情况会导致误认为数据已通过错误检测的错误肯定。
  • 纯数据字节中的两个错误位:所有可能的位置(共 8386560 )将被正确识别为不可修复的故障。
  • 纯奇偶校验字节中的两个错误位:276 个可能错误中的 66 个未被识别为不可修复的故障。
  • 奇偶校验字节中的 1 位和数据字节中的 1 位:98304 个可能错误中的 24 个将无法被识别为不可修复的故障。
  • 解决方法详情

    提供一种软件解决方法应对第一方面的影响。 如果 0 字节的 0 位元出现单位元错误,则 ECC 寄存器值可返回。

    更复杂的软件解决方法是手动读取存储在备用区域中的 ECC 奇偶校验数据,然后采用软件在无需硬件机制干预的情况下计算 ECC 结果。

    ecc_fail = 0 和 ecc_correct = 1。该结果可识别 0 字节 0 位元的单位元错误。可通过读取寄存器值来识别该情况,并通过软件更正这种位元错误。