<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 嵌入式系統中的Flash存儲管理

嵌入式系統中的Flash存儲管理

作者: 時(shí)間:2004-12-08 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:以TRI公司的基于NOR 管理軟件FMM為例,詳細介紹中如何根據的物理特性來(lái)進(jìn)行Flash。

關(guān)鍵詞: Flash FMM

引言

在當前數字信息技術(shù)和網(wǎng)絡(luò )技術(shù)高速發(fā)展的后PC(Post-PC)時(shí)代,已經(jīng)廣泛地滲透到科學(xué)研究、工程設計、軍事技術(shù)、各類(lèi)產(chǎn)業(yè)和商業(yè)文件藝術(shù)、娛樂(lè )業(yè)以及人們的日常生活等方方面面中。隨著(zhù)嵌入式系統越來(lái)越廣泛的應用,嵌入式系統中的數據存儲和數據管理已經(jīng)成為一個(gè)重要的課題擺在設計人員面前。

Flash存儲器作為一種安全、快速的存儲體,具有體積小、容量大、成本低、掉電數據不丟失等一系列優(yōu)點(diǎn)。目前已經(jīng)逐步取代其它半導體存儲元件,成為嵌入式系統中主要數據和程序載體。

作為嵌入式系統的一部分,Flash的主要功能是針對Flash自身的物理特性,利用一些特定的算法來(lái)提高Flash的使用效率,加快操作速度和管理Flash各單元的使用頻率。

1 Flash存儲器簡(jiǎn)介

嵌入式系統中使用的Flash主要分為NOR和NAND兩種類(lèi)型。這里我們以NOR型Flash為例進(jìn)行介紹。NOR型Flash主要特點(diǎn)如下:

*體積小、容量大,目前可以達到十幾MB。

*掉電數據不丟失,數據可以保存10~100年。

*有獨立的地址和數據總線(xiàn),可以快速地通過(guò)總線(xiàn)讀取數據。因此它具有和靜態(tài)RAM相同的讀取速度,既可以作為數據存儲器也可以作為程序存儲器使用。

*寫(xiě)入操作必須通過(guò)指令序列來(lái)完成,以字節(Byte)或字(Word)為單位,每寫(xiě)入一個(gè)Byte或Word需十幾μs。

*擦除也通過(guò)指令序列完成,以塊(Block)為單位,通常塊的大小為64K。每擦除一個(gè)塊需要十幾ms。

*由于Flash有一定的使用壽命,一般為10~100萬(wàn)次。所以隨著(zhù)使用次數的增加,會(huì )有一些單元逐漸變得不穩定或失效,因此必須能夠對其狀態(tài)加以識別。

2 Flash的作用

由Flash特點(diǎn)可以看出,操作Flash需要注意以下幾點(diǎn):

*必須以幾K~幾十K的塊為單位進(jìn)行數據的操作;

*擦除操作耗時(shí)較多,應減少擦除操作;

*盡量避免頻繁地對同一地址操作,以免造成局部單元提前損壞。

另外,大部分嵌入式操作系統所掛接的文件系統是建立在以扇區(Sector)為單位的磁盤(pán)操作基礎上(通常為512字節/扇區)。因此也需要一段特殊的Flash存儲管理程序來(lái)解決以扇區為單位的文件系統接口和以塊為單位的Flash物理特性之間的矛盾;同時(shí),完成各塊之間的擦寫(xiě)次數均衡和壞塊管理等工作。Flash存儲管理程序在系統中的位置如圖1所示。

本文以TRI公司的FMM為例,說(shuō)明Flash存儲管理模塊和如何完成這些功能的。

3 FMM介紹

FMM(Flash Media Manager)是由TRI公司開(kāi)發(fā)的專(zhuān)門(mén)針對NOR型Flash的管理軟件,其主要特點(diǎn)如下:

*動(dòng)態(tài)映射OS的邏輯扇區到物理地址;

