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欄目,轉載請注明出處!
評論