基于NAND Flash控制結(jié)構(gòu)復用的嵌入式存儲系統(tǒng)研究
出處:尤新亮 發(fā)布于:2008-08-30 13:26:29
引言
?。危粒危模疲欤幔螅杈哂锌焖僭L問、低功耗、抗震性、尺寸小、重量輕等特性,并且穩(wěn)定性良好,即使在系統(tǒng)電源關(guān)閉的情況下仍可保存數(shù)據(jù)。隨著技術(shù)的發(fā)展,其價格降低且容量增大,這些使得NANDFlash逐漸成為嵌入式系統(tǒng)的一個獨立部件,系統(tǒng)存儲的工業(yè)標準。
對Flash存儲器的測試與編寫,目前流行的工業(yè)方法是采用遵守IEEE-1149.1標準,又稱JTAG(joint?。簦澹螅簟。幔悖簦椋铮睢。纾颍铮酰穑┮?guī)范的邊界掃描技術(shù),運用專門的商業(yè)測試板和配套軟件來完成。不論是板級還是生產(chǎn)線級,都有廠家提供配套的軟硬件解決方案。
基于JTAG規(guī)范的Flash控制電路,使用支持邊界掃描的微處理器,配套專門的控制硬件和軟件,逐漸形成一套Flash存儲器PCB級的控制體系規(guī)范。然而,不論是支持邊界掃描的微處理器,還是配套的硬件和軟件,價格都是較昂貴的。不僅如此,使用這種方案將增加用戶PCB的設(shè)計難度和產(chǎn)品成本,使用戶產(chǎn)品結(jié)構(gòu)變得復雜,硬件設(shè)計失去獨立性,產(chǎn)品升級存在依賴性。
針對運用邊界掃描技術(shù)進行Flash控制的上述弊端,本文提出一種控制結(jié)構(gòu)復用的存儲系統(tǒng),包括存儲卡和寫卡器兩部分。文中首先給出本存儲系統(tǒng)的總體框架,而后闡述存儲卡與寫卡器的硬件結(jié)構(gòu),接著著重講述存儲系統(tǒng)軟件架構(gòu)與NANDFlash典型操作實現(xiàn),用寫卡器對三星公司各種存儲容量的NANDFlash進行讀、寫、擦測試,結(jié)果表明本存儲系統(tǒng)能高效完成對NANDFlash的各種操作。在所有測試成功后,將本存儲系統(tǒng)的控制結(jié)構(gòu)復用到嵌入式車載導航設(shè)備中,并成功移植控制軟件。通過與邊界掃描技術(shù)對比軟硬件結(jié)構(gòu)和測試結(jié)果可以看出,本存儲系統(tǒng)具有結(jié)構(gòu)簡單、操作時間短、性價比高3大優(yōu)點。
存儲系統(tǒng)總體框架
本存儲系統(tǒng)分為存儲卡和寫卡器兩部分,其總體框架如圖1所示。

