張 鵬,孫甲松,陳從華
(1.清華大學電子工程系,北京100084;2.廈門雅迅網絡股份有限公司福建廈門361008)
基于NOR FLASH的嵌入式FAT文件系統
張 鵬1,2,孫甲松1,陳從華2
(1.清華大學電子工程系,北京100084;2.廈門雅迅網絡股份有限公司福建廈門361008)
本課題就是要設計一套確實可行的方案,將FAT文件系統管理文件/數據的理念應用于FLASH芯片上。本設計采用了數據塊使用情況信息表BIM和定位表MAT這兩個結構。通過利用NOR FLASH的特性,在不頻繁擦寫的情況下記錄數據塊當前狀態和擦寫次數,將FAT表和數據塊磨損信息實時寫入到FLASH存儲器中。在此基礎上制定合理的均衡損耗策略,并實現壞塊管理、碎片回收。適用于內存資源有限、對上電時間有要求、可能隨時掉電的終端。令終端能夠使用標準接口快速存儲、訪問大容量數據,并提高FLASH器件使用壽命。
文件系統;FLASH;FAT;嵌入式
FLASH即半導體存儲器,已被廣泛應用于便攜式設備等嵌入式系統中。具有非易失性、功耗低、成本低、體積小、容量大、讀寫速度快、無機械故障等優點。隨著存儲器容量的不斷增大、嵌入式設備應用功能增多和系統復雜性的增加,如何高效地存儲和管理數據從而方便上層開發應用,成為一個重要的課題。引入嵌入式FLASH文件系統正是解決這個問題的好辦法。文件系統可以帶來如下幾點便利:能夠高效的存儲和管理數據,提高存儲可靠性,方便快捷檢索文件,使數據庫具有高靈活性、良好的可移植性及可裁剪性,縮短上層應用開發周期。
本設計是以NOR FLASH為平臺進行開發設計。NOR FLASH的數據區必須先經過擦除操作才能寫入。擦除操作以數據塊(BLOCK,也稱為扇區,或者擦除單元)為單位。數據塊在正確擦除后,塊內所有數據位都被置為“1”。軟件執行的寫入操作可使必要的數據位從“1”變成“0”(bit),但是要再想讓位由“0”改為“1”,就不能夠直接通過寫入指令完成,須要重復以上的“擦除——寫入”流程。請注意,并不是每次寫入NOR FLASH芯片都需要進行擦除,可以只進行一些數據位的清除。后面提到的設計方案就用到了該特性。
由于是在嵌入式終端上使用的文件系統,運行環境比較惡劣,設計時要考慮到應用場景的約束:
1)嵌入式MCU資源較少。包括了ROM和RAM,尤其是RAM,電子設備由于要考慮成本會采用盡量低配的芯片,往往沒有過多的資源用于文件系統。
2)要求啟動時間短。在一些應用場合中,要求終端必須在一定時間內完成上電初始化進入正常運行狀態。
3)終端電源隨時可能被關閉,因此信息數據最好能夠實時更新到FLASH器件中。
目前JFFS和YAFFS是比較常用的FLASH文件系統。它們都是日志型文件系統,需要在開機時從頭至尾掃描FLASH器件中所有數據塊的數據,在終端的內存中生成一個記錄文件系統信息的目錄樹。這種設計有一定的局限性,文件索引信息會占用太多的內存資源,并且初始化時掃描時間較長,因此沒有辦法用在一些嵌入式終端中。本次設計采用FAT文件系統的處理和管理數據、文件方法。而如何解決均衡磨損的問題則是本次設計的難點。
嵌入式系統中的FLASH不能直接移植通用的FAT文件系統。在通用的FAT文件系統中,系統的記錄信息(例如FAT表)放在固定的數據塊,在文件系統使用過程中記錄信息需要經常被改寫,會導致其所在數據塊頻繁擦寫,從而減少器件使用壽命。這是移植文件系統的難點,也是本次設計所要著重解決的問題。
之前有些嵌入式FAT設計是將文件系統的記錄信息暫時存放到靜態內存,再定時存儲到FLASH芯片中。這種設計比較適用于電源穩定,關機時要能夠有充足時間保存信息的場景。這種設計并不能很好的適用于上述隨時可能掉電的終端上。首先掉電時會丟失還未存儲的數據,定時時間間隔越長丟的數據越多。而且更嚴重的是,定時時間如果相對于數據存儲的時間間隔不夠,則文件系統的記錄信息所處數據塊達不到均衡磨損的目的,定時間隔越短,反而越容易形成“集中磨損”。
本研究目的在于提供一種在NOR FLASH存儲器上建立FAT文件系統的優化方法,實現了FAT文件系統的掉電保護、壞塊管理、碎片回收和均衡損耗策略。制定合理的壞塊管理、碎片回收、均衡損耗策略。本設計將數據塊擦除次數實時記錄到FLASH當中,可用于隨時掉電的應用場景。
以下設計方案以MX25L1606E芯片為例。容量為16M-bit。器件數據區分為512個數據塊,每塊16頁,每頁256個字節。其它容量類型的FLASH可以自行計算調整設計參數。
通用的FAT文件系統基本結構如圖1所示,包括MBR、DBR及其副本、FAT1、FAT2和數據區,根目錄包含在數據區中。

