YAFFS2在嵌入式系統中的實(shí)現
隨著(zhù)嵌入式技術(shù)的不斷發(fā)展,嵌入式系統的應用越來(lái)越廣泛,人們對于嵌入式系統功能的要求也越來(lái)越高,相應地其大容量數據存儲和管理變得越來(lái)越重要。相對硬盤(pán)而言,FLASH等非易失性存儲器具有體積小、功耗低、成本低、抗震強等優(yōu)點(diǎn),已在嵌入式系統中被大量作為存儲設備使用,而大容量非易失數據存儲方案的應用還存在成本和軟件支持方面的問(wèn)題需要克服。大頁(yè)NAND FLASH具有寫(xiě)入速度快、容量大、成本低等優(yōu)點(diǎn),適合于需要進(jìn)行數據存儲的場(chǎng)合。YAFFS2作為專(zhuān)門(mén)支持大頁(yè)NAND FLASH的文件系統在U-Boot和嵌入式Linux上一直沒(méi)有得到正式支持。本文結合部隊應用實(shí)際,在嵌入式Linux系統中實(shí)現了大頁(yè)NAND FLASH和YAFFS2文件系統的結合,為裝備的數據存儲處理搭建起了小型的智能化平臺。本文內容安排如下,首先介紹系統存儲方案特點(diǎn)和YAFFS2數據在大頁(yè)NAND FLASH上的儲存方式,然后詳細敘述系統移植和文件系統制作過(guò)程,最后對移植結果進(jìn)行測試。
l 系統存儲方案設計
某國產(chǎn)化設備用于取代隨裝多臺套設備,除完成原設備的數據記錄功能外,還需進(jìn)行數據翻譯、判讀,數據分析處理,二維顯示和三維動(dòng)態(tài)復現等功能;同時(shí),需存儲裝備長(cháng)時(shí)間工作輸出的所有原始數據信息,類(lèi)似黑匣子功能,以供事后分析使用。具有程序量大,數據需實(shí)時(shí)存儲,且數據存儲量大的特點(diǎn)。板上存儲設備包括SDRAM和FLASH,SDRAM為易失性存儲器,作為程序的運行空間和記錄數據的緩存空間;FLASH為非易失性存儲器,用于存儲系統軟件程序和記錄數據。
嵌入式系統中應用的FLASH主要有NORFLASH和NAND FLASH兩種。NOR FLASH的塊大小范圍為64~128 KB,其容量一般為l~32 MB,可作為嵌入式設備的啟動(dòng)設備,適合于代碼存儲。NAND FLASH的塊大小范圍為8~64 KB,容量一般為8~512 MB,適合于數據存儲。它們之間的主要差別有以下幾點(diǎn)。
(1)速度。在寫(xiě)數據和擦除數據時(shí),NANDFLASH支持整塊擦寫(xiě)操作,其速度比NOR FLASH要快得多,兩者相差近千倍;讀取時(shí),NAND FLASH要先向芯片發(fā)送地址信息進(jìn)行尋址才能開(kāi)始讀寫(xiě)數據,而NOR FLASH的操作則是以字或字節為單位進(jìn)行的,直接讀取,所以讀取數據時(shí),NOR FLASH效率更高。
(2)容量和成本。NOR FLASH的每個(gè)存儲單元與位線(xiàn)相連,增加了芯片內位線(xiàn)的數量,不利于存儲密度的提高。在面積和工藝相同的情況下,NANDFLASH的容量比NOR FLASH要大得多,生產(chǎn)成本更低。
(3)易用性。NAND FLASH的I/O端口采用復用的數據線(xiàn)和地址線(xiàn),必須先通過(guò)寄存器串行地進(jìn)行數據存取,各個(gè)產(chǎn)品或廠(chǎng)商對信號的定義不同,增加了應用的難度;NOR FLASH有專(zhuān)用的地址引腳來(lái)尋址,較容易與其他芯片進(jìn)行連接,另外還支持片上執行XIP(eXecute In Place),應用程序可以直接在FLASH內部運行,簡(jiǎn)化了產(chǎn)品設計。
(4)可靠性。由于FLASH的電器特性,在讀/寫(xiě)數據過(guò)程中,會(huì )產(chǎn)生比特位反轉,造成一位或幾位數據錯誤。NAND FLASH位反轉的幾率比NOR FLASH高,在使用時(shí)需要使用EDC/ECC算法。NANDFLASH還可能會(huì )隨機分布壞塊。
(5)耐久性。FLASH由于寫(xiě)入和擦除數據時(shí)會(huì )導致介質(zhì)的氧化降解,導致芯片老化,所以并不適合頻繁地擦寫(xiě),NAND FLASH的擦寫(xiě)次數是100萬(wàn)次,而NOR FLASH只有10萬(wàn)次。
基于以上分析,為了滿(mǎn)足經(jīng)常性的進(jìn)行實(shí)時(shí)快速大容量數據存儲和較長(cháng)使用壽命的要求,采用NANDFLASH來(lái)存儲操作系統和數據,其復雜操作、比特位反轉和壞塊等問(wèn)題可以通過(guò)文件系統解決。NORFLASH因為出現位反轉和壞塊的幾率小,并且讀取速度快,用來(lái)存儲啟動(dòng)程序,能保證正常啟動(dòng)系統的前提下提高設備反應時(shí)間。整個(gè)系統的存儲空間分配如圖1所示。
整個(gè)系統存儲空間由SDRAM,NOR FLASH,NAND FLASH組成。其中,sDRAM分成程序空間(Prog Space)和數據空間(Data Space)。NORFLASH存儲系統啟動(dòng)程序U-Boot;NAND FLAsH分成程序空間(Prog Space)和數據空間(Data Space),程序空間中固化存儲Linux操作系統和YAFFS2文件系統及相應的應用程序,在U-Boot的控制下,通過(guò)頁(yè)傳輸方式讀入SDRAM程序空間中;數據空間中存儲來(lái)自前端的原始數據,該數據在SDR-AM中打包,以頁(yè)方式將數據寫(xiě)入NAND FLASH中,提高數據寫(xiě)入速度。
對小頁(yè)NAND FLASH的文件系統支持已有比較多的編程實(shí)例可借鑒,而對本文使用的大頁(yè)NANDFLASH的編程支持還沒(méi)有完整的說(shuō)明。因此,移植嵌入式操作系統,以建立對大頁(yè)NAND FLASH支持的文件系統是該存儲方案需解決的關(guān)鍵問(wèn)題。
2 YAFFS/YAFFS2文件系統分析
目前廣泛應用的嵌入式文件系統有JFFS/JFFS2(JournaIling FLASH File Systern) 和 YAFFS/YAFFS2(Yet Another FLASH File Syst-em)。JFFS/JFFS2文件系統主要針對NOR FLASH設計,在NAND FLASH上性能不佳。YAFFS/YAFFS2文件系統是專(zhuān)門(mén)針對NAND FLASH設計,其具有可寫(xiě)入、修改并能永久保存文件的特性,并提供了損耗平衡和掉電保護。與JFFS相比,它減少了一些功能,因此速度更快、占用內存更少。此外YAFFS自帶NANDFLASH芯片驅動(dòng),并為嵌入式系統提供了直接訪(fǎng)問(wèn)文件系統的API,用戶(hù)可以不使用Linux中的MTD和VFS,直接對文件進(jìn)行操作。
YAFFS文件系統已發(fā)展為兩個(gè)版本,YAFFS和YAFFS2。YAFFS版本只支持512 B的小頁(yè)NANDFLASH。而YAFFS2作為YAFFS的升級版,在向下兼容小頁(yè)NAND FLASH的同時(shí)也能夠更好地支持2 KB的大頁(yè)NAND FLASH。YAFFS2的性能與YAFFS相比有很大提高,表1為YAFFS,YAFFS2(512 B×8),YAFFS2(2 KB×8)三者性能比較,從測試結果可以看出,YAFFS2和2 KB大頁(yè)NANDFLASH的結合更好地提高了存儲器操作效率。
YAFFS2文件系統在設計時(shí)就充分考慮了大頁(yè)NAND FLASH的結構,根據大頁(yè)NAND FLASH以頁(yè)面為單位存取的特點(diǎn),將文件組織成固定大小的頁(yè),利用大頁(yè)NAND FLASH提供的每個(gè)頁(yè)面(2 112 B,其中前2 048 B存儲數據)64 B的備用空間(SpareData,OOB)來(lái)存放ECC和文件系統的組織信息,這樣不僅能夠實(shí)現錯誤檢測和壞塊處理,還能夠提高文件系統的加載速度。以三星公司的K9F1G08UOA的NANDFLASH為例,它的單片存儲容量為128 MB,由1 024 block組成,每個(gè)塊包含64 page,每個(gè)頁(yè)均包含一個(gè)2 048 B的數據區和64 B的備用空間,總共包含2 112 B。結構如圖2所示。
評論