存儲器測試的目的是確認(rèn)在存儲設(shè)備中的每一個(gè)存儲位置都在工作。換一句話說,如果你把數(shù)50存儲在一個(gè)具體的地址,你希望可以找到存儲在那里的那個(gè)數(shù),直到另一個(gè)數(shù)寫入。任何存儲器測試的基本方法是,往存儲器寫入一些數(shù)據(jù),然后根據(jù)內(nèi)存設(shè)備的地址,校驗(yàn)讀回的數(shù)據(jù)。如果所有讀回的數(shù)據(jù)和那些寫入的數(shù)據(jù)是一樣的,那么就可以說存儲設(shè)備通過了測試。只有通過認(rèn)真選擇的一組數(shù)據(jù)你才可以確信通過的結(jié)果是有意義的。
當(dāng)然,像剛才描述的有儲器的測試不可避免地具有破壞性。在內(nèi)存測試過程中,你必須覆蓋它原先的內(nèi)容。因?yàn)橹貙懛且资源鎯ζ鲀?nèi)容通常來說是不可行的,這一部分描述的測試通常只適用于ram 的測試。
一、普通的存儲器問題
在學(xué)習(xí)具體的測試算法之前,你應(yīng)該了解可能遇到的各種存儲器問題。在軟件工程師中一個(gè)普遍的誤解是,大部分的存儲器問題發(fā)生在芯片的內(nèi)部。盡管這類問題一度是一個(gè)主要的問題,但是它們在日益減少。存儲設(shè)備的制造商們對于每一個(gè)批量的芯片都進(jìn)行了各種產(chǎn)品后期測試。因此,即使某一個(gè)批量有問題,其中某個(gè)壞芯片進(jìn)人到你的系統(tǒng)的可能性是微乎其微的。
你可能遇到的一種類型的存儲芯片問題是災(zāi)難性的失效。這通常是在加工好之后芯片受到物理或者是電子損傷造成的。災(zāi)難性失效是少見的,通常影響芯片中的大部分。因?yàn)橐淮笃瑓^(qū)域受到影響,所以災(zāi)難性的失效當(dāng)然可以被合適的測試算法檢測到。
存儲器出問題比較普遍的原因是電路板故障。典型的電路板故障有:
(1)在處理器與存儲設(shè)備之間的連線問題;
(2)無存儲器芯片;
(3)存儲器芯片的不正確插人。
二、測試策略
最好有三個(gè)獨(dú)立的測試:數(shù)據(jù)總線的測試、地址總線的測試以及設(shè)備的測試。前面兩個(gè)測試針對電子連線的問題以及芯片的不正確插入;第三個(gè)測試更傾向于檢測芯片的有無以及災(zāi)難性失效。作為一個(gè)意外的結(jié)果,設(shè)備的測試也可以發(fā)現(xiàn)控制總線的問題,盡管它不能提供關(guān)于問題來源的有用信息。
執(zhí)行這三個(gè)測試的順序是重要的。正確的順序是:首先進(jìn)行數(shù)據(jù)總線測試,接著是地址總線測試,最后是設(shè)備測試。那是因?yàn)榈刂房偩€測試假設(shè)數(shù)據(jù)總線在正常工作,除非數(shù)據(jù)總線和地址總線已知是正常的,否則設(shè)備測試便毫無意義。如果任何測試失敗,你都應(yīng)該和一個(gè)硬件工程師一起確定問題的來源。通過查看測試失敗處的數(shù)據(jù)值或者地址,應(yīng)該能夠迅速地找出電路板上的問題。
1.數(shù)據(jù)總線測試
我們首先要測試的就是數(shù)據(jù)總線。我們需要確定任何由處理器放置在數(shù)據(jù)總線上的值都被另一端的存儲設(shè)備正確接收。最明顯的測試方法就是寫人所有可能的數(shù)據(jù)值并且驗(yàn)證存儲設(shè)備成功地存儲了每一個(gè)。然而,那并不是最有效率的測試方法。一個(gè)更快的測試方法是一次測試總線上的一位。如果每一個(gè)數(shù)據(jù)上可被設(shè)置成為 0 和1,而不受其他數(shù)據(jù)位的影響,那么數(shù)據(jù)總線就通過了測試。
2.地址總線測試
在確認(rèn)數(shù)據(jù)總線工作正常之后,你應(yīng)該接著測試地址總線。記住地址總線的問題將導(dǎo)致存儲器位置的重疊。有很多可能重疊的地址。然而,不必要測試每一個(gè)可能的組合。你應(yīng)該努力在測試過程中分離每一個(gè)地址位。你只需要確認(rèn)每一個(gè)地址線的管腳都可以被設(shè)置成0和 1,而不影響其他的管腳。
3.設(shè)備測試
一旦你知道地址和數(shù)據(jù)總線是正確的,那么就有必要測試存儲設(shè)備本身的完整性。要確認(rèn)的是設(shè)備中的每一位都能夠保持住0和 1。這個(gè)測試實(shí)現(xiàn)起來十分簡單,但是它花費(fèi)的時(shí)間比執(zhí)行前面兩項(xiàng)測試花費(fèi)的總時(shí)間還要長。
對于一個(gè)完整的設(shè)備測試,你必須訪問(讀和寫)每一個(gè)存儲位置兩次。你可以自由地選擇任何數(shù)據(jù)作為第一步測試的數(shù)據(jù),只要在進(jìn)行第二步測試的時(shí)候把這個(gè)值求反即可。因?yàn)榇嬖跊]有存儲器芯片的可能性,所以最好選擇一組隨著地址變化(但是不等于地址)的數(shù)。