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