圖1 存儲系統(tǒng)框架
圖1中填充左斜線的箭頭序列給出了編寫NANDFlash的數(shù)據(jù)流向。PC通過標準打印口(line?。穑颍椋睿簦澹?,LPT)控制NANDFlash,中間用50針卡座與50孔卡口配合,連接寫卡器與存儲卡。由于打印口的控制口線有限,不能對NANDFlash進行全面控制,因而在打印口和NANDFlash之間添加573鎖存器,復用數(shù)據(jù)口線來擴充控制口線。
此外,由于嵌入式系統(tǒng)各元器件對工作電壓都有較高的要求,必須在額定電壓范圍內(nèi)工作,因此在寫卡器和存儲卡上都添加了穩(wěn)壓器,在寫卡器上還添加了電壓調(diào)節(jié)器。寫卡器外部供電為12V直流電源。
從存儲系統(tǒng)框架可以看出,整個系統(tǒng)并未使用控制芯片與類似邊界掃描技術(shù)的高成本復雜控制電路,結(jié)構(gòu)簡單性價比高。后續(xù)實驗結(jié)果表明,與邊界掃描技術(shù)相比,本系統(tǒng)的NANDFlash操作時間有所縮短。
存儲卡
通常,一個NANDFlash存儲器的價格較一個NORFlash存儲器便宜40%左右。與NOR?。疲欤幔螅璐鎯ζ飨啾龋危粒危模疲欤幔螅璐鎯ζ鞯膶懺L問時間快20倍。盡管NORFlash具有快速隨機訪問速度,而NANDFlash具有一個長的隨機讀反映時間,但其具有功耗低、存儲容量大、快速擦/寫的優(yōu)點[8]?;冢危粒危模疲欤幔螅璧纳鲜鰞?yōu)點,存儲卡選擇使用NANDFlash作為數(shù)據(jù)存儲載體。
存儲卡主要包括50孔卡口、NANDFlash、直流電源穩(wěn)壓器3個部分,其他還有一些電阻和電容,起輔助和增加電路穩(wěn)定性作用。50孔卡口與寫卡器的50針卡座配合,連接存儲卡和寫卡器。
寫卡器
寫卡器主要由標準打印口、直流電壓調(diào)節(jié)器、直流電源穩(wěn)壓器、573鎖存器和一些電阻電容組成,采用外接+12V直流電源供電,50針卡座采用機械式上下卡,使得存儲卡與卡座的接觸與分離相當方便。
打印口
標準打印口分為3個端口,基地址為數(shù)據(jù)端口,基地址+1為狀態(tài)端口,基地址+2為控制端口??刂疲校玫模茫停希釉O(shè)置打印口模式為ECP+EPP,打印口首地址即為0x378。以下闡述寫卡器中如何使用打印口的3個端口。
?。ǎ保?shù)據(jù)端口(0x378)
數(shù)據(jù)端口中有8根數(shù)據(jù)線,與NANDFlash相連傳輸一個字節(jié)的數(shù)據(jù)。其中,D0和D1被復用,通過573鎖存器連接NANDFlash的CLE和ALE兩個控制引腳。
(2)狀態(tài)端口(0x379)
狀態(tài)端口僅使用了第6個狀態(tài)位作為NANDFlash的R/?B應答信號,其余3、4、5、7這4位打印機的標準應答未使用,保留供以后功能擴展使用。
?。ǎ常┛刂贫丝冢ǎ埃常罚粒?/FONT>
控制端口使用了5個控制位,具體意義如圖2所示。

圖2 控制端口對NANDFlash的控制
?。模?、D1、D2位對NANDFlash進行控制,D3位對鎖存器進行控制,D5位控制打印口數(shù)據(jù)端口的輸入/輸出方向。D5位置0時,PC通過打印口數(shù)據(jù)端口輸出數(shù)據(jù)到NANDFlash;置1時,通過打印口數(shù)據(jù)端口接收NAND2Flash數(shù)據(jù)。在打印口連接器處,D0、D1、D3位反相輸出,而D2位是正相輸出,即D0、D1、D3位輸出1,NAND2Flash獲得0;D2位輸出1,NANDFlash獲得1。
打印口與存儲卡連接
打印口通過50針卡座與存儲卡的50孔卡口相連,從而連接存儲卡上的NANDFlash,具體的口線連接如圖3所示。

