我的主板有很多闪存芯片,其中一些显示间歇性故障。标准内存测试没有显示任何特定的问题地址,除了某些芯片在机械和热应力下间歇性失效。
怀疑实际连接而不是闪存单元本身,我正在寻找一种方法来测试并行总线的地址或数据引脚错误。
有一些内存测试,但它们更适用于RAM而不是闪存(http://www.ganssle.com/testingram.htm)。具体而言,并行闪存具有一系列总线写入以写入每个值;写/验证失败很容易就是写操作,可能是总线上的任何引脚。
欢迎提示......
答案 0 :(得分:2)
典型的内存测试就是这样做的。我更喜欢伪随机数(使用lfsr确定性)到0xAA,0x55,0xFF,0x00测试。这允许在两次通过(重复反转)中进行地址总线测试和数据总线测试。我说在摆动的意义上典型的数据位和地址位都是状态,并改变信号及其邻居的状态。在撞锤上撞击产生热量或其他压力,你不能快速写入闪光灯,这样你就不能真正做快速写入/读取循环。
Flash会产生另一个问题,那就是写入然后回读并不是那么有趣,你想要在稍后,几小时,几天,几周内写回读,以确定该部分是否实际上正在保存数据。
当你说热或压力时,你的意思是它只是在它超过X度的时候它失败了,或者你的意思是由于热应力它会在事件发生后一直打破。同样机械,振动或机械应力下部件失效,但当减轻压力时,它是可以的,或机械应力造成永久性损坏,可以在压力下检测到。
现在虽然你不能快速写入/读取周期,但你可以通过大量阅读来惩罚闪光灯。我通过不断读取一个块或位置看到了读干扰问题。不一定是你有时间为每个位置做的事情,但你可能会用一个伪随机模式填充ram并集中在一个位置一段时间(分钟,几十分钟),如果你有一个你知道的部分是坏的看看这是否加速了问题的检测,以及任何位置是否有效或只有某些位置。然后另一件事是重复读取所有位置数小时/天或让它静置几小时/几天/周,然后做一个没有擦除或写入的读取通行证,看看它是否丢失了任何东西。
不幸的是,您可能知道每个新的失败案例都需要自己的研究项目并开发新的测试。答案 1 :(得分:0)
测试存储器的第一步是数据总线test0 0 0 0 0 0 0•在此测试中,数据总线接线正确测试0 0 0 0 0 0 0确认处理器0 0 0 0对数据总线施加的值0 0 0被另一端的存储器件正确接收0 0 0 0 0 0 00 0 0 0 0 0 0•一种明显的测试方法是写入所有可能的0 0 0 0 0 0 0数据值并验证0 0 0 0 0 0 0•每个位都可以独立测试•要执行步进1s测试,请写入表中给出的第一个数据值,通过读回来验证,写入第二个值,验证等等。 •当您到达表的末尾时,测试完成
答案 2 :(得分:0)
在链接文章中,Jack Ganssle说:“对于这个[测试]和其他所有RAM测试算法来说,关键是你在进行读取测试之前将模式写入所有RAM。”
由于读取应与写入隔离,因此测试闪存更容易。在系统没有压力的情况下执行测试的写入部分。然后在压力下系统执行读取部分。通过在足够的错误情况下记录地址,期望值和实际值,您应该能够确定错误的来源。
如果在执行上述操作时系统永不失败,您可以在压力下执行整个测试。出现的任何错误都很可能是写入错误。
答案 3 :(得分:0)
我决定设计一种内存模式,我认为我可以从中推断数据和地址错误。该概念是使用显着不同的值作为可能的读取错误的关键指标。这个概念也是一次检测一个引脚上的故障。
测试将仅从底部和顶部地址交替读取(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个失效引脚,但70%的事件都是单个位(它们通常不会同时失效)
测试组现在使用它来识别哪些特定连接失败。