存储器测试的目的是确认在存储设备中的每一个存储位置都在工作。换一句话说,如果你把数50存储在一个具体的地址,你希望可以找到存储在那里的那个数,直到另一个数写入。任何存储器测试的基本方法是,往存储器写入一些数据,然后根据内存设备的地址,校验读回的数据。如果所有读回的数据和那些写入的数据是一样的,那么就可以说存储设备通过了测试。只有通过认真选择的一组数据你才可以确信通过的结果是有意义的。
当然,像刚才描述的有储器的测试不可避免地具有破坏性。在内存测试过程中,你必须覆盖它原先的内容。因为重写非易失性存储器内容通常来说是不可行的,这一部分描述的测试通常只适用于RAM 的测试。
一、普通的存储器问题
在学习具体的测试算法之前,你应该了解可能遇到的各种存储器问题。在软件工程师中一个普遍的误解是,大部分的存储器问题发生在芯片的内部。尽管这类问题一度是一个主要的问题,但是它们在日益减少。存储设备的制造商们对于每一个批量的芯片都进行了各种产品后期测试。因此,即使某一个批量有问题,其中某个坏芯片进人到你的系统的可能性是微乎其微的。
你可能遇到的一种类型的存储芯片问题是灾难性的失效。这通常是在加工好之后芯片受到物理或者是电子损伤造成的。灾难性失效是少见的,通常影响芯片中的大部分。因为一大片区域受到影响,所以灾难性的失效当然可以被合适的测试算法检测到。
存储器出问题比较普遍的原因是电路板故障。典型的电路板故障有:
(1)在处理器与存储设备之间的连线问题;
(2)无存储器芯片;
(3)存储器芯片的不正确插人。
二、测试策略
最好有三个独立的测试:数据总线的测试、地址总线的测试以及设备的测试。前面两个测试针对电子连线的问题以及芯片的不正确插入;第三个测试更倾向于检测芯片的有无以及灾难性失效。作为一个意外的结果,设备的测试也可以发现控制总线的问题,尽管它不能提供关于问题来源的有用信息。
执行这三个测试的顺序是重要的。正确的顺序是:首先进行数据总线测试,接着是地址总线测试,最后是设备测试。那是因为地址总线测试假设数据总线在正常工作,除非数据总线和地址总线已知是正常的,否则设备测试便毫无意义。如果任何测试失败,你都应该和一个硬件工程师一起确定问题的来源。通过查看测试失败处的数据值或者地址,应该能够迅速地找出电路板上的问题。
1.数据总线测试
我们首先要测试的就是数据总线。我们需要确定任何由处理器放置在数据总线上的值都被另一端的存储设备正确接收。最明显的测试方法就是写人所有可能的数据值并且验证存储设备成功地存储了每一个。然而,那并不是最有效率的测试方法。一个更快的测试方法是一次测试总线上的一位。如果每一个数据上可被设置成为 0 和1,而不受其他数据位的影响,那么数据总线就通过了测试。
2.地址总线测试
在确认数据总线工作正常之后,你应该接着测试地址总线。记住地址总线的问题将导致存储器位置的重叠。有很多可能重叠的地址。然而,不必要测试每一个可能的组合。你应该努力在测试过程中分离每一个地址位。你只需要确认每一个地址线的管脚都可以被设置成0和 1,而不影响其他的管脚。
3.设备测试
一旦你知道地址和数据总线是正确的,那么就有必要测试存储设备本身的完整性。要确认的是设备中的每一位都能够保持住0和 1。这个测试实现起来十分简单,但是它花费的时间比执行前面两项测试花费的总时间还要长。
对于一个完整的设备测试,你必须访问(读和写)每一个存储位置两次。你可以自由地选择任何数据作为第一步测试的数据,只要在进行第二步测试的时候把这个值求反即可。因为存在没有存储器芯片的可能性,所以最好选择一组随着地址变化(但是不等于地址)的数。