圖3 寫卡器與NANDFlash連接
在圖3中,并未畫出卡座與卡口的具體連接線,因為它們只是起連接中轉(zhuǎn)作用。
由圖3可知,打印口的引腳1控制NANDFlash芯片有效,引腳2~9控制NANDFlash的8個IO口,其中引腳2和3通過573鎖存器復用控制NANDFlash的CLE(命令允許)和ALE(地址允許),引腳10接收NANDFlash的(狀態(tài)信號),引腳14控制NANDFlash的(寫有效),引腳16控制NANDFlash的(讀有效),引腳17控制鎖存器的(允許鎖存)。其他的打印口引腳未使用,一些接高電阻,一些接地,在圖中未畫出。
?。危粒危模疲欤幔螅栊枰常常种绷麟姽╇?,寫卡器通過直流電源變壓器調(diào)整電壓后為NANDFlash供電。
存儲系統(tǒng)軟件
存儲系統(tǒng)軟件采用標準C編寫,編譯器為Borland公司的BC3.0。由于采用標準C編寫程序,使得軟件具有良好的兼容性和可移植性。目前,本系統(tǒng)軟件支持三星公司的各種存儲容量的NANDFlash,如32MB(兆字節(jié))、64MB、128MB、256MB。
存儲系統(tǒng)軟件框架
存儲系統(tǒng)由上至下分控制層、應用層、基礎(chǔ)層3個層次,軟件框架如圖4所示?;A(chǔ)層封裝了對NANDFlash操作的底層實現(xiàn),構(gòu)成一個底層平臺,為應用層提供調(diào)用接口。應用層完成各種NANDFlash應用操作,為控制層提供調(diào)用接口??刂茖訄?zhí)行全局調(diào)用。
控制層由主控模塊組成,根據(jù)命令行參數(shù)調(diào)用應用層各模塊。
應用層包括:
?。ǎ保┏跏蓟K:讀取NANDFlash的設(shè)備信息,獲得其存儲容量和分頁分塊參數(shù)。
?。ǎ玻┳x數(shù)據(jù)模塊:首先調(diào)用基礎(chǔ)層的NANDFlash塊偏移模塊獲得相對地址,而后調(diào)用讀一頁模塊讀取所需數(shù)據(jù)。
?。ǎ常憯?shù)據(jù)模塊:首先同于讀數(shù)據(jù)模塊獲得相對地址,而后調(diào)用基礎(chǔ)層的寫一頁模塊將數(shù)據(jù)寫入指定地址。
(4)擦除模塊:首先同于讀模塊獲得相對地址,而后反復調(diào)用基礎(chǔ)層的擦一頁模塊將整個NANDFlash擦除。
?。ǎ担椭K:提示使用者本軟件系統(tǒng)的功能和相關(guān)命令行參數(shù)設(shè)置。
?。ǎ叮危粒危模疲欤幔螅鑿臀荒K:使NANDFlash復位,恢復到未發(fā)生任何操作前的狀態(tài)。
?。ǎ罚危粒危模疲欤幔螅铏z查模塊:顯示NANDFlash的設(shè)備號、壞塊個數(shù)、存儲容量等相關(guān)信息。
基礎(chǔ)層包括:
?。ǎ保危粒危模疲欤幔螅鑹K偏移模塊:根據(jù)NANDFlash壞塊記錄模塊記錄的壞塊信息,進行地址轉(zhuǎn)換,將NAND2Flash中所有正常塊的物理地址轉(zhuǎn)換為相對地址。
?。ǎ玻┯嫊r模塊:記錄讀數(shù)據(jù)、寫數(shù)據(jù)、擦除3種應用層操作所花費的時間,與此3種操作同時運行。
?。ǎ常┳x一頁模塊:根據(jù)NANDFlash讀操作的時序圖,向NANDFlash送入正確的命令字和地址,讀取一頁數(shù)據(jù)并存放到接收緩沖區(qū)中。

