|
|
<BR> 摘要:以TRI公司的基于NOR Flash的Flash管理軟件FMM為例,詳細介紹嵌入式系統中<BR> 如何根據Flash的物理特性來進行Flash存儲管理。 <BR> 關鍵詞:嵌入式系統 Flash FMM</P><P> 引言</P><P> 在當前數字信息技術和網絡技術高速發展的后PC(Post-PC)時代,嵌入式系統已經廣泛<BR> 地滲透到科學研究、工程設計、軍事技術、各類產業和商業文件藝術、娛樂業以及人們的<BR> 日常生活等方方面面中。隨著嵌入式系統越來越廣泛的應用,嵌入式系統中的數據存儲和<BR> 數據管理已經成為一個 <BR> 匾目翁獍讜諫杓迫嗽泵媲啊 </P><P> Flash存儲器作為一種安全、快速的存儲體,具有體積小、容量大、成本低、掉電數據不<BR> 丟失等一系列優點。目前已經逐步取代其它半導體存儲元件,成為嵌入式系統中主要數據<BR> 和程序載體。</P><P> 作為嵌入式系統的一部分,Flash存儲管理的主要功能是針對Flash自身的物理特性,利用<BR> 一些特定的算法來提高Flash的使用效率,加快操作速度和管理Flash各單元的使用頻率。</P><P> 1 Flash存儲器簡介</P><P> 嵌入式系統中使用的Flash主要分為NOR和NAND兩種類型。這里我們以NOR型Flash為例進行<BR> 介紹。NOR型Flash主要特點如下:</P><P> *體積小、容量大,目前可以達到十幾MB。</P><P> *掉電數據不丟失,數據可以保存10~100年。</P><P> *有獨立的地址和數據總線,可以快速地通過總線讀取數據。因此它具有和靜態RAM相同的<BR> 讀取速度,既可以作為數據存儲器也可以作為程序存儲器使用。</P><P> *寫入操作必須通過指令序列來完成,以字節(Byte)或字(Word)為單位,每寫入一個<BR> Byte或Word需十幾μs。</P><P> *擦除也通過指令序列完成,以塊(Block)為單位,通常塊的大小為64K。每擦除一個塊<BR> 需要十幾ms。</P><P> *由于Flash有一定的使用壽命,一般為10~100萬次。所以隨著使用次數的增加,會有一<BR> 些單元逐漸變得不穩定或失效,因此必須能夠對其狀態加以識別。</P><P> 2 Flash存儲管理的作用</P><P> 由Flash特點可以看出,操作Flash需要注意以下幾點:</P><P> *必須以幾K~幾十K的塊為單位進行數據的操作;</P><P> *擦除操作耗時較多,應減少擦除操作;</P><P> *盡量避免頻繁地對同一地址操作,以免造成局部單元提前損壞。</P><P> 另外,大部分嵌入式操作系統所掛接的文件系統是建立在以扇區(Sector)為單位的磁盤<BR> 操作基礎上(通常為512字節/扇區)。因此也需要一段特殊的Flash存儲管理程序來解決<BR> 以扇區為單位的文件系統接口和以塊為單位的Flash物理特性之間的矛盾;同時,完成各<BR> 塊之間的擦寫次數均衡和<BR> 壞塊管理等工作。Flash存儲管理程序在系統中的位置如圖1所示。</P><P> 本文以TRI公司的FMM為例,說明Flash存儲管理模塊和如何完成這些功能的。</P><P> 3 FMM介紹</P><P> FMM(Flash Media Manager)是由TRI公司開發的專門針對NOR型Flash的管理軟件,其主<BR> 要特點如下:</P><P> *動態映射OS的邏輯扇區到物理地址;</P><P> *所有物理塊進行壽命均衡,同時可記錄Flash的擦寫次數;</P><P> *掉電數據恢復,可以保證系統的穩定性;</P><P> 創建壞塊表進行壞塊管理,保證系統的可靠性。</P><P> 為了更好地介紹FMM的操作流程,這里先作幾點說明。</P><P> (1)存儲空間管理</P><P> 為了實現以扇區為基礎的數據管理,FMM首先對Flash中的塊內存儲空間邏輯上進行了重新<BR> 定義,每個物理塊內部又重新劃分成了若干物理扇區。每個物理塊內部又重新劃分成了若<BR> 干物理扇區。每個物理扇區由512+4字節=516(0x204)字節組成。512字節為有效數據空<BR> 間,另外4字節(32位)<BR> 用于存放邏輯扇區另和當前狀態。定義如下:</P><P> 扇區狀態 邏輯扇區號 數字空間 <BR> 4位 28位 125字節 </P><P> 扇區狀態有4種,用于進行掉電數據恢復:</P><P> FREE—空扇區(0xF);</P><P> DVALID—扇區數據無效(0xE);</P><P> INUSE—扇區數據有效(0xC);</P><P> DIRTY—扇區數據無用,可擦除(0x8)。</P><P> 以64K大小的塊為例,可以計算出每個塊中可以劃分出127個扇區;另外,還會有4字節的<BR> 空間,專門用于標志下一個被整理塊。標記為0x80,否則為0xffffffff。</P><P> 因此可以得出物理扇區和絕對地址之間的對應關系:</P><P> 絕對地址=Flash基地址+物理扇區號×0x204+所在塊號×4</P><P> (2)扇區分類</P><P> FMM中將扇區分為ID扇區和數據扇區兩類:</P><P> ①FMM會占用N個扇區作為標識ID(Identification)扇區,占用邏輯扇區號0~N。這一部<BR> 分扇區是文件系統不能使用的,是FMM用于管理所占用的存儲空間。因此文件系統所管理<BR> 的邏輯扇區號必須從N+1開始。</P><P> ID扇區主要包含如下數據:FMM版本號、寫入(擦除)次數EraseCount、用戶標識和壞扇<BR> 區表。</P><P> N的取值與壞扇區表的大小有關,每個FMM管理的物理扇區占用表中的1位。在每次存<BR> 儲數據時,可以通過查詢表中的相應位來確定該扇區的有效性。</P><P> ②數據扇區,用于存儲數據。</P><P> (3)空間映射表(Mapping Table)</P><P> 由于Flash不能像普通磁盤那樣進行字節的修改,甚至不能以扇區為單位進行修改;而只<BR> 能以塊為單位進行修改;但如果只是簡單將物理扇區和邏輯扇區一一對應,那么如果我們<BR> 想對扇區修改就必須將整個塊的內容都擦除,然后再將修改后的內容回寫;勢必會造成時<BR> 間和Flash壽命的損失。<BR> 因此,建立一個物理扇區號和邏輯扇區號的空間映射表,使邏輯扇區與物理扇區號進行動<BR> 態的匹配。這樣,在修改某個扇區的內容時只要將數據寫入一個新的扇區,然后將原扇區<BR> 標記為DIRTY就可以了。這樣,還可以消除頻繁修改某個扇區帶來的壽命不均的影響。</P><P> 映射表是建立在內存中的項數為M(扇區總數)的數組,每項占用4字節,用于存放對應的<BR> 物理扇區號。當某項為空(NULL)時,認為該扇區空閑,未使用,如圖2所示。</P><P> 4 FMM模塊操作</P><P> 按功能,可以將FMM分解為4個基本模塊:格式化模塊、初始化模塊、存取模塊和空間整理<BR> 模塊。以下簡單掃描各模塊的操作流程。</P><P> (1)格式化模塊</P><P> 對數據空間進行初級格式化,建立ID扇區。該模塊在第一次使用數據盤之前調用,相當于<BR> 低級格式化。過程如下:</P><P> ①調用FMM初始化模塊,根據結果判斷該存儲體是否含有FMM控制信息。如果有,將擦除次<BR> 數計數器EraseCount加1,否則置為1。</P><P> ②調用Flash驅動程序,將FMM所管理的空間全部擦除。</P><P> ③將Block0的標志置為0x80,即下一個被整理的Block,也是第一個非空Block。</P><P> ④收集有關信息,創建ID扇區寫入Flash。</P><P> ⑤在內存中創建空間映射表。</P><P> 空間映射表的創建過程如下:</P><P> ①清空內存中為映射表和ID扇區申請的空間。</P><P> ②將Flash中的ID扇區內容讀入內存中。</P><P> ③掃描整個物理空間,依次讀入每個物理扇區的狀態和邏輯扇區號,將狀態為INUSE的邏<BR> 輯扇區號裝入空間映射表的對應位置,并記錄INUSE和DIRTY扇區的數目。</P><P> ④修復掃描中發現的DAVLID扇區數據。</P><P> 修復DAVLID扇區的過程如下:</P><P> ①取出DVALID扇區的邏輯扇區號。</P><P> ②如果邏輯扇區號為NULL,跳到步驟⑤。</P><P> ③查詢空間映射表,如果對應的物理扇區號為NULL,跳到步驟⑤。</P><P> ④將查到的物理扇區置為DIRTY。</P><P> ⑤將DAVLID扇區置為INUSE,將其扇區號填入空間映射表。</P><P> (2)初始化模塊</P><P> 該模塊在文件系統初始化之前調用,用于初始化FMM系統。</P><P> ①從內存池中為ID扇區申請內存。</P><P> ②從內存池中為空間映射表申請內存。</P><P> ③在內存中創建空間映射表。</P><P> (3)存取模塊</P><P> 該模塊是FMM與文件系統的接口,可以分為讀和寫兩部分。</P><P> *讀數據過程:</P><P> ①根據所要讀取的邏輯扇區號,查表找出其對應的物理扇區號;</P><P> ②根據物理扇區號計算出物理地址;</P><P> ③讀出該扇區數據;</P><P> ④如需讀多個扇區,重復步驟①~③。</P><P> *寫數據流程;</P><P> Flash存儲器中“寫入”是將對應單元由“1”變“0”,“擦除”是由“0”變為“1”。<BR> 因此,無須擦除就可以將狀態FREE(0xF)依次“寫”為DVALID(0xE)、INUSE(0xC)、<BR> DIRTY(0x8),如圖3所示。</P><P> (4)空間整理模塊</P><P> 由于在寫入操作中產生dirty扇區,因此當自由空間不足時,需要對空間進行整理,釋放<BR> dirty扇區占用的空間用于存儲數據,流程如圖4所示。</P><P> 根據圖4可以看出,整理的過程實際是將有用扇區依次搬到空扇區中,再擦除舊塊的過程<BR> ,因此需要一個空塊用作數據交換。</P><P> 5 FMM性能分析</P><P> *讀出速度:讀取速度基本與Flash的讀速度相同。</P><P> *寫入速度:寫入操作速度與Flash的寫入速度基本相同。</P><P> *整理速度:空間整理上由于算法的限制會耗費很長的時間,最好挑選除速度較快的Flas<BR> h來進行配合使用;或者可以采用其它的算法來進行空間整理,但會使壽命均衡有所減弱<BR> ,必須根據具體的應用來選取適合的方案組合才能達到最好的效果。</P><P> *文件系統可用空間:由于FMM占用了一部分空間,因此實際文件系統可用空間小于Flash<BR> 的實際物理空間。</P><P> 文件系統可用空間=Flash總空間-ID扇區空間-1個用于整理的保留塊空間。 <BR>
|
|
狀 態:
離線
公司簡介
產品目錄
|
|
公司名稱:
|
中華工控網
|
聯 系 人: |
客服中心
|
電 話: |
0755-26546361
|
傳 真: |
0755-26585268 |
地 址: |
深圳市南山區創業路現代城華庭1棟6A |
郵 編: |
518054 |
主 頁: |
|
|
|
|
|