2.3 走比特测试
走比特测试包括走“1”和走“0”测试。走比特测试即可测试数据,也可以测试地址。
走“1”指测试的数据或地址中只有一个比特为“1”,而所有其它比特为“0”,而且连续的访问中每一次“1”的位置都会移动一个比特,看起来好像是“1”在总线上走。而走“0”测试只是把测试的数据反了一下,看起来就像是一个“0”在总线上走。
2.3.1 数据走比特
数据走比特测试的伪代码如下:
bit_mask_value = 1;
for(number of valid data bits)
{
write bit_mask_value to memory;
readback the data and compared to written value;
inversed_bit_mask_value = bit inverse of bit_mask_value;
write inversed_bit_mask_value to memory;
readback the data and compared to written value;
bit_mask_value = bit_mask_value<<1; //bit walking
}
这个测试可以检测数据比特粘连(bit-stuck)问题,更重要的是,它还可以检测比特间串扰。如果比特之间存在串扰,而这个测试让一个比特与所有其它比特都是相反的,那么其它比特对它的干扰会被最大化,从而让问题暴露出来。
例如,如果
written value = 0x00000010, readback value = 0
written value = 0xFFFFFFEF, readback value = 0xFFFFFFFF
这往往说明比特4 被其它比特干扰。
这个算法既可以用来测试数据总线连接,也可以用于测试存储器单元。当用于测试存储器单元时则每一个存储单元都需要走“1”走“0”,这将是最耗时的测试;而用于测试数据总线连接时,只需要走一遍“1”,再走一遍“0”就可以了(地址不限)。
2.3.2 地址线走比特
地址走比特用于测试地址总线的连接。地址线走比特测试的伪代码如下:
Write 0 to first address;
Write 0xFFFFFFFF to last address;
bit_mask_value = 1;
for(number of valid address bits)
{
write bit_mask_value to address of bit_mask_value;
readback the data at first address and compare to 0;
inversed_bit_mask_value = bit inverse of bit_mask_value;
write inversed_bit_mask_value to address of inversed_bit_mask_value;
readback the data at last address and compare to 0xFFFFFFFF;
bit_mask_value = bit_mask_value<<1; //bit walking
}
和数据走比特类似,这个测试既可以检测地址比特粘连(bit-stuck)问题,还可以检测地址比特间串扰。
例如,如果
written value = 16 at address 16
readback value = 16 at address 0
written value = 0xFFFFFFEF at address 0xFFFFFFEF
readback value = 0xFFFFFFEF at address 0xFFFFFFFF
测试中,想要写往地址16 的数据实际被写到地址0;而想要写往地址0xFFFFFFEF 的数据实际被写到最后一个地址单元。这往往说明地址比特4 被其它比特干扰。
2.4 浮动总线问题
如果测试软件写入并很快从相同地址读出一个值的时候,如果数据线上存在电容特性,写操作会给数据线上的电容充电,总线会短暂的保持它的状态。当测试软件读操作时,总线会返回刚写入的值,即使实际上该数据并没有正确地被写入存储单元。这就是浮动总线(floating buses)问题。
浮动总线可能会“欺骗”简单的测试程序,为了规避浮动总线问题,需要在紧邻的对相同地址的写和读操作之间对其它地址写入一个和原来写的数据相反的数据。例如,
write A to address X;
write inversion of A to address Y;
read value from address X;
这样,浮动总线的问题就可以规避了。
2.5 测试结果的深入分析
从存储器测试结果的初步分析中,如果我们发现比特粘连或干扰,还需要进一步深入分析原因。通常原因可能来自于三方面:
1. 对于外接存储器,PCB 出问题的可能性比较大。最常见的包括焊接问题或设计问题。例如,某个比特被短接到电源或地。通常我们可以用万用表测量信号线之间或信号线和电源或地之间的阻抗来定位这种问题。串扰问题的定位则比较复杂,可能需要用示波器来测试所有相关的信号来确定串扰源。
2. 存储单元失效。如果是外接存储器,我们可以用示波器或逻辑分析仪在总线上监测写入和读出的数据,如果总线上监测到的写数据是对的,而读出的数据是错的,则往往是存储单元失效。
3. 存储控制器失效。如果我们排除了以上问题而怀疑存储控制器时,可以把好的板子和坏的板子上的控制器互换,如果问题跟着控制器走,则往往说明是控制器失效。
本文选自电子发烧友网6月《智能工业特刊》Change The World栏目,转载请注明出处!
评论
查看更多