摘 要: 在大部分嵌入式系統(tǒng)中,內存的好壞主要依賴于內存芯片廠家的檢測,對系統(tǒng)運行中出現(xiàn)的內存偶然故障,缺乏有效的檢測手段。對嵌入式系統(tǒng)中內存檢測的各個階段、內存檢測方式以及全空間檢測方法等進行了詳細描述。
關鍵詞: 嵌入式系統(tǒng);內存檢測
嵌入式系統(tǒng)中內存芯片種類繁多,其訪問方式、時序要求和初始配置并不完全相同,不同芯片的穩(wěn)定工作溫度等也不一樣,甚至同型號不同批次的芯片的特性還不一樣。這導致嵌入式系統(tǒng)開發(fā)者在內存芯片的兼容性開發(fā)、生產(chǎn)檢測和運行時監(jiān)測上需要耗費很多的精力。內存問題小則影響到業(yè)務功能,大則影響到系統(tǒng)運行,如何提供一套完整的內存檢測手段,及時甄別出壞的內存非常重要,本文就對嵌入式系統(tǒng)的內存檢測做一些探討。
1 典型的嵌入式系統(tǒng)
典型的嵌入式系統(tǒng)框圖如圖1所示。圖1中的BOOT Flash用于存放BOOT版本,BOOT版本實現(xiàn)嵌入式系統(tǒng)的基本初始化,并實現(xiàn)業(yè)務版本的加載;Version Flash用來存放業(yè)務版本;SDRAM/DDR作為BOOT版本、業(yè)務版本運行時使用的內存,也是本文描述的檢測對象。網(wǎng)口、串口用來作為版本加載、調試通道、管理通道等;其他接口和設備根據(jù)具體的嵌入式系統(tǒng)應用而不同,如交換芯片、顯示控制芯片和FPGA等。
2 內存的檢測場景
嵌入式設備的內存檢測可以存在于以下幾個階段:
?。?)生產(chǎn)中檢測:在出廠前進行檢測,包括數(shù)據(jù)線、地址線測試,基本讀寫測試,強化測試,高低溫測試等,生產(chǎn)中的檢測本文不做深入描述;
?。?)上電自檢:在嵌入式系統(tǒng)上電過程中,各種業(yè)務還未正式啟動,對內存的檢測可以比較全面;
?。?)運行中檢測:業(yè)務正常運行起來后,內存已在使用中,只能對未使用的內存空間做例行檢測。
對內存的上電自檢及運行中檢測,都是處在實際應用環(huán)境中,本文重點描述這部分檢測的實現(xiàn)。
3 內存檢測方案
在業(yè)務運行階段,內存已被部分使用,這個時候無法檢測到整個內存空間的好壞,為了使內存在應用環(huán)境能做到完整檢測,需要利用BOOT階段協(xié)助檢測內存。
首先有必要了解嵌入式系統(tǒng)的BOOT過程,如圖2所示。
BOOT代碼存在BOOT Flash中,一般分為BootCode1和BootCode2兩部分。BootCode1在BOOT Flash中直接運行,完成內存的基本初始化、拷貝BootCode2到內存運行。BootCode2也可能壓縮過,這種情況下,BootCode1運行時還必須先解壓BootCode2再拷貝至內存。BootCode2承擔了網(wǎng)口初始化、下載業(yè)務版本的功能。
在業(yè)務版本Version起來后,運行它所占用的內存無法測試到,本文考慮在BOOT階段對這塊區(qū)域進行測試。而當Version運行起來后,就可以對未使用的空間作常規(guī)測試,包括原來BootCode2所在的空間(因為Version起來后,BootCode2代碼已沒有意義)。
具體的測試方案為:
?。?)采用一片EEPROM記錄內存測試結果、測試要求等;
?。?)BOOT階段根據(jù)EEPROM中的測試要求進行內存檢測,再將結果寫入EEPROM中;
?。?)業(yè)務版本運行階段,可以讀出BOOT階段的內存檢測結果,如果異??僧a(chǎn)生告警等;
(4)后臺服務器以及業(yè)務版本可以設置內存檢測類型,確定是做簡單測試還是復雜測試,并寫入EEPROM,以指導下次BOOT選擇合適的內存檢測類型。
詳細的測試流程如圖3所示。
(1)BootCode1拷貝BootCode2到內存之后,會進行版本校驗,判斷BootCode2的正確性,間接檢測了BootCode2運行的內存空間,確保BootCode2能夠正常運行,如果出錯,可通過指示燈等告警,提示用戶檢查硬件。
?。?)BootCode2正常運行后,從EEPROM中讀取內存檢測標志,確定做簡單內存測試,還是強化內存測試(嵌入式系統(tǒng)對上電時間有嚴格要求,為保證迅速啟動,一般采用簡單內存測試)。
?。?)BootCode2檢測到錯誤,可通過指示燈等告警,并將檢測結果寫入EEPROM,業(yè)務版本初始化期間可讀出該結果,如果有錯,不會繼續(xù)往下執(zhí)行,直接告警。
(4)業(yè)務版本能正常起來的情況下,可以對空余內存做檢測。
(5)在業(yè)務版本運行中,可以根據(jù)需要設置內存強化檢測,會填寫檢測標志到EEPROM中,并重啟系統(tǒng),觸發(fā)BOOT中進行內存全檢,并將檢測結果反饋給后臺服務器。對EEPROM里數(shù)據(jù)格式定義如圖4所示。
4 具體測試類型分析
內存檢測的具體類型主要考慮如下幾種:
?。?)基本的數(shù)據(jù)線、地址線測試。對某幾個特定地址讀寫特定數(shù)據(jù),這種檢測方式速度快,適用于常規(guī)測試,可在系統(tǒng)默認情況下執(zhí)行。
?。?)跳檢測試。比如每1 KB區(qū)間檢測4 B,采用特征數(shù)據(jù)進行讀寫測試,特征數(shù)據(jù)如0x00000000、0xFFFFFFFF、0x55555555、0xaaaaaaaa等。
?。?)強化測試。借鑒開源測試方法memtest86+,利用各種算法進行內存的全方位測試,這種測試耗時長,根據(jù)CPU頻率不同,內存大小不同,測試時間可能以小時計,這種測試只在首次使用時,或者作設備巡檢時選擇執(zhí)行。
對內存檢測結果的分析,可以用來篩選內存芯片,指導內存芯片的選型,判斷哪些批次的好壞??梢栽跈z測結果里增加內存型號記錄、檢測當時的環(huán)境溫度等,作進一步的分析,可以更好的協(xié)助芯片選型、批次分析及設計改進。
參考文獻
[1] Wind River. Tornado BSP Training Workshop[Z]. 1998.
[2] http://www.memtest.org/,2012-05-01.