圖4 存儲系統(tǒng)軟件框架
?。ǎ矗懸豁撃K:根據(jù)NANDFlash寫操作的時序圖,向NANDFlash送入正確的命令字和地址,在NAND2Flash的指定地址寫入一頁數(shù)據(jù)。
?。ǎ担┎烈豁撃K:根據(jù)NANDFlash擦操作的時序圖,向NANDFlash送入正確的命令字和地址,擦除NAND2Flash指定地址的一頁數(shù)據(jù)。
(6)NANDFlash壞塊記錄模塊:在進行應用層擦除操作的同時,將發(fā)現(xiàn)的壞塊全部記錄下來,存放在NANDFlash的個塊的頁中。當NANDFlash的個塊是壞塊,或其壞塊個數(shù)超過10時,此NAND2Flash將不再被使用。
?。ǎ罚懨钅K:向NANDFlash送入命令字,控制NANDFlash下一步將進行何種操作。
(8)寫地址模塊:向NANDFlash送入地址,控制NANDFlash下一步將在什么地址進行操作。
(9)讀NANDFlash狀態(tài)模塊:在對NANDFlash進行任何操作前,都必須讀?。危粒危模疲欤幔螅璁斍暗臓顟B(tài),判斷其處于READY狀態(tài)還是BUSY狀態(tài)。
典型操作實現(xiàn)
?。危粒危模疲欤幔螅璨僮髦?,為典型的是讀操作。NANDFlash以存儲容量128MB為界,界兩端因分頁分塊參數(shù)不同而導致操作時序不同。以下以64MB和128MB的NANDFlash為例,分析它們讀操作時序的不同,并給出關(guān)鍵的實現(xiàn)過程。

圖5?。叮矗停潞停保玻福停拢危粒危模疲欤幔螅枳x操作時序?qū)Ρ?/FONT>
圖5給出了64MB和128MB兩種典型存儲容量的NANDFlash的讀操作時序?qū)Ρ龋瑑烧咧g主要的不同集中在I/OX上。要進行數(shù)據(jù)的讀取,首先必須向NANDFlash發(fā)送數(shù)據(jù)存放的地址。ANDFlash的地址分為列地址和行地址,列地址用于頁內(nèi)尋址,而行地址用于頁尋址。128M字節(jié)NANDFlash的頁容量為2048字節(jié),而64MBNANDFlash的頁容量為512字節(jié),這使得它們的列地址線數(shù)目有所不同,前者為11根,后者為9根。128MB以下的NANDFlash將頁容量固定為512字節(jié),隨著存儲容量的增大,行地址線也隨之增加;而128MB及以上的NANDFlash頁容量是可以改變的,容量為64KB,同時頁尋址空間也可以擴大,這增加了擴大尋址空間的靈活性和數(shù)據(jù)訪問效率。I/OX上另一個重要不同點是128MB及以上存儲容量的NANDFlash,在向其發(fā)送列地址和行地址后,還要發(fā)送一個命令字0x30,然后讀取NANDFlash中指定地址的數(shù)據(jù),而64MB的NANDFlash發(fā)送地址后直接讀取數(shù)據(jù)。
以下給出從兩種典型NANDFlash中讀取一頁數(shù)據(jù)的代碼描述:
/*向NAND?。疲欤幔螅璋l(fā)送讀開始命令字*/
?。疲欤幔螅琛。祝颍椋簦濉。茫停模ǎ茫停模撸遥牛粒模撸保撸埃?;
?。创鎯θ萘繀^(qū)分NANDFlash*/
switch(FlashLevel){
?。鎯θ萘浚叮矗停碌模危粒危摹。疲欤幔螅瑁?/FONT>
?。茫幔螅濉。疲蹋粒樱龋撸裕伲校牛撸叮矗停拢?/FONT>
/*向64MB的NANDFlash發(fā)送列地址和行地址*/
?。疲欤幔螅琛。祝颍椋簦澹粒模遥ǎ埃埃埃?;
Flash?。祝颍椋簦澹粒模遥ǎǎ校幔纾澹粒洌洌颍Γ埃疲疲?;
Flash?。祝颍椋簦澹粒模遥ǎǎ校幔纾澹粒洌洌颍荆荆福Γ埃疲疲?;
?。却危粒危模疲欤幔螅杈途w,置打印口的數(shù)據(jù)端口為輸入狀態(tài)*/
?。疲欤幔螅琛。祝颍椋簦濉。粒模拢ǎǎ校幔纾濉。粒洌洌颍荆荆保叮Γ埃疲疲?;
?。猓颍澹幔耄?/FONT>
?。鎯θ萘浚保玻福停碌模危粒危摹。疲欤幔螅瑁?/FONT>
?。茫幔螅濉。疲蹋粒樱龋撸裕伲校牛撸保玻福停拢?/FONT>
/*向128MB的NAND?。疲欤幔螅璋l(fā)送列地址和行地址*/
Flash?。祝颍椋簦濉。粒模遥ǎ埃埃埃?;
Flash?。祝颍椋簦濉。粒模遥ǎ埃埃埃?;
Flash?。祝颍椋簦濉。粒模遥ǎǎ校幔纾濉。粒洌洌颍Γ埃疲疲?;
Flash?。祝颍椋簦濉。粒模遥ǎǎ校幔纾濉。粒洌洌颍荆荆福Γ埃疲疲?;
?。却危粒危模疲欤幔螅杈途w,置打印口的數(shù)據(jù)端口為輸入
狀態(tài)*/
?。疲欤幔螅瑁祝颍椋簦澹茫停拢ǎ茫停模撸遥牛粒模撸常?/FONT>
?。猓颍澹幔?;
}
?。x取一頁數(shù)據(jù)存放到接收緩沖區(qū)中*/
?。妫铮颍ǎ椋剑埃唬椋穑裕幔颍纾澹簦郏椋荩剑疲欤幔螅瑁遥澹幔洌模粒裕ǎ?;
?。?/FONT>
?。梗危粒危模疲欤幔螅锜o效*/
FLASH_CE_HIGH;
讀數(shù)據(jù)流程完全遵從時序圖,首先送第1個讀命令字和行列地址,128MB的NANDFlash要送第2個讀命令字,然后通過將打印口控制端口的第5位置1使數(shù)據(jù)端口處于輸入狀態(tài),以接收NANDFlash中指定地址的一頁數(shù)據(jù),并將數(shù)據(jù)寫入接收緩沖區(qū),使NANDFlash無效,讀取一頁數(shù)據(jù)操作完成。
對時序圖中NANDFlash各控制命令的控制,由打印口的控制端口完成,通過控制端口各位的電平輸出實現(xiàn)對NANDFlash的控制。
實驗
在設(shè)計實現(xiàn)了存儲系統(tǒng)軟硬件的基礎(chǔ)上,針對三星公司不同存儲容量的NANDFlash進行了一系列的實驗,實驗環(huán)境為賽陽1.8G,128MB內(nèi)存,CMOS并口設(shè)置為基地址0x378,模式ECP+EPP,操作系統(tǒng)為Windows98。
表1 擦/讀/寫NANDFlash實驗數(shù)據(jù)



