我决定设计一种内存模式,我认为我可以从中推断出数据和地址错误。这个概念是使用显着不同的值作为可能的读取错误的关键指标。这个概念也是一次检测一个引脚上的故障。
测试将仅从底部和顶部地址交替读取(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% 的事件是单个位(它们通常不会同时发生故障)
测试组现在使用它来确定哪些特定连接失败。