張東磊
【摘要】在公司現(xiàn)有硬件平臺基礎(chǔ)上,開發(fā)設(shè)計測試程序?qū)ORFLASH存儲芯片進行測試。實驗結(jié)果表明,該測試程序的設(shè)計能避免由于無測試工具而無法測試到的儲存區(qū)塊損壞造成的設(shè)備運行異常,并實現(xiàn)測試自動化。
【關(guān)鍵詞】NORFLASH;存儲芯片;測試程序
NOR FLASH技術(shù)是Intel于1988年開發(fā)的,其特點是芯片內(nèi)執(zhí)行,即應(yīng)用程序可以直接在FLASH閃存內(nèi)運行,不必再把代碼讀到系統(tǒng)RAM中,是現(xiàn)在市場上主要的非易失閃存技術(shù)之一。其傳輸效率高,在1~4MB的小容量時具有很高的成本效益[1]?;谄涮攸cNOR FLASH存儲芯片市場應(yīng)用率高,而目前沒有專門對NOR FLASH存儲芯片進行測試的工裝和工具。本文就筆者開發(fā)的NOR FLASH存儲芯片測試程序予以詳細分析。
圖1 NORFLASH硬件原理圖
圖2 NORFLASH命令定義
1.NOR FLASH存儲芯片
NOR FLASH是INTEL在1988年推出的一款商業(yè)性閃存芯片,它能夠提供完整的尋址與數(shù)據(jù)總線,并允許隨機存取存儲器上的任何區(qū)域,而且它可以忍受一萬次到一百萬次抹寫循環(huán),是早期的可移除式閃存儲媒體的基礎(chǔ)。NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片內(nèi)執(zhí)行(這意味著存儲在NOR FLASH上的程序不需要復(fù)制到RAM就可以直接運行)。因此,在嵌入式系統(tǒng)中,NOR FLASH很適合作為啟動程序的存儲介質(zhì)。NOR FLASH的讀取和RAM類似,只要能夠提供數(shù)據(jù)的地址,數(shù)據(jù)總線就能夠正確的給出數(shù)據(jù)。而對NOR FLASH的寫操作需要遵循特定的命令序列,最終由芯片內(nèi)部的控制單元完成寫操作。
為了便于訪問,從支持的最小訪問單元來看,NOR FLASH一般分為8位的和16位的(也有很多NOR FLASH芯片同時支持8位模式和16位模式)具體的工作模式通過特定的管腳進行選擇。FLASH一般都分為很多個SECTOR,每個SECTOR包括一定數(shù)量的存儲單元。對有些大容量的FLASH,還分為不同的BANK,每個BANK包括一定數(shù)目的SECTOR。FLASH的擦除操作一般都是以SECTOR,BANK或是整片F(xiàn)LASH為單位的。
圖3 測試程序主流程圖
2.設(shè)計測試程序
在編寫測試程序時,設(shè)計三種測試方案:
方案1:
在安裝J-link驅(qū)動程序時,本身自帶一個工具J-FLASH ARM.exe,可以對NOR FLASH進行單次的讀、寫、擦除操作,并且可以測試讀、寫、擦除的速度。由于本工具不是開源的,不能夠增加和修改功能,基于單次操作的局限性,放棄方案1。但是在編寫測試程序時,可以參考本工具的功能設(shè)計。
方案2:
通過對嵌入式系統(tǒng)移植的研究,發(fā)現(xiàn)可以通過移植U-boot對存儲設(shè)備進行操作,而且u-boot對于存儲設(shè)備的操作驅(qū)動是經(jīng)過IT精英共同驗證過的。但考慮到剛開始接觸系統(tǒng)移植,在短時間內(nèi)無法完成測試程序的編寫,所以放棄方案2。
方案3:
在公司現(xiàn)有的監(jiān)控平臺上,增加對存儲設(shè)備的讀、寫、擦除操作。本方案不需要重新設(shè)計硬件平臺,大大節(jié)省了設(shè)計的時間。本測試程序可以對NORFLASH存儲芯片進行讀寫測試和壽命測試。在測試過程中,如果發(fā)現(xiàn)芯片讀寫錯誤,本程序可以通過串口將錯誤信息打印到調(diào)試工具供用戶查看。測試過程中不需要用戶參與,實現(xiàn)測試自動化。
本次測試是編寫存儲設(shè)備的測試程序,可以長時間對存儲設(shè)備進行讀、寫、擦除操作,從而可以驗證存儲設(shè)備的特性:在高溫條件下,對存儲設(shè)備進行讀、寫、擦除操作中正確無誤;存儲設(shè)備的讀、寫、擦除操作有一定的次數(shù)限制。
圖4 讀寫操作
3.測試NOR FLASH存儲芯片
在對FLASH進行寫操作的時候,每個BIT可以通過編程由1變?yōu)?,但不可以有0修改為1。為了保證寫操作的正確性,在執(zhí)行寫操作前,都要執(zhí)行擦除操作。擦除操作會把FLASH的一個SECTOR,一個BANK或是整片F(xiàn)LASH的值全修改為0xFF。這樣,寫操作就可以正確完成了。
由于NOR FLASH沒有本地壞區(qū)管理,所以一旦存儲區(qū)塊發(fā)生毀損,軟件或驅(qū)動程序必須接手這個問題,否則可能會導(dǎo)致設(shè)備發(fā)生異常。在解鎖、抹除或?qū)懭隢OR FLASH區(qū)塊時,特殊的指令會先寫入已繪測的記憶區(qū)的第一頁(Page)。接著快閃記憶芯片會提供可用的指令清單給實體驅(qū)動程序,而這些指令是由一般性閃存接口(CommON FLASH memory Interface,CFI)所界定的。與用于隨機存取的ROM不同,NOR FLASH也可以用在存儲設(shè)備上。
在NOR FLASH的讀取數(shù)據(jù)的方式來看,它與RAM的方式是相近的,只要能夠提供數(shù)據(jù)的地址,數(shù)據(jù)總線就能夠正確的揮出數(shù)據(jù)??紤]到以上的種種原因,多數(shù)微處理器將NOR FLASH當做原地運行(Execute in place,XIP)存儲器使用,這其實意味著存儲在NOR FLASH上的程序不需要復(fù)制到RAM就可以直接運行。
本測試中硬件平臺使用的ARM芯片是S3C 2410,該芯片具備外接NORFLASH的引腳,下面是S3C2410和NORFLASH的接線圖如圖1所示。
本平臺使用的ARM芯片型號為S3C2410,NORFLASH型號為AM29LV160DB,下文將用ARM代替S3C2410,NORFLASH代替AM29LV160DB。
NORFLASH有2種讀寫模式:8位模式和16位模式。對8位的NOR FLASH芯片,或是工作在8-BIT模式的芯片來說,一個地址對應(yīng)一個BYTE(8-BIT)的數(shù)據(jù)。例如一塊8-BIT的NOR FLASH,假設(shè)容量為4個BYTE。那芯片應(yīng)該有8個數(shù)據(jù)信號D7-D0和2個地址信號,A1-A0。地址0x0對應(yīng)第0個BYTE,地址0x1對應(yīng)于第1BYTE,地址0x2對應(yīng)于第2個BYTE,而地址0x3則對應(yīng)于第3個BYTE對16位的NOR FLASH芯片,或是工作在16-BIT模式的芯片來說,一個地址對應(yīng)于一個HALF-WORD(16-BIT)的數(shù)據(jù)。例如,一塊16-BIT的NOR FLASH,假設(shè)其容量為4個BYTE。那芯片應(yīng)該有16個數(shù)據(jù)信號線D15-D0和1個地址信號A0。地址0x0對應(yīng)于芯片內(nèi)部的第0個HALF-WORD,地址0x1對應(yīng)于芯片內(nèi)部的第1個HALF-WORD。通過上圖地址線的連接方式可知,NORFLASH使用的字模式。上圖中,LADDR1連接A0為字模式,LADDR0連接A0為字節(jié)模式。
基于芯片的測試需求,測試程序主要有2個功能:第1個允許用戶可以設(shè)置擦寫次數(shù),以便用戶進行芯片壽命的測試。第2個根據(jù)用戶設(shè)置擦寫次數(shù),向芯片的35個扇區(qū)寫0,然后檢測扇區(qū)的數(shù)據(jù)是否為0。
NORFLASH數(shù)據(jù)手冊中對芯片的操作有專有的命令,如圖2所示。
芯片ID檢測功能:
如圖2中Manufacturer ID命令定義,通過下面的命令可以得到芯片的Manufacturer ID:
_WR(0x555,0xaaaa);
_WR(0x2aa,0x5555);
_WR(0x555,0x9090);
manId=_RD(0);
如圖2中Device ID命令定義,通過下面的命令可以得到芯片的Device ID:
_WR(0x555,0xaaaa);
_WR(0x2aa,0x5555);
_WR(0x555,0x9090);
devId=_RD(0x1);
從圖2中可以得到manId為0X01,devId為0X2249。
基于扇區(qū)的擦除功能
如圖2中Sector Erase命令定義,通過下面的命令可以擦除芯片對應(yīng)的扇區(qū):
_WR(0x555,0xaaaa);
_WR(0x2aa,0x5555);
_WR(0x555,0x8080);
_WR(0x555,0xaaaa);
_WR(0x2aa,0x5555);
_WR(BADDR2WADDR(targetAddr),0x3030);
數(shù)據(jù)寫入NorFlash功能
如圖2中program命令定義,通過下面的命令將對應(yīng)數(shù)據(jù)寫到NorFlash中:
_WR(0x555,0xaaaa);
_WR(0x2aa,0x5555);
_WR(0x555,0xa0a0);
*tempPt=data;
將NORFLASH數(shù)據(jù)讀到SDRAM功能
NORFLASH的讀取操作,不需要特殊的命令,它的操作和SDRAM的操作一樣。
基于以上介紹的驅(qū)動函數(shù)的功能,我們可以靈活的使用它們編寫自己的應(yīng)用程序,我們本次實驗的目的是設(shè)計NORFLASH芯片的測試程序,函數(shù)流程圖如圖3所示。
測試程序開始之前,需要設(shè)置NOR FLASH的讀寫次數(shù),這個讀寫次數(shù)可以進行作為芯片壽命測試的參考。設(shè)置完成以后,選擇“對整個NOR FLASH寫0”命令,然后測試程序按照圖3的流程進行。
在程序進行讀寫操作過程中,測試程序會順序?qū)?5個扇區(qū)進行讀寫操作,并將操作結(jié)果通過串口打印出來。讀寫操作流程圖如圖4所示。
4.結(jié)束語
基于公司現(xiàn)有硬件平臺設(shè)計的NOR FLASH存儲芯片程序,可以幫助我們進行NOR FLASH芯片的自動化測試,有效防止了由于NOR FLASH沒有本地壞區(qū)管理,一旦存儲區(qū)塊發(fā)生毀損,可能會出現(xiàn)導(dǎo)致設(shè)備發(fā)生異常,并且實現(xiàn)測試自動化,節(jié)省了測試時間,也保證了測試的精度,確保了NOR FLASH存儲芯片的穩(wěn)定可靠性。
參考文獻
[1]李亞峰,歐文盛.ARM嵌入式Linux系統(tǒng)開發(fā)從入門到精通[M].北京:清華大學(xué)出版社,2007.