由以上定義可以看到,Spare Area的第4~5字節(jié)用于存儲扇區(qū)當(dāng)前狀態(tài)。這樣在Flash寫操作過程中,如果突然斷電,便可以根據(jù)此狀態(tài)進(jìn)行掉電數(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)進(jìn)行及時的保存,以便下次系統(tǒng)開啟后能夠判斷出上次系統(tǒng)中存在的問題并作出相應(yīng)的處理。
(3)壞塊管理
由于Flash內(nèi)部會有壞塊,因此Flash存儲管理系統(tǒng)需要對Flash進(jìn)行壞塊管理。本文對壞塊的管理分以下兩種情況:
①初始壞塊處理。Flash存儲器在使用前可能會有壞塊,而且這些壞塊是隨機(jī)分布的。所以,F(xiàn)lash文件管理系統(tǒng)在系統(tǒng)執(zhí)行讀寫操作之前先建立一個壞塊表,然后對Flash存儲器進(jìn)行初始化掃描以發(fā)現(xiàn)壞塊,并將壞塊標(biāo)記為不可用,加入到壞塊表中。
②操作過程中壞塊處理。在擦除或者編程過程中發(fā)生錯誤時,F(xiàn)lash文件管理系統(tǒng)將該塊中其它頁的數(shù)據(jù)重新拷貝到一個新的空塊中,然后再將該塊標(biāo)記為壞塊,加入到壞塊表中。在這個處理過程中,由于對Flash的擦除或者編程操作都會使得Flash存儲單元塊的內(nèi)容改變,所以Flash文件管理系統(tǒng)一旦發(fā)現(xiàn)Flash存儲器的存儲單元塊成為壞塊后便不再對該塊進(jìn)行擦除或編程操作,以免將壞塊標(biāo)志位數(shù)據(jù)清除掉,而是將該塊標(biāo)記為壞塊,并將其加入壞塊表中。
Flash文件管理系統(tǒng)在進(jìn)行上述壞塊管理后,壞塊單元對用戶應(yīng)用是完全透明的。這大大方便了用戶的使用,也達(dá)到了車載MP3播放系統(tǒng)的目的。
(4)均衡擦寫次數(shù)
由于Flash有一定的使用壽命,一般可擦除的次數(shù)為10~100萬次,所以隨著使用次數(shù)的增加,會有一些單元逐漸變得不穩(wěn)定或失敗。因此,要盡量避免頻繁地對同一塊地址操作,以免造成局部單元提前損壞;同時,由于擦除操作耗時較多,也應(yīng)減少擦除操作,應(yīng)該盡量達(dá)到擦寫次數(shù)均衡。為此,本文設(shè)計(jì)了Flash更新算法和磨損程度檢測算法。
Flash更新算法是將Flash中要更新的數(shù)據(jù)直接寫入一個空塊中,降低由于Flash先擦除后寫入的特性帶來的對塊的頻繁擦除;同時,也提高了Flash的使用效率,加快了操作速度。磨損程度檢測算法是在對Flash進(jìn)行寫入前必須先對Flash進(jìn)行壞塊掃描,以確保不會將數(shù)據(jù)寫入壞塊從而此起數(shù)據(jù)的丟失。這樣設(shè)計(jì)也是為了提高車載MP3播放系統(tǒng)的可靠性。
2.2 FAT設(shè)計(jì)
在Flash文件管理系統(tǒng)的基礎(chǔ)上,還建立了FAT文件系統(tǒng)來對文件操作進(jìn)行管理。將FAT文件系統(tǒng)具體分為以下四部分:
(1)FAT的引導(dǎo)區(qū)
該引導(dǎo)區(qū)存放代碼所需的信息及最重要的文件系統(tǒng)信息。這些信息包括了Flash存儲器的類型、容量以及劃分成多少個簇;每個簇包含多少扇區(qū)、FAT表數(shù)目、保留扇區(qū)數(shù)、根目錄的首簇號及根目錄入口數(shù)、版本信息等等。引導(dǎo)扇區(qū)是在格式化Flash時生成的。
(2)FAT的文件分配表
文件分配表存放文件所占用的存儲空間族鏈以及Flash存儲器的占用和空閑空間的情況,非常重要。為了防止文件分配表損壞而引起文件的丟失,該系統(tǒng)中保存了兩個相同的文件分配表FAT1和FAT2,以改善其安全性。在文件系統(tǒng)的操作中,程序?qū)AT表結(jié)構(gòu)的兩個備份進(jìn)行順次修改,以此確保Flash存儲器上總是存有一整套完好的文件分配表。
系統(tǒng)對FAT表的訪問原理如下:訪問文件時先從要目錄中找到該文件的目錄項(xiàng),從中讀出首簇號。然后,目錄中找到該文件的目錄項(xiàng),從中讀出首簇號。然后在FAT中找到從該首簇號開始的簇鏈,簇鏈上的簇號即為文件在邏輯扇區(qū)中占用的扇區(qū)號鏈,這樣便可以進(jìn)行數(shù)據(jù)讀寫了。
(3)FAT的根目錄區(qū)
FAT的根目錄區(qū)是固定大小的緊跟在FAT表后的區(qū)域。本文將從FAT區(qū)之后緊跟的32個扇區(qū)作為根目錄區(qū),可以保存512個目錄項(xiàng)。每個目錄項(xiàng)記錄了該文件的文件名、文件屬性、文件大小、文件創(chuàng)建的日期和時間以及文件在數(shù)據(jù)區(qū)中所占的首簇號,即該文件在FAT表中的入口等數(shù)據(jù)。
(4)FAT的數(shù)據(jù)區(qū)
數(shù)據(jù)區(qū)存在文件的數(shù)據(jù)內(nèi)容。文件系統(tǒng)對數(shù)據(jù)區(qū)的存儲空間是按簇進(jìn)行劃分和管理的。該系統(tǒng)中,定義1Cluster=32sector,一個文件總是占用若干個整簇,文件所使用的最后一簇剩余空間就不再使用。
由圖1可以看出,該FAT文件系統(tǒng)提供文件的格式化,文件的打開、刪除、關(guān)閉,文件的讀寫、查找等基本的功能。通過Flash文件系統(tǒng)對文件的操作進(jìn)行管理后,該車載播放系統(tǒng)便可以實(shí)現(xiàn)選曲、添加刪除歌曲、下載歌曲、音量調(diào)節(jié)等一系列功能了。
3 應(yīng)用
通過這樣的設(shè)計(jì),F(xiàn)lash的存儲性能有了較大的改善,而且系統(tǒng)的可靠性也很好。即使在Flash寫操作異常終止頻發(fā)的最惡劣工作條件下,也不會丟失數(shù)據(jù),更不會損壞非常重要的文件分配表結(jié)構(gòu)而造成系統(tǒng)的崩潰;因此,本文所設(shè)計(jì)的Flash文件系統(tǒng)能很好地適合于車載MP3播放系統(tǒng)的應(yīng)用。