*所有物理塊進(jìn)行壽命均衡,同時(shí)可記錄Flash的擦寫(xiě)次數;

*掉電數據恢復,可以保證系統的穩定性;

創(chuàng )建壞塊表進(jìn)行壞塊管理,保證系統的可靠性。

為了更好地介紹FMM的操作流程,這里先作幾點(diǎn)說(shuō)明。

(1)存儲空間管理

為了實(shí)現以扇區為基礎的數據管理,FMM首先對Flash中的塊內存儲空間邏輯上進(jìn)行了重新定義,每個(gè)物理塊內部又重新劃分成了若干物理扇區。每個(gè)物理塊內部又重新劃分成了若干物理扇區。每個(gè)物理扇區由512+4字節=516(0x204)字節組成。512字節為有效數據空間,另外4字節(32位)用于存放邏輯扇區另和當前狀態(tài)。定義如下:

扇區狀態(tài)邏輯扇區號數字空間
4位28位125字節

扇區狀態(tài)有4種,用于進(jìn)行掉電數據恢復:

FREE―空扇區(0xF);

DVALID―扇區數據無(wú)效(0xE);

INUSE―扇區數據有效(0xC);

DIRTY―扇區數據無(wú)用,可擦除(0x8)。

以64K大小的塊為例,可以計算出每個(gè)塊中可以劃分出127個(gè)扇區;另外,還會(huì )有4字節的空間,專(zhuān)門(mén)用于標志下一個(gè)被整理塊。標記為0x80,否則為0xffffffff。

因此可以得出物理扇區和絕對地址之間的對應關(guān)系:

絕對地址=Flash基地址+物理扇區號0x204+所在塊號4

(2)扇區分類(lèi)

FMM中將扇區分為ID扇區和數據扇區兩類(lèi):

①FMM會(huì )占用N個(gè)扇區作為標識ID(Identification)扇區,占用邏輯扇區號0~N。這一部分扇區是文件系統不能使用的,是FMM用于管理所占用的存儲空間。因此文件系統所管理的邏輯扇區號必須從N+1開(kāi)始。

ID扇區主要包含如下數據:FMM版本號、寫(xiě)入(擦除)次數EraseCount、用戶(hù)標識和壞扇區表。

N的取值與壞扇區表的大小有關(guān),每個(gè)FMM管理的物理扇區占用表中的1位。在每次存儲數據時(shí),可以通過(guò)查詢(xún)表中的相應位來(lái)確定該扇區的有效性。

②數據扇區,用于存儲數據。

(3)空間映射表(Mapping Table)

由于Flash不能像普通磁盤(pán)那樣進(jìn)行字節的修改,甚至不能以扇區為單位進(jìn)行修改;而只能以塊為單位進(jìn)行修改;但如果只是簡(jiǎn)單將物理扇區和邏輯扇區一一對應,那么如果我們想對扇區修改就必須將整個(gè)塊的內容都擦除,然后再將修改后的內容回寫(xiě);勢必會(huì )造成時(shí)間和Flash壽命的損失。因此,建立一個(gè)物理扇區號和邏輯扇區號的空間映射表,使邏輯扇區與物理扇區號進(jìn)行動(dòng)態(tài)的匹配。這樣,在修改某個(gè)扇區的內容時(shí)只要將數據寫(xiě)入一個(gè)新的扇區,然后將原扇區標記為DIRTY就可以了。這樣,還可以消除頻繁修改某個(gè)扇區帶來(lái)的壽命不均的影響。

映射表是建立在內存中的項數為M(扇區總數)的數組,每項占用4字節,用于存放對應的物理扇區號。當某項為空(NULL)時(shí),認為該扇區空閑,未使用,如圖2所示。

4 FMM模塊操作

按功能,可以將FMM分解為4個(gè)基本模塊:格式化模塊、初始化模塊、存取模塊和空間整理模塊。以下簡(jiǎn)單掃描各模塊的操作流程。

(1)格式化模塊