表1給出了擦/讀/寫NANDFlash的實驗數(shù)據(jù)。對64MB、128MB、256MB3種存儲容量的NANDFlash進行了5次擦除實驗,針對6種尺寸的實驗文件進行了讀取和寫入實驗,根據(jù)這些實驗數(shù)據(jù)繪出了圖6的實驗曲線。
圖6(a)給出了擦除64MB、128MB、256MB的NANDFlash的5條實驗曲線。由圖可知,5條曲線非常接近,且擦除時間隨NANDFlash存儲容量的變化基本呈線性變化。

圖6 擦/讀/寫NANDFlash
圖6(b)給出了從64MB、128MB、256MB的NAND2Flash中讀取不同尺寸數(shù)據(jù)所花費時間的實驗曲線。由圖可知,不管是何種存儲容量的NANDFlash,其讀取時間隨讀取數(shù)據(jù)尺寸變化基本呈線性變化。
圖6(c)給出了向64MB、128MB、256MB的NAND2Flash中寫入不同尺寸文件所花費時間的實驗曲線。由圖可知,不管是何種存儲容量的NANDFlash,其寫入時間隨寫入文件尺寸變化基本呈線性變化。
對比圖6的(b)和(c),不難發(fā)現(xiàn)對于相同存儲容量的NANDFlash,寫入時間比讀取時間稍長一些,這與讀和寫的控制時序有關(guān)。
從圖6的(b)和(c)中還能發(fā)現(xiàn)對64MB的NAND2Flash讀取和寫入相同尺寸數(shù)據(jù)所花費的時間較128MB和256MB稍長,說明增大頁容量后NANDFlash的存取速度得到了提高。
表2 測試1MBFlashs

