我决定设计一种内存模式,我认为我可以从中推断出数据和地址错误。这个概念是使用显着不同的值作为可能的读取错误的关键指标。这个概念也是一次检测一个引脚上的故障。
测试将仅从底部和顶部地址交替读取(0x000000 和 0x3FFFFF - 我的芯片有 22 条地址线)。在这些位置,我将分别放置 0xFF 和 0x00(字节宽)。这个想法是翻转所有地址和数据线,看看会发生什么。 (闪存中所有其他值至少有 3 位不同于 0x00 和 0xFF)
有 44 个地址,单个引脚故障可能会将我发送到错误的地址。在每个地址中放置 22 个值中的一个来表示 22 个地址引脚中的哪一个被翻转。每一个都是 2 位互不相同,3 位与 00 和 FF 不同。 (我尝试了 3 位彼此不同,但 8 位只能得到 14 个值)
07,0B,0D,0E,16,1A,1C,1F,25,29,2C,
2F,34,38,3D,3E,43,49,4A,4F,52,58
剩下的地址我放了一个很好的模式,六个值 33,55,66,99,AA,CC。 (与所有其他值不同 3 位)value(address) = nicePattern[ sum of bits set in address % 6];
我对此进行了测试,并统计收集了 100 次与机械应力同步的间歇性故障事件。
- 可检测到单位错误
- 可推断出双位错误(可通过频繁的单位错误组合来解释)
- 3 位或更多位错误(通常不确定)
尽管有些芯片有 3 个失效引脚,但 70% 的事件是单比特的(它们通常不会同时失效)
测试组现在使用它来确定哪些特定连接失败。