1

我有一块板子,上面有很多闪存芯片,其中一些显示出间歇性故障。标准内存测试没有显示任何具体的问题地址,除了某些芯片在机械和热应力下间歇性失效。

怀疑实际连接而不是闪存单元本身,我正在寻找一种方法来测试并行总线的地址或数据引脚错误。

有一些内存测试,但它们更适用于 RAM 而不是闪存 ( http://www.ganssle.com/testingram.htm )。具体来说,并行闪存具有一系列总线写入来写入每个值;写入/验证失败很容易是写入操作,它可能是总线上的任何引脚。

欢迎提出想法...

4

4 回答 4

2

典型的内存测试就是为了做到这一点。对于 0xAA、0x55、0xFF、0x00 测试,我更喜欢伪随机化器(使用 lfsr 确定性)。这允许在两次通过(反向重复)中进行地址总线测试和数据总线测试。我说的是典型的摆动数据位和地址位这两个状态,并改变信号及其邻居的状态。撞击内存以产生热应力或其他应力,您不能非常快地写入闪存,因此您不能真正进行快速的写入/读取周期。

Flash 产生了另一个问题,那就是先写然后读回不是很有趣,你想在几小时、几天、几周之后写回读来确定部件是否实际保存数据。

当您说热或应力时,您的意思是仅在高于 X 度的时间内它会失效,或者您的意思是由于热应力,它在事件发生后一直被破坏。与机械类似,在振动或受到机械应力时,零件会失效,但当消除该应力时,它是可以的,或者机械应力已经造成永久性损坏,可以在应力下检测到或不检测到。

现在,尽管您无法进行快速的写入/读取周期,但您可以通过重读来惩罚闪存。我已经通过不断地读取一个块或位置看到了读取干扰问题。不一定是你有时间为每个位置做的事情,但你可能会用伪随机模式填充内存并专注于一个位置一段时间(几分钟,几十分钟),如果你有一个你知道的部分是坏的看看这是否加速了问题的检测,以及是否有任何位置可以工作或只有某些地方可以工作。然后另一件事是重复读取所有位置数小时/数天或将其放置数小时/数天/数周,然后在不擦除或写入的情况下进行读取,看看它是否丢失了任何东西。

不幸的是,您可能知道每个新的失败案例都有自己的研究项目和新测试的开发。

于 2013-12-18T01:30:17.213 回答
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 0 0 00 0 0 0 0 0 0 • 一个明显的测试方法是写入所有可能的0 0 0 0 0 0 0 数据值并验证0 0 0 0 0 0 0 • 每个位都可以独立测试• 进行走1s 测试,写入表中给出的第一个数据值,通过读回验证,写入第二个值,验证,依此类推。• 当您到达表格末尾时,测试完成

于 2013-12-18T12:33:25.317 回答
0

在链接的文章中,Jack Ganssle 说:“对这个 [测试] 以及所有其他 RAM 测试算法而言,关键在于在进行读取测试之前将模式写入所有 RAM。”

由于读取应该与写入隔离,因此测试闪存更容易。在系统没有压力的情况下执行测试的写作部分。然后在系统承受压力的情况下执行读取部分。通过在足够多的错误情况下记录地址、期望值和实际值,您应该能够确定错误的来源。

如果系统在执行上述操作时从未失败,那么您可以在压力下执行整个测试。出现的任何错误很可能是写入错误。

于 2013-12-19T05:41:34.743 回答
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 个或更多位错误(通常不确定)

尽管有些芯片有 3 个故障引脚,但 70% 的事件是单个位(它们通常不会同时发生故障)

测试组现在使用它来确定哪些特定连接失败。

于 2013-12-19T10:29:42.867 回答