圖1 通用FAT文件系統結構
其中MBR是主引導記錄,DBR是分區引導扇區。它們包括了文件系統的基本信息。對于電子設備終端來說,由于FLASH芯片屬于內部器件,且容量等參數信息為已知,并不會在使用過程中更換不同規格的存儲器。因此并不需要MBR、DBR這部分數據內容。每扇區字節數和每簇扇區數這些參數信息可以在程序中直接根據芯片參數進行賦值。因此可以只保留FAT表、根目錄和普通數據區。
本設計引入BIM數據塊使用情況信息表和MAT數據塊定位表。由于終端設備可能會出現在擦除或寫入的過程中掉電的情況。必須考慮數據的安全性。對此,本系統中的FAT、根目錄、BIM、MAB作為重要數據都進行雙備份處理。每次都順序擦除寫入數據。若設備在上電后發現其中有數據塊因為一些原因遭到破壞使得信息無效,則從另一份數據中拷貝至失效的數據塊中完成恢復。
實際FLASH文件系統結構圖如圖2所示。

圖2 嵌入式FAT系統的結構示意圖
BIM(Block Information Map)記錄了FLASH數據塊當前狀態及已擦除次數。對于要實時寫入信息至閃存的終端來說,BIM的問題和FAT表一樣,如果每擦除一個數據塊就要更新BIM,那么BIM將因頻繁擦寫而提前損壞。為了解決這個問題,具體實施方法如下。
案例中FLASH總共512個數據塊,每個塊可以用8個字節信息來記錄。記錄結構體結構分為3個部分,如圖3所示。

圖3 BIM結構體示意圖
每個數據塊的記錄分成3個部分。低位標4個字節包含32個bit位作為單次計數,初始化為“1”。當對應的數據塊產生擦除操作時,將最低位的“1”變為“0”來計數(此時可以直接寫入而不需要擦除數據塊使用情況信息表)。中間兩個字節長度記錄擦除32次的倍數。當32個數據位全部清0時,倍數計數加1。由此,可記錄數據塊擦除次數總共為200萬次。而平均擦除其他數據塊平均32次才需要擦除一次數據塊使用情況信息表,不至于頻繁修改該信息表。
而最高位兩個字節表示對應數據塊的當前狀態。其各值含義如下:
0xA5FF-空閑
0xA5FE-正在準備寫入數據
0xA5FC-已寫入有效數據
0xA5F8-已被刪除的數據
0xA580-壞塊
可以看出數據塊狀態逐步變化時可以只寫入數據位而不需要重新擦除。

圖4 數據塊使用情況信息表數據示例
按照上面的存儲方式,就可以將所有數據塊的擦除次數記錄在FLASH當中。在此前提下,設計合理的數據塊損耗均衡算法。
當某個數據塊需要擦寫時,根據所有數據塊的擦除情況重新檢查,視情況分配新的數據塊繼續存儲數據。以達到均衡磨損的目的。
由于是嵌入式內部使用的文件系統,可以在分配新的數據塊的算法上,考慮熱區數據和冷區數據兩種,區別分配算法。可以通過上層應用定義文件夾來歸類這兩種數據。
所謂熱區數據,是指經常更新的數據信息。比如終端的定時采集記錄數據、設備使用狀態信息等等。系統先設定擦除次數差值上限,定義為閾值T。如果熱區信息數據塊總擦除次數高出所有數據塊平均擦除次數超出閾值T時,判斷熱區數據需要分配新數據塊。熱區數據的分配比較簡單,掃描整個BIM,查找標志為“空閑”或“已刪除”的擦除次數最少的數據塊,作為新的數據塊進行記錄即可。

而冷區數據是指很久才更新一次,或者甚至設備出廠后都不怎么更新的數據信息。比如文件系統的根目錄和終端的參數。對于這類信息,在其數據更新時先判斷其擦除總次數是否低于或高于平均擦除次數太多(分別設置兩個閾值),如果需要重新分配新數據塊,則先計算所有數據塊平均擦除次數,在低于平均擦除次數的數據塊中尋找最接近這個平均值的塊進行存儲。
通過對熱、冷區數據的特殊處理,可以更好的實現數據塊損耗均衡。
MAT(Map Allocation Table)用于記錄定位 FAT表、根目錄及BIM分別在哪個數據塊中。由于擦寫次數的限制,FAT表、根目錄、BIM不能處于固定的扇區。當這3個表所在的數據塊擦寫次數累加到一定次數時,同樣需要尋找磨損程度較低的數據塊繼續記錄。此時就需要更新定位表。
系統需要MAT處于相對固定的位置,這樣終端初始化時才能先找到MAT,再通過它查找FAT表、根目錄及BIM的位置。可以將MAT安排在最開始的數據塊中。而為了使MAT不會頻繁的擦除,其具體實施方案如下。
MAT數據占用一個數據塊,容量4 K,第一次初始化為全“0xFF”,預留最后8個字節寫入標識符。以8個字節為單位,整合BIM、FAT表、根目錄所在的數據塊序號,從頭開始寫入MAT數據塊中。MAT表采用只添加數據而不修改數據的方式。一直添加到定位表所處的數據塊寫滿了為止,再重新擦寫。如圖5所示。