表2為文中通過邊界掃描技術(shù)對Flash編寫的測試結(jié)果,其中采用FFC方法獲得的Flash編寫時間是短的,編寫1MB為7.5s。圖6的實驗曲線表明Flash編寫時間隨其存儲容量基本呈線形變化,由此推算采用FFC方法編寫容量為64MB、128MB、256MB的時間分別為480s、960s、1920s,與表1的實驗數(shù)據(jù)比較,編寫時間明顯加長了。盡管NANDFlash復用數(shù)據(jù)線和地址線,縮短了邊界掃描鏈的長度,使得對NANDFlash的編寫時間有所縮短,但邊界掃描技術(shù)對NANDFlash的控制信號始終是通過TAP(testaccessport)板驅(qū)動微處理器產(chǎn)生的,信號周期總是長于直接控制信號周期。
由表1和表2的實驗數(shù)據(jù)和實驗結(jié)果分析可知,與邊界掃描技術(shù)相比,本存儲系統(tǒng)對NANDFlash的操作時間有明顯縮短。
表1的實驗數(shù)據(jù)表明,本存儲系統(tǒng)能很好地完成對NANDFlash的各種操作。由于本系統(tǒng)結(jié)構(gòu)簡單,未使用任何微處理器,因而性價比較高。
在成功進行NANDFlash擦/讀/寫實驗后,本存儲系統(tǒng)對NANDFlash的控制結(jié)構(gòu)復用到了嵌入式車載導航設(shè)備中。由于軟件采用標準C編寫,控制結(jié)構(gòu)復用,使得軟件移植非常方便,僅需改動對GPIO(general purpose?。椋睿穑酰簟。铮酰簦穑酰簦┛刂撇糠值某绦?。將本存儲系統(tǒng)的軟硬件復用到嵌入式車載導航設(shè)備的成功,表明本系統(tǒng)對NANDFlash的控制結(jié)構(gòu)具備良好的復用性和較高的實用性。
結(jié)論
本文提出一種控制結(jié)構(gòu)復用的NANDFlash存儲系統(tǒng),完成了對NANDFlash的各種操作。與邊界掃描技術(shù)相比,本存儲系統(tǒng)結(jié)構(gòu)簡單、操作時間短、性價比高。本存儲系統(tǒng)的成功實現(xiàn),為其他嵌入式產(chǎn)品存儲系統(tǒng)的設(shè)計開發(fā)提供了一種切實可行的思路。一類采用NANDFlash作為數(shù)據(jù)存儲介質(zhì)的嵌入式產(chǎn)品均可復用本存儲系統(tǒng)對NANDFlash的控制結(jié)構(gòu),實現(xiàn)對NANDFlash的控制.下一步的工作在于優(yōu)化存儲系統(tǒng)的硬件和軟件,加快NANDFlash操作的速度。
歡迎轉(zhuǎn)載,信息來自維庫電子市場網(wǎng)(www.udpf.com.cn)
版權(quán)與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 什么是氫氧燃料電池,氫氧燃料電池的知識介紹2025/8/29 16:58:56
- SQL核心知識點總結(jié)2025/8/11 16:51:36
- 等電位端子箱是什么_等電位端子箱的作用2025/8/1 11:36:41
- 基于PID控制和重復控制的復合控制策略2025/7/29 16:58:24
- 什么是樹莓派?一文快速了解樹莓派基礎(chǔ)知識2025/6/18 16:30:52









