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