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