當(dāng)前位置:首頁 > 智能硬件 > 智能硬件
[導(dǎo)讀]以TRI公司的基于NOR Flash的Flash管理軟件FMM為例,詳細(xì)介紹嵌入式系統(tǒng)中如何根據(jù)Flash的物理特性來進(jìn)行Flash存儲(chǔ)管理。

   摘要:以TRI公司的基于NOR Flash的Flash管理軟件FMM為例,詳細(xì)介紹嵌入式系統(tǒng)中如何根據(jù)Flash的物理特性來進(jìn)行Flash存儲(chǔ)管理。

    關(guān)鍵詞:嵌入式系統(tǒng) Flash FMM

引言

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

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

作為嵌入式系統(tǒng)的一部分,F(xiàn)lash存儲(chǔ)管理的主要功能是針對(duì)Flash自身的物理特性,利用一些特定的算法來提高Flash的使用效率,加快操作速度和管理Flash各單元的使用頻率。

1 Flash存儲(chǔ)器簡介

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

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

*掉電數(shù)據(jù)不丟失,數(shù)據(jù)可以保存10~100年。

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

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

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

*由于Flash有一定的使用壽命,一般為10~100萬次。所以隨著使用次數(shù)的增加,會(huì)有一些單元逐漸變得不穩(wěn)定或失效,因此必須能夠?qū)ζ錉顟B(tài)加以識(shí)別。

2 Flash存儲(chǔ)管理的作用

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

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

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

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

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

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

3 FMM介紹

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

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

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

*掉電數(shù)據(jù)恢復(fù),可以保證系統(tǒng)的穩(wěn)定性;

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

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

(1)存儲(chǔ)空間管理

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

扇區(qū)狀態(tài) 邏輯扇區(qū)號(hào) 數(shù)字空間
4位 28位 125字節(jié)

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

FREE—空扇區(qū)(0xF);

DVALID—扇區(qū)數(shù)據(jù)無效(0xE);

INUSE—扇區(qū)數(shù)據(jù)有效(0xC);

DIRTY—扇區(qū)數(shù)據(jù)無用,可擦除(0x8)。

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

因此可以得出物理扇區(qū)和絕對(duì)地址之間的對(duì)應(yīng)關(guān)系:

絕對(duì)地址=Flash基地址+物理扇區(qū)號(hào)×0x204+所在塊號(hào)×4

(2)扇區(qū)分類

FMM中將扇區(qū)分為ID扇區(qū)和數(shù)據(jù)扇區(qū)兩類:

①FMM會(huì)占用N個(gè)扇區(qū)作為標(biāo)識(shí)ID(Identification)扇區(qū),占用邏輯扇區(qū)號(hào)0~N。這一部分扇區(qū)是文件系統(tǒng)不能使用的,是FMM用于管理所占用的存儲(chǔ)空間。因此文件系統(tǒng)所管理的邏輯扇區(qū)號(hào)必須從N+1開始。

ID扇區(qū)主要包含如下數(shù)據(jù):FMM版本號(hào)、寫入(擦除)次數(shù)EraseCount、用戶標(biāo)識(shí)和壞扇區(qū)表。

    N的取值與壞扇區(qū)表的大小有關(guān),每個(gè)FMM管理的物理扇區(qū)占用表中的1位。在每次存儲(chǔ)數(shù)據(jù)時(shí),可以通過查詢表中的相應(yīng)位來確定該扇區(qū)的有效性。

②數(shù)據(jù)扇區(qū),用于存儲(chǔ)數(shù)據(jù)。

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

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

映射表是建立在內(nèi)存中的項(xiàng)數(shù)為M(扇區(qū)總數(shù))的數(shù)組,每項(xiàng)占用4字節(jié),用于存放對(duì)應(yīng)的物理扇區(qū)號(hào)。當(dāng)某項(xiàng)為空(NULL)時(shí),認(rèn)為該扇區(qū)空閑,未使用,如圖2所示。

4 FMM模塊操作

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

(1)格式化模塊

對(duì)數(shù)據(jù)空間進(jìn)行初級(jí)格式化,建立ID扇區(qū)。該模塊在第一次使用數(shù)據(jù)盤之前調(diào)用,相當(dāng)于低級(jí)格式化。過程如下:

①調(diào)用FMM初始化模塊,根據(jù)結(jié)果判斷該存儲(chǔ)體是否含有FMM控制信息。如果有,將擦除次數(shù)計(jì)數(shù)器EraseCount加1,否則置為1。

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

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

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

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

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

①清空內(nèi)存中為映射表和ID扇區(qū)申請(qǐng)的空間。

②將Flash中的ID扇區(qū)內(nèi)容讀入內(nèi)存中。

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

④修復(fù)掃描中發(fā)現(xiàn)的DAVLID扇區(qū)數(shù)據(jù)。

修復(fù)DAVLID扇區(qū)的過程如下:

①取出DVALID扇區(qū)的邏輯扇區(qū)號(hào)。

②如果邏輯扇區(qū)號(hào)為NULL,跳到步驟⑤。

③查詢空間映射表,如果對(duì)應(yīng)的物理扇區(qū)號(hào)為NULL,跳到步驟⑤。

④將查到的物理扇區(qū)置為DIRTY。

⑤將DAVLID扇區(qū)置為INUSE,將其扇區(qū)號(hào)填入空間映射表。

(2)初始化模塊

該模塊在文件系統(tǒng)初始化之前調(diào)用,用于初始化FMM系統(tǒng)。

①從內(nèi)存池中為ID扇區(qū)申請(qǐng)內(nèi)存。

②從內(nèi)存池中為空間映射表申請(qǐng)內(nèi)存。

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

(3)存取模塊

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

*讀數(shù)據(jù)過程:

①根據(jù)所要讀取的邏輯扇區(qū)號(hào),查表找出其對(duì)應(yīng)的物理扇區(qū)號(hào);

②根據(jù)物理扇區(qū)號(hào)計(jì)算出物理地址;

③讀出該扇區(qū)數(shù)據(jù);

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

*寫數(shù)據(jù)流程;

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

(4)空間整理模塊

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

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

5 FMM性能分析

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

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

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

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

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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