圖5 MAT數據示例
終端每次上電讀取標識符,如果數據符合則從記錄區讀取非“0xFF”最后8字節的數據,便可解析BIM、FAT表、根目錄所在數據塊。
當定位表寫滿后,重新擦寫。系統預留FLASH芯片最開始的5個備份數據塊區供定位表循環使用以防MAT成為壞塊。如果出現壞塊,寫入下一個備份數據塊中(MAT有副本,所以實際上是占用2個數據塊)。當終端上電時,從預留區最后一個數據塊判斷標識符,確認MAT所在的真實數據塊扇區。
軟件總體流程如圖6所示。終端在上電初始化過程中,終端確認定位表MAT信息,查找加載數據塊使用情況信息表BIM數據,并將BIM讀入內存。當終端運行過程中需要將某個文件數據更換數據塊扇區或添加文件數據至新的數據塊時,先根據BIM查找標志為“空閑”或“已刪除”擦除次數較少的數據塊,將新數據塊狀態改為“正在準備寫入”。再依次檢查根目錄、FAT表和BIM表是否需要修改且被擦除次數過多,如果是則同樣查找新數據塊并修改其狀態標志。而后依次寫入文件數據、根目錄、FAT,更新最終數據塊狀態寫入BIM。如果后三者有改動所在數據塊扇區號。則增加一條記錄寫入MAT。

圖6 文件系統流程圖
本次設計研究了NOR FLASH文件系統的架構和存儲管理技術,旨在研究和開發一種可以運用于NOR FLASH的FAT文件系統,適合對系統開機時間有要求、內存資源有限、供電條件惡劣的嵌入式終端。向上層應用提供了標準的文件接口。解決了FAT表的存儲問題,并且加入了數據塊均衡磨損的算法,設計了可行的空間分配方案,提高了FLASH的使用壽命。此外,還增加了垃圾回收和壞塊管理等機制,增加掉電保護,提高了存儲的可靠性。
[1]覃萬林.基于實時系統的Flash文件系統的研究與應用[D].廣州:廣東工業大學,2012.
[2]曹璐.基于NAND FLASH的文件系統設計與實現[D].上海:華東師范大學,2012.
[3]時正,紀金松,陳香蘭,等.一種基于差分進化的Flash文件系統垃圾回收算法[J].電子學報,2011,39(2):280-284.
[4]季飛.基于μCOS-II的嵌入式文件系統設計與實現[D].廣州:中山大學,2014.
[5]張繼珂,谷青范.基于Flash的嵌入式文件系統設計與實現.工業控制計算機,2011,24(4):84-86.
[6]崔鵬偉.面向嵌入式數據采集設備的文件系統設計[D].太原:太原科技大學,2014.
[7]吳磊,翟云飛.基于STM32的NAND flash的塊分配框架設計[J].計算機測量與控制,2015,23(1):201-204.
[8]胡寧,楊瓊,王冬.基于分組的NandFlash塊管理方法[J].微電子學與計算機,2015,32(3):19-22.
[9]王小妮.嵌入式Linux文件系統的構建和移植[J].
電腦開發與應用,2015,28(2):52-54.
[10]夏蘭,賈曉冬,曲文博.基于MSP430F5529和SD卡的FAT16文件系統的設計[J].電子器件,2015,(4):946-947.
[11]吳京洪,曾學文,李明哲,等.面向流式數據的嵌入式文件系統[J].計算機工程,2015,41(9):92-96.
[12]邢亮,黃暉,田丹.機載系統NANDFlash存儲技術[J].航空計算技術,2014,44(1):123.
[13]彭濤.基于Flash存儲芯片的文件存儲系統設計[J].電子科技,2015,28(5):27-29.
[14]李書根,潘海燕,王培.一種嵌入式實時操作系統高可靠文件系統[J].微電子學與計算機,2014(3):14-16.
[15]劉軍芳,胡和智.嵌入式文件系統中垃圾塊回收機制的研究[J].民營科技,2014,(4):76.
[16]張哲,車鑫,李運華.一種高可靠嵌入式文件系統的應用策略研究[J].航空計算技術,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—),男,福建泉州人,工程師。研究方向:汽車電子嵌入式軟件。