車載MP3中Flash文件系統(tǒng)的設(shè)計與應(yīng)用
2.1 Flash存儲管理系統(tǒng)
Flash存儲器的操作是以塊為單位的,而FAT文件系統(tǒng)則是建立在以扇區(qū)(sector)為單位的磁盤操作基礎(chǔ)上(通常為512字節(jié)/扇區(qū))。因此,本文設(shè)計了一個特殊的Flash存儲管理系統(tǒng),來解決以塊為單位的Flash物理特性和以扇區(qū)為單位的文件系統(tǒng)接口之間的矛盾,以使得Flash的物理地址和FAT操作的邏輯地址之間能夠?qū)?yīng)。同時,由于Flash的其它特點,Flash存儲管理系統(tǒng)還實現(xiàn)了各塊之間的擦寫次數(shù)均衡和壞塊管理等工作。
(1)物理地址到邏輯地址的映射
為了在Flash物理地址和FAT操作的邏輯地址之間建立一個好的映射關(guān)系,對Flash的存儲空間在邏輯上進行了重新定義。結(jié)合Flash特點,將每個存儲單元塊內(nèi)部分成若干物理扇區(qū),每個物理扇區(qū)由512字節(jié)+16字節(jié)=528字節(jié)組成。其中Main Area的512字節(jié)為有效數(shù)據(jù)空間,而Spare Area的16字節(jié)用于存放其它信息。
由上述定義便可以確定Flash物理扇區(qū)和絕對地址之間的對應(yīng)關(guān)系:
絕對地址=Flash基地址+物理扇區(qū)號×528
在建立了物理地址和邏輯地址之間的映射關(guān)系之后,但可以很好地將車載系統(tǒng)對音頻文件的操作轉(zhuǎn)換成系統(tǒng)直接Flash的編程或者擦除操作。例如,在該系統(tǒng)中要進行ReadFile()操作,便可以根據(jù)其對應(yīng)關(guān)系,通過執(zhí)行Flash存儲管理系統(tǒng)中的sectorread()操作來實現(xiàn)。
(2)可靠性設(shè)計
由于該車載系統(tǒng)采用汽車供電,因此當(dāng)汽車處于不太平衡的環(huán)境中,可能會由于顛簸千萬播放系統(tǒng)的異常斷電,所以提高車載MP3播放系統(tǒng)的可靠性非常重要。本文通過將Spare Area的16字節(jié)定義為邏輯扇區(qū)號、扇區(qū)當(dāng)前狀態(tài)、壞塊信息等來提高播放系統(tǒng)的可靠性。其中Spare Area的具體定義如下:
邏輯扇區(qū)號 扇區(qū)當(dāng)前狀態(tài) 壞塊信息 保留字節(jié)
第1~3字節(jié) 第4~5字節(jié) 第6字節(jié) 第7~16字節(jié)
由以上定義可以看到,Spare Area的第4~5字節(jié)用于存儲扇區(qū)當(dāng)前狀態(tài)。這樣在Flash寫操作過程中,如果突然斷電,便可以根據(jù)此狀態(tài)進行掉電數(shù)據(jù)恢復(fù)。該系統(tǒng)中設(shè)定扇區(qū)當(dāng)前狀態(tài)有3種:扇區(qū)為空(0xfff)、扇區(qū)數(shù)據(jù)無用(0x0000)、扇區(qū)數(shù)據(jù)有效(0x00ff)。這樣定義以后,系統(tǒng)便可以在Flash寫操作異常終止時能夠?qū)Ξ?dāng)時的狀態(tài)進行及時的保存,以便下次系統(tǒng)開啟后能夠判斷出上次系統(tǒng)中存在的問題并作出相應(yīng)的處理。
(3)壞塊管理
由于Flash內(nèi)部會有壞塊,因此Flash存儲管理系統(tǒng)需要對Flash進行壞塊管理。本文對壞塊的管理分以下兩種情況:
①初始壞塊處理。Flash存儲器在使用前可能會有壞塊,而且這些壞塊是隨機分布的。所以,Flash文件管理系統(tǒng)在系統(tǒng)執(zhí)行讀寫操作之前先建立一個壞塊表,然后對Flash存儲器進行初始化掃描以發(fā)現(xiàn)壞塊,并將壞塊標(biāo)記為不可用,加入到壞塊表中。
②操作過程中壞塊處理。在擦除或者編程過程中發(fā)生錯誤時,Flash文件管理系統(tǒng)將該塊中其它頁的數(shù)據(jù)重新拷貝到一個新的空塊中,然后再將該塊標(biāo)記為壞塊,加入到壞塊表中。在這個處理過程中,由于對Flash的擦除或者編程操作都會使得Flash存儲單元塊的內(nèi)容改變,所以Flash文件管理系統(tǒng)一旦發(fā)現(xiàn)Flash存儲器的存儲單元塊成為壞塊后便不再對該塊進行擦除或編程操作,以免將壞塊標(biāo)志位數(shù)據(jù)清除掉,而是將該塊標(biāo)記為壞塊,并將其加入壞塊表中。
Flash文件管理系統(tǒng)在進行上述壞塊管理后,壞塊單元對用戶應(yīng)用是完全透明的。這大大方便了用戶的使用,也達到了車載MP3播放系統(tǒng)的目的。
(4)均衡擦寫次數(shù)
由于Flash有一定的使用壽命,一般可擦除的次數(shù)為10~100萬次,所以隨著使用次數(shù)的增加,會有一些單元逐漸變得不穩(wěn)定或失敗。因此,要盡量避免頻繁地對同一塊地址操作,以免造成局部單元提前損壞;同時,由于擦除操作耗時較多,也應(yīng)減少擦除操作,應(yīng)該盡量達到擦寫次數(shù)均衡。為此,本文設(shè)計了Flash更新算法和磨損程度檢測算法。
評論