對數據空間進(jìn)行初級格式化,建立ID扇區。該模塊在第一次使用數據盤(pán)之前調用,相當于低級格式化。過(guò)程如下:

①調用FMM初始化模塊,根據結果判斷該存儲體是否含有FMM控制信息。如果有,將擦除次數計數器EraseCount加1,否則置為1。

②調用Flash驅動(dòng)程序,將FMM所管理的空間全部擦除。

③將Block0的標志置為0x80,即下一個(gè)被整理的Block,也是第一個(gè)非空Block。

④收集有關(guān)信息,創(chuàng )建ID扇區寫(xiě)入Flash。

⑤在內存中創(chuàng )建空間映射表。

空間映射表的創(chuàng )建過(guò)程如下:

①清空內存中為映射表和ID扇區申請的空間。

②將Flash中的ID扇區內容讀入內存中。

③掃描整個(gè)物理空間,依次讀入每個(gè)物理扇區的狀態(tài)和邏輯扇區號,將狀態(tài)為INUSE的邏輯扇區號裝入空間映射表的對應位置,并記錄INUSE和DIRTY扇區的數目。

④修復掃描中發(fā)現的DAVLID扇區數據。

修復DAVLID扇區的過(guò)程如下:

①取出DVALID扇區的邏輯扇區號。

②如果邏輯扇區號為NULL,跳到步驟⑤。

③查詢(xún)空間映射表,如果對應的物理扇區號為NULL,跳到步驟⑤。

④將查到的物理扇區置為DIRTY。

⑤將DAVLID扇區置為INUSE,將其扇區號填入空間映射表。

(2)初始化模塊

該模塊在文件系統初始化之前調用,用于初始化FMM系統。

①從內存池中為ID扇區申請內存。

②從內存池中為空間映射表申請內存。

③在內存中創(chuàng )建空間映射表。

(3)存取模塊

該模塊是FMM與文件系統的接口,可以分為讀和寫(xiě)兩部分。

*讀數據過(guò)程:

①根據所要讀取的邏輯扇區號,查表找出其對應的物理扇區號;

②根據物理扇區號計算出物理地址;

③讀出該扇區數據;

④如需讀多個(gè)扇區,重復步驟①~③。

*寫(xiě)數據流程;

Flash存儲器中“寫(xiě)入”是將對應單元由“1”變“0”,“擦除”是由“0”變?yōu)椤?”。因此,無(wú)須擦除就可以將狀態(tài)FREE(0xF)依次“寫(xiě)”為DVALID(0xE)、INUSE(0xC)、DIRTY(0x8),如圖3所示。

(4)空間整理模塊

由于在寫(xiě)入操作中產(chǎn)生dirty扇區,因此當自由空間不足時(shí),需要對空間進(jìn)行整理,釋放dirty扇區占用的空間用于存儲數據,流程如圖4所示。

根據圖4可以看出,整理的過(guò)程實(shí)際是將有用扇區依次搬到空扇區中,再擦除舊塊的過(guò)程,因此需要一個(gè)空塊用作數據交換。

5 FMM性能分析

*讀出速度:讀取速度基本與Flash的讀速度相同。

*寫(xiě)入速度:寫(xiě)入操作速度與Flash的寫(xiě)入速度基本相同。

*整理速度:空間整理上由于算法的限制會(huì )耗費很長(cháng)的時(shí)間,最好挑選除速度較快的Flash來(lái)進(jìn)行配合使用;或者可以采用其它的算法來(lái)進(jìn)行空間整理,但會(huì )使壽命均衡有所減弱,必須根據具體的應用來(lái)選取適合的方案組合才能達到最好的效果。

*文件系統可用空間:由于FMM占用了一部分空間,因此實(shí)際文件系統可用空間小于Flash的實(shí)際物理空間。

文件系統可用空間=Flash總空間-ID扇區空間-1個(gè)用于整理的保留塊空間。



關(guān)鍵詞: Flash 嵌入式系統 存儲管理

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>