張 鵬,孫甲松,陳從華
(1.清華大學(xué)電子工程系,北京100084;2.廈門雅迅網(wǎng)絡(luò)股份有限公司福建廈門361008)
基于NOR FLASH的嵌入式FAT文件系統(tǒng)
張 鵬1,2,孫甲松1,陳從華2
(1.清華大學(xué)電子工程系,北京100084;2.廈門雅迅網(wǎng)絡(luò)股份有限公司福建廈門361008)
本課題就是要設(shè)計一套確實可行的方案,將FAT文件系統(tǒng)管理文件/數(shù)據(jù)的理念應(yīng)用于FLASH芯片上。本設(shè)計采用了數(shù)據(jù)塊使用情況信息表BIM和定位表MAT這兩個結(jié)構(gòu)。通過利用NOR FLASH的特性,在不頻繁擦寫的情況下記錄數(shù)據(jù)塊當(dāng)前狀態(tài)和擦寫次數(shù),將FAT表和數(shù)據(jù)塊磨損信息實時寫入到FLASH存儲器中。在此基礎(chǔ)上制定合理的均衡損耗策略,并實現(xiàn)壞塊管理、碎片回收。適用于內(nèi)存資源有限、對上電時間有要求、可能隨時掉電的終端。令終端能夠使用標(biāo)準(zhǔn)接口快速存儲、訪問大容量數(shù)據(jù),并提高FLASH器件使用壽命。
文件系統(tǒng);FLASH;FAT;嵌入式
FLASH即半導(dǎo)體存儲器,已被廣泛應(yīng)用于便攜式設(shè)備等嵌入式系統(tǒng)中。具有非易失性、功耗低、成本低、體積小、容量大、讀寫速度快、無機械故障等優(yōu)點。隨著存儲器容量的不斷增大、嵌入式設(shè)備應(yīng)用功能增多和系統(tǒng)復(fù)雜性的增加,如何高效地存儲和管理數(shù)據(jù)從而方便上層開發(fā)應(yīng)用,成為一個重要的課題。引入嵌入式FLASH文件系統(tǒng)正是解決這個問題的好辦法。文件系統(tǒng)可以帶來如下幾點便利:能夠高效的存儲和管理數(shù)據(jù),提高存儲可靠性,方便快捷檢索文件,使數(shù)據(jù)庫具有高靈活性、良好的可移植性及可裁剪性,縮短上層應(yīng)用開發(fā)周期。
本設(shè)計是以NOR FLASH為平臺進(jìn)行開發(fā)設(shè)計。NOR FLASH的數(shù)據(jù)區(qū)必須先經(jīng)過擦除操作才能寫入。擦除操作以數(shù)據(jù)塊(BLOCK,也稱為扇區(qū),或者擦除單元)為單位。數(shù)據(jù)塊在正確擦除后,塊內(nèi)所有數(shù)據(jù)位都被置為“1”。軟件執(zhí)行的寫入操作可使必要的數(shù)據(jù)位從“1”變成“0”(bit),但是要再想讓位由“0”改為“1”,就不能夠直接通過寫入指令完成,須要重復(fù)以上的“擦除——寫入”流程。請注意,并不是每次寫入NOR FLASH芯片都需要進(jìn)行擦除,可以只進(jìn)行一些數(shù)據(jù)位的清除。后面提到的設(shè)計方案就用到了該特性。
由于是在嵌入式終端上使用的文件系統(tǒng),運行環(huán)境比較惡劣,設(shè)計時要考慮到應(yīng)用場景的約束:
1)嵌入式MCU資源較少。包括了ROM和RAM,尤其是RAM,電子設(shè)備由于要考慮成本會采用盡量低配的芯片,往往沒有過多的資源用于文件系統(tǒng)。
2)要求啟動時間短。在一些應(yīng)用場合中,要求終端必須在一定時間內(nèi)完成上電初始化進(jìn)入正常運行狀態(tài)。
3)終端電源隨時可能被關(guān)閉,因此信息數(shù)據(jù)最好能夠?qū)崟r更新到FLASH器件中。
目前JFFS和YAFFS是比較常用的FLASH文件系統(tǒng)。它們都是日志型文件系統(tǒng),需要在開機時從頭至尾掃描FLASH器件中所有數(shù)據(jù)塊的數(shù)據(jù),在終端的內(nèi)存中生成一個記錄文件系統(tǒng)信息的目錄樹。這種設(shè)計有一定的局限性,文件索引信息會占用太多的內(nèi)存資源,并且初始化時掃描時間較長,因此沒有辦法用在一些嵌入式終端中。本次設(shè)計采用FAT文件系統(tǒng)的處理和管理數(shù)據(jù)、文件方法。而如何解決均衡磨損的問題則是本次設(shè)計的難點。
嵌入式系統(tǒng)中的FLASH不能直接移植通用的FAT文件系統(tǒng)。在通用的FAT文件系統(tǒng)中,系統(tǒng)的記錄信息(例如FAT表)放在固定的數(shù)據(jù)塊,在文件系統(tǒng)使用過程中記錄信息需要經(jīng)常被改寫,會導(dǎo)致其所在數(shù)據(jù)塊頻繁擦寫,從而減少器件使用壽命。這是移植文件系統(tǒng)的難點,也是本次設(shè)計所要著重解決的問題。
之前有些嵌入式FAT設(shè)計是將文件系統(tǒng)的記錄信息暫時存放到靜態(tài)內(nèi)存,再定時存儲到FLASH芯片中。這種設(shè)計比較適用于電源穩(wěn)定,關(guān)機時要能夠有充足時間保存信息的場景。這種設(shè)計并不能很好的適用于上述隨時可能掉電的終端上。首先掉電時會丟失還未存儲的數(shù)據(jù),定時時間間隔越長丟的數(shù)據(jù)越多。而且更嚴(yán)重的是,定時時間如果相對于數(shù)據(jù)存儲的時間間隔不夠,則文件系統(tǒng)的記錄信息所處數(shù)據(jù)塊達(dá)不到均衡磨損的目的,定時間隔越短,反而越容易形成“集中磨損”。
本研究目的在于提供一種在NOR FLASH存儲器上建立FAT文件系統(tǒng)的優(yōu)化方法,實現(xiàn)了FAT文件系統(tǒng)的掉電保護(hù)、壞塊管理、碎片回收和均衡損耗策略。制定合理的壞塊管理、碎片回收、均衡損耗策略。本設(shè)計將數(shù)據(jù)塊擦除次數(shù)實時記錄到FLASH當(dāng)中,可用于隨時掉電的應(yīng)用場景。
以下設(shè)計方案以MX25L1606E芯片為例。容量為16M-bit。器件數(shù)據(jù)區(qū)分為512個數(shù)據(jù)塊,每塊16頁,每頁256個字節(jié)。其它容量類型的FLASH可以自行計算調(diào)整設(shè)計參數(shù)。
通用的FAT文件系統(tǒng)基本結(jié)構(gòu)如圖1所示,包括MBR、DBR及其副本、FAT1、FAT2和數(shù)據(jù)區(qū),根目錄包含在數(shù)據(jù)區(qū)中。
圖1 通用FAT文件系統(tǒng)結(jié)構(gòu)
其中MBR是主引導(dǎo)記錄,DBR是分區(qū)引導(dǎo)扇區(qū)。它們包括了文件系統(tǒng)的基本信息。對于電子設(shè)備終端來說,由于FLASH芯片屬于內(nèi)部器件,且容量等參數(shù)信息為已知,并不會在使用過程中更換不同規(guī)格的存儲器。因此并不需要MBR、DBR這部分?jǐn)?shù)據(jù)內(nèi)容。每扇區(qū)字節(jié)數(shù)和每簇扇區(qū)數(shù)這些參數(shù)信息可以在程序中直接根據(jù)芯片參數(shù)進(jìn)行賦值。因此可以只保留FAT表、根目錄和普通數(shù)據(jù)區(qū)。
本設(shè)計引入BIM數(shù)據(jù)塊使用情況信息表和MAT數(shù)據(jù)塊定位表。由于終端設(shè)備可能會出現(xiàn)在擦除或?qū)懭氲倪^程中掉電的情況。必須考慮數(shù)據(jù)的安全性。對此,本系統(tǒng)中的FAT、根目錄、BIM、MAB作為重要數(shù)據(jù)都進(jìn)行雙備份處理。每次都順序擦除寫入數(shù)據(jù)。若設(shè)備在上電后發(fā)現(xiàn)其中有數(shù)據(jù)塊因為一些原因遭到破壞使得信息無效,則從另一份數(shù)據(jù)中拷貝至失效的數(shù)據(jù)塊中完成恢復(fù)。
實際FLASH文件系統(tǒng)結(jié)構(gòu)圖如圖2所示。
圖2 嵌入式FAT系統(tǒng)的結(jié)構(gòu)示意圖
BIM(Block Information Map)記錄了FLASH數(shù)據(jù)塊當(dāng)前狀態(tài)及已擦除次數(shù)。對于要實時寫入信息至閃存的終端來說,BIM的問題和FAT表一樣,如果每擦除一個數(shù)據(jù)塊就要更新BIM,那么BIM將因頻繁擦寫而提前損壞。為了解決這個問題,具體實施方法如下。
案例中FLASH總共512個數(shù)據(jù)塊,每個塊可以用8個字節(jié)信息來記錄。記錄結(jié)構(gòu)體結(jié)構(gòu)分為3個部分,如圖3所示。
圖3 BIM結(jié)構(gòu)體示意圖
每個數(shù)據(jù)塊的記錄分成3個部分。低位標(biāo)4個字節(jié)包含32個bit位作為單次計數(shù),初始化為“1”。當(dāng)對應(yīng)的數(shù)據(jù)塊產(chǎn)生擦除操作時,將最低位的“1”變?yōu)椤?”來計數(shù)(此時可以直接寫入而不需要擦除數(shù)據(jù)塊使用情況信息表)。中間兩個字節(jié)長度記錄擦除32次的倍數(shù)。當(dāng)32個數(shù)據(jù)位全部清0時,倍數(shù)計數(shù)加1。由此,可記錄數(shù)據(jù)塊擦除次數(shù)總共為200萬次。而平均擦除其他數(shù)據(jù)塊平均32次才需要擦除一次數(shù)據(jù)塊使用情況信息表,不至于頻繁修改該信息表。
而最高位兩個字節(jié)表示對應(yīng)數(shù)據(jù)塊的當(dāng)前狀態(tài)。其各值含義如下:
0xA5FF-空閑
0xA5FE-正在準(zhǔn)備寫入數(shù)據(jù)
0xA5FC-已寫入有效數(shù)據(jù)
0xA5F8-已被刪除的數(shù)據(jù)
0xA580-壞塊
可以看出數(shù)據(jù)塊狀態(tài)逐步變化時可以只寫入數(shù)據(jù)位而不需要重新擦除。
圖4 數(shù)據(jù)塊使用情況信息表數(shù)據(jù)示例
按照上面的存儲方式,就可以將所有數(shù)據(jù)塊的擦除次數(shù)記錄在FLASH當(dāng)中。在此前提下,設(shè)計合理的數(shù)據(jù)塊損耗均衡算法。
當(dāng)某個數(shù)據(jù)塊需要擦寫時,根據(jù)所有數(shù)據(jù)塊的擦除情況重新檢查,視情況分配新的數(shù)據(jù)塊繼續(xù)存儲數(shù)據(jù)。以達(dá)到均衡磨損的目的。
由于是嵌入式內(nèi)部使用的文件系統(tǒng),可以在分配新的數(shù)據(jù)塊的算法上,考慮熱區(qū)數(shù)據(jù)和冷區(qū)數(shù)據(jù)兩種,區(qū)別分配算法。可以通過上層應(yīng)用定義文件夾來歸類這兩種數(shù)據(jù)。
所謂熱區(qū)數(shù)據(jù),是指經(jīng)常更新的數(shù)據(jù)信息。比如終端的定時采集記錄數(shù)據(jù)、設(shè)備使用狀態(tài)信息等等。系統(tǒng)先設(shè)定擦除次數(shù)差值上限,定義為閾值T。如果熱區(qū)信息數(shù)據(jù)塊總擦除次數(shù)高出所有數(shù)據(jù)塊平均擦除次數(shù)超出閾值T時,判斷熱區(qū)數(shù)據(jù)需要分配新數(shù)據(jù)塊。熱區(qū)數(shù)據(jù)的分配比較簡單,掃描整個BIM,查找標(biāo)志為“空閑”或“已刪除”的擦除次數(shù)最少的數(shù)據(jù)塊,作為新的數(shù)據(jù)塊進(jìn)行記錄即可。
而冷區(qū)數(shù)據(jù)是指很久才更新一次,或者甚至設(shè)備出廠后都不怎么更新的數(shù)據(jù)信息。比如文件系統(tǒng)的根目錄和終端的參數(shù)。對于這類信息,在其數(shù)據(jù)更新時先判斷其擦除總次數(shù)是否低于或高于平均擦除次數(shù)太多(分別設(shè)置兩個閾值),如果需要重新分配新數(shù)據(jù)塊,則先計算所有數(shù)據(jù)塊平均擦除次數(shù),在低于平均擦除次數(shù)的數(shù)據(jù)塊中尋找最接近這個平均值的塊進(jìn)行存儲。
通過對熱、冷區(qū)數(shù)據(jù)的特殊處理,可以更好的實現(xiàn)數(shù)據(jù)塊損耗均衡。
MAT(Map Allocation Table)用于記錄定位 FAT表、根目錄及BIM分別在哪個數(shù)據(jù)塊中。由于擦寫次數(shù)的限制,F(xiàn)AT表、根目錄、BIM不能處于固定的扇區(qū)。當(dāng)這3個表所在的數(shù)據(jù)塊擦寫次數(shù)累加到一定次數(shù)時,同樣需要尋找磨損程度較低的數(shù)據(jù)塊繼續(xù)記錄。此時就需要更新定位表。
系統(tǒng)需要MAT處于相對固定的位置,這樣終端初始化時才能先找到MAT,再通過它查找FAT表、根目錄及BIM的位置。可以將MAT安排在最開始的數(shù)據(jù)塊中。而為了使MAT不會頻繁的擦除,其具體實施方案如下。
MAT數(shù)據(jù)占用一個數(shù)據(jù)塊,容量4 K,第一次初始化為全“0xFF”,預(yù)留最后8個字節(jié)寫入標(biāo)識符。以8個字節(jié)為單位,整合BIM、FAT表、根目錄所在的數(shù)據(jù)塊序號,從頭開始寫入MAT數(shù)據(jù)塊中。MAT表采用只添加數(shù)據(jù)而不修改數(shù)據(jù)的方式。一直添加到定位表所處的數(shù)據(jù)塊寫滿了為止,再重新擦寫。如圖5所示。
圖5 MAT數(shù)據(jù)示例
終端每次上電讀取標(biāo)識符,如果數(shù)據(jù)符合則從記錄區(qū)讀取非“0xFF”最后8字節(jié)的數(shù)據(jù),便可解析BIM、FAT表、根目錄所在數(shù)據(jù)塊。
當(dāng)定位表寫滿后,重新擦寫。系統(tǒng)預(yù)留FLASH芯片最開始的5個備份數(shù)據(jù)塊區(qū)供定位表循環(huán)使用以防MAT成為壞塊。如果出現(xiàn)壞塊,寫入下一個備份數(shù)據(jù)塊中(MAT有副本,所以實際上是占用2個數(shù)據(jù)塊)。當(dāng)終端上電時,從預(yù)留區(qū)最后一個數(shù)據(jù)塊判斷標(biāo)識符,確認(rèn)MAT所在的真實數(shù)據(jù)塊扇區(qū)。
軟件總體流程如圖6所示。終端在上電初始化過程中,終端確認(rèn)定位表MAT信息,查找加載數(shù)據(jù)塊使用情況信息表BIM數(shù)據(jù),并將BIM讀入內(nèi)存。當(dāng)終端運行過程中需要將某個文件數(shù)據(jù)更換數(shù)據(jù)塊扇區(qū)或添加文件數(shù)據(jù)至新的數(shù)據(jù)塊時,先根據(jù)BIM查找標(biāo)志為“空閑”或“已刪除”擦除次數(shù)較少的數(shù)據(jù)塊,將新數(shù)據(jù)塊狀態(tài)改為“正在準(zhǔn)備寫入”。再依次檢查根目錄、FAT表和BIM表是否需要修改且被擦除次數(shù)過多,如果是則同樣查找新數(shù)據(jù)塊并修改其狀態(tài)標(biāo)志。而后依次寫入文件數(shù)據(jù)、根目錄、FAT,更新最終數(shù)據(jù)塊狀態(tài)寫入BIM。如果后三者有改動所在數(shù)據(jù)塊扇區(qū)號。則增加一條記錄寫入MAT。
圖6 文件系統(tǒng)流程圖
本次設(shè)計研究了NOR FLASH文件系統(tǒng)的架構(gòu)和存儲管理技術(shù),旨在研究和開發(fā)一種可以運用于NOR FLASH的FAT文件系統(tǒng),適合對系統(tǒng)開機時間有要求、內(nèi)存資源有限、供電條件惡劣的嵌入式終端。向上層應(yīng)用提供了標(biāo)準(zhǔn)的文件接口。解決了FAT表的存儲問題,并且加入了數(shù)據(jù)塊均衡磨損的算法,設(shè)計了可行的空間分配方案,提高了FLASH的使用壽命。此外,還增加了垃圾回收和壞塊管理等機制,增加掉電保護(hù),提高了存儲的可靠性。
[1]覃萬林.基于實時系統(tǒng)的Flash文件系統(tǒng)的研究與應(yīng)用[D].廣州:廣東工業(yè)大學(xué),2012.
[2]曹璐.基于NAND FLASH的文件系統(tǒng)設(shè)計與實現(xiàn)[D].上海:華東師范大學(xué),2012.
[3]時正,紀(jì)金松,陳香蘭,等.一種基于差分進(jìn)化的Flash文件系統(tǒng)垃圾回收算法[J].電子學(xué)報,2011,39(2):280-284.
[4]季飛.基于μCOS-II的嵌入式文件系統(tǒng)設(shè)計與實現(xiàn)[D].廣州:中山大學(xué),2014.
[5]張繼珂,谷青范.基于Flash的嵌入式文件系統(tǒng)設(shè)計與實現(xiàn).工業(yè)控制計算機,2011,24(4):84-86.
[6]崔鵬偉.面向嵌入式數(shù)據(jù)采集設(shè)備的文件系統(tǒng)設(shè)計[D].太原:太原科技大學(xué),2014.
[7]吳磊,翟云飛.基于STM32的NAND flash的塊分配框架設(shè)計[J].計算機測量與控制,2015,23(1):201-204.
[8]胡寧,楊瓊,王冬.基于分組的NandFlash塊管理方法[J].微電子學(xué)與計算機,2015,32(3):19-22.
[9]王小妮.嵌入式Linux文件系統(tǒng)的構(gòu)建和移植[J].
電腦開發(fā)與應(yīng)用,2015,28(2):52-54.
[10]夏蘭,賈曉冬,曲文博.基于MSP430F5529和SD卡的FAT16文件系統(tǒng)的設(shè)計[J].電子器件,2015,(4):946-947.
[11]吳京洪,曾學(xué)文,李明哲,等.面向流式數(shù)據(jù)的嵌入式文件系統(tǒng)[J].計算機工程,2015,41(9):92-96.
[12]邢亮,黃暉,田丹.機載系統(tǒng)NANDFlash存儲技術(shù)[J].航空計算技術(shù),2014,44(1):123.
[13]彭濤.基于Flash存儲芯片的文件存儲系統(tǒng)設(shè)計[J].電子科技,2015,28(5):27-29.
[14]李書根,潘海燕,王培.一種嵌入式實時操作系統(tǒng)高可靠文件系統(tǒng)[J].微電子學(xué)與計算機,2014(3):14-16.
[15]劉軍芳,胡和智.嵌入式文件系統(tǒng)中垃圾塊回收機制的研究[J].民營科技,2014,(4):76.
[16]張哲,車鑫,李運華.一種高可靠嵌入式文件系統(tǒng)的應(yīng)用策略研究[J].航空計算技術(shù),2014(5):111-113.
Embedded FAT file system based on NOR FLASH
ZHANG Peng1,2,SUN Jia-song1,CHEN Cong-hua2
(1.Department of Electronic Engineering,Tsinghua University,Beijing100084,China;2.Yaxon Network Co.,Ltd.,Xiamen361008,China)
The paper is to design a feasible solutions that apply the FAT file system concept applied to nor FLASH chip,using BIM(Block Information Map)and MAT(Map Allocation Table).Base on the characteristics of nor flash,the BIM record the state and erasing times of data block without flashing frequently.The MAT locates all system information table in the FLASH.The FAT table and the block information can be written to the FLASH memory in real time.Base on the plan,the design provides reasonable mechanisms of loss-balance,bad-block-management and garbage-collection.The design is suitable for these devices which have limited memory,harsh time of power up,or astable power.The terminal can use the standard interface to store and access the large capacity data quickly.It improve the service of FLASH.
file system;FLASH;FAT;embedded chip
TN302
A
1674-6236(2017)23-0159-04
2016-11-28稿件編號:201611237
張鵬(1983—),男,福建泉州人,工程師。研究方向:汽車電子嵌入式軟件。