亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于SD 卡的FAT32 文件系統(tǒng)可靠性設(shè)計

        2021-03-24 13:27:10盧俊輝史麗娟
        關(guān)鍵詞:格式化空閑扇區(qū)

        盧俊輝,劉 旗,史麗娟

        (江漢大學(xué) 智能制造學(xué)院,湖北 武漢 430056)

        0 引言

        SD 卡體積小、容量大、存取方便,適于嵌入式系統(tǒng)存儲海量數(shù)據(jù),便于在Windows 操作系統(tǒng)中拷貝和查看,文件存儲格式采用FAT32 文件系統(tǒng),其存儲量可達2 TB。FAT32 文件系統(tǒng)主要包括引導(dǎo)記錄區(qū)(DBR)、文件分配表(FAT)、文件目錄表(FDT)和數(shù)據(jù)區(qū)(DATA)。DBR 占用邏輯0 扇區(qū)和邏輯1 扇區(qū),保存文件系統(tǒng)的重要參數(shù),如扇區(qū)數(shù)量、簇大小、文件分配表大小、根目錄簇號等;FAT 記錄簇號和簇分配狀態(tài),是FAT32 文件系統(tǒng)鏈式存儲的關(guān)鍵,記錄文件數(shù)據(jù)間的鏈表存儲關(guān)系;FDT 存儲文件和子目錄信息,如文件的名稱、大小、創(chuàng)建時間以及起始簇號等;DATA 存儲文件數(shù)據(jù)。DBR、FAT、FDT 和DATA 之間存在鏈表存儲關(guān)系,簇是文件系統(tǒng)記錄數(shù)據(jù)的最小存儲單位,其中DBR 指向空閑簇號,F(xiàn)AT 指向FDT 所占簇號,F(xiàn)DT 指向DATA 所占簇號。FAT32 文件系統(tǒng)寫文件實質(zhì)是更新DBR、更新FAT、寫FDT 和寫DATA,空閑簇號是寫FDT 和DATA 的目標簇號,因此DBR 保存的空閑簇號尤為重要。

        1 FAT32 文件系統(tǒng)用于嵌入式系統(tǒng)的問題和現(xiàn)狀

        SD 卡按照FAT32 文件系統(tǒng)格式化以后,DBR、FAT 按照邏輯扇區(qū)存儲,以下邏輯扇區(qū)簡稱為扇區(qū)。為DBR 預(yù)留了0 ~2 449 扇區(qū),預(yù)留扇區(qū)足夠DBR 使用。為FAT 預(yù)留了2 450 ~32 767扇區(qū),預(yù)留扇區(qū)足夠FAT 使用。FDT 和DATA 按照邏輯簇存儲,每個簇通常占用8 個扇區(qū),以下邏輯簇簡稱為簇。向SD 卡寫文件時,F(xiàn)DT 首先占用空閑簇,即FDT0 占用2 簇存儲文件目錄,DATA 占 用 其 后 的 簇,即DATA0 占 用3 簇、DATA1 占 用4 簇,依 次DATA127 占 用130 簇。當(dāng)FDT0 寫 完128 個 文 件 目 錄,即2 簇 空 間 被 用 完,F(xiàn)DT1 開 始 占 用131 簇,DATA128 開 始 占 用132簇,以此類推,F(xiàn)AT32 文件系統(tǒng)鏈式結(jié)構(gòu)見表1。

        表1 FAT32 文件系統(tǒng)FDT 與DATA 穿插存儲Tab.1 FDT and DATA interleaved storage in the FAT32 file system

        通過分析FAT32 文件系統(tǒng)可知,F(xiàn)DT 和DATA 總是占用空閑簇,導(dǎo)致FDT 與DATA 互相穿插。當(dāng)SD 卡存儲海量文件時,F(xiàn)DT 和DATA 位置混亂,嵌入式系統(tǒng)讀寫文件需要通過鏈表關(guān)系花費大量時間查詢,鏈表式存儲降低了嵌入式系統(tǒng)的實時性。其次,空閑簇號保存在DBR 的第二扇區(qū)內(nèi),每寫一次FDT 或DATA,需要讀取DBR 空閑簇號作為寫FDT 或DATA 目標簇號,然后DBR 空閑簇號需要增加1 并更新DBR,F(xiàn)AT32 文件系統(tǒng)缺少空閑簇號冗余備份,一旦空閑簇號讀寫出錯,則會造成FDT 和DATA 相互覆蓋,導(dǎo)致文件系統(tǒng)出錯;再次,DBR 更新一次則DBR 存儲空閑簇號的扇區(qū)被擦寫一次,SD 卡扇區(qū)擦寫壽命約十余萬次,減少DBR 扇區(qū)擦寫次數(shù)很有必要;最后,嵌入式系統(tǒng)穩(wěn)定性較差,導(dǎo)致SD 卡讀寫難免出現(xiàn)差錯,而FAT32 文件系統(tǒng)缺少檢錯功能,不及時檢錯并糾錯將對數(shù)據(jù)恢復(fù)過程帶來困難。

        為防止FDT 和DATA 互相穿插,楊書凱等[1]提出建立空數(shù)據(jù)文件填滿存儲介質(zhì),然后將后期采集的數(shù)據(jù)寫到空數(shù)據(jù)文件中,但是FDT 的一個簇只能保存128 個目錄,因此該方法只能建立128 個空文件,根本不能滿足數(shù)據(jù)采集系統(tǒng)應(yīng)用;為了避免FDT 和DATA 復(fù)雜的查詢編程,石長華等[2]和吳增等[3]移植znFAT 文件系統(tǒng)到嵌入式系統(tǒng),李敏等[4]移植FATS 文件系統(tǒng)到嵌入式系統(tǒng),但是znFAT 和FATS 文件系統(tǒng)依然按照FAT32 文件系統(tǒng)進行底層處理,沒有從根本上改變文件操作方法。對于DBR 進行冗余備份鮮見文獻報道。對于DBR、FAT、FDT 的糾錯,陳培 德 等[5]對FAT 進 行 恢 復(fù),陳 潮 等[6]對DBR 進 行 恢 復(fù),蔣 笑[7]對FAT 和DBR 進 行 恢 復(fù),遲 揚等[8]和顧廣宇等[9]對DATA 進行恢復(fù),但是均為后期離線恢復(fù),后期數(shù)據(jù)量大,恢復(fù)難度較大。

        為了解決上述問題,本文從順序存儲、冗余備份和實時糾錯3 個方面提高FAT32 文件系統(tǒng)的實時性和可靠性。針對數(shù)據(jù)采集系統(tǒng),對FAT32 文件系統(tǒng)進行簡化,簡化后文件管理系統(tǒng)只能寫文件和讀文件,另外增加如下規(guī)定:所有文件格式相同、文件容量相同,文件名采用短格式,文件系統(tǒng)無子目錄;簇是文件最小單位,一個簇存儲一個文件,一個簇包含8 個扇區(qū),即一個文件占用4k 字節(jié)。

        2 FAT32 文件系統(tǒng)的改進

        2.1 FAT32 文件系統(tǒng)順序存儲

        為防止FDT 和DATA 之間互相穿插,在DATA 前預(yù)留足夠的空間給FDT,DBR、FAT、FDT 和DATA 按照順序存儲,它們之間的鏈式結(jié)構(gòu)變?yōu)轭愃扑饕Y(jié)構(gòu),提高查詢效率。

        以SD 卡存儲50 萬個文件為例,50 萬個文件需要占用50 萬個文件目錄,1 個文件目錄占用32字節(jié),每簇可以存儲128 個文件目錄,50 萬個文件目錄需要占用3 907 個簇,為符合二進制計算,F(xiàn)DF 預(yù)留4 096 個簇。FDT 占用第2 到4 097 簇,從4 098 簇開始存儲DATA 文件,其文件系統(tǒng)順序存儲見表2。

        表2 改進FAT32 文件系統(tǒng)FDT 與DATA 順序存儲Tab.2 FDT and DATA sequentially storage in the improved FAT32 file system

        FAT32 文件系統(tǒng)按照順序存儲,對DBR 更新、FAT 更新、寫FDT 和寫DATA 過程做相應(yīng)改變。DBR 更新過程如下:讀取DBR 空閑簇號,如果空閑簇號小于4 096,說明未預(yù)留4 096 個FDT 簇,SD 卡按照改進后的方式進行格式化,否則DBR 空閑簇號遞增保存;FAT 更新過程如下:如果DBR 空閑簇號小于4 096,F(xiàn)AT 第一個單元填充FF FF FF F8,從第2 個單元連續(xù)填充4 095 個FF FF FF F0 標志,填滿FAT 前32 個簇空間,然后按照FAT32 文件系統(tǒng)規(guī)則在FAT適當(dāng)位置寫入FDT 占用簇號。FDT 寫過程如下:在FDT 當(dāng)前簇內(nèi)空位寫入文件目錄,1 個FDT簇存儲128 個文件目錄,寫滿128 個目錄后進入下一個FDT 預(yù)留簇;DATA 寫過程沒有變化,按照FAT32 文件系統(tǒng)規(guī)則將數(shù)據(jù)寫入FDT 所指的空閑簇。

        FAT32 文件系統(tǒng)改進為順序存儲,從第2 簇到4 097 簇存儲FDT,從4 098 簇開始存儲DATA,順序存儲仍然兼容FAT32 文件系統(tǒng)規(guī)則。

        2.2 FAT32 文件系統(tǒng)冗余循環(huán)備份

        FAT32 文件系統(tǒng)最重要的是空閑簇號,空閑簇號就是寫FDT 或?qū)慏ATA 的下一個簇號,空閑簇號存儲在DBR 的4 個固定字節(jié),每次寫文件需要先讀取空閑簇號,然后對空閑簇號加1 并更新DBR。因為空閑簇號極其重要,F(xiàn)AT32 文件系統(tǒng)對DBR 進行了備份,DBR 備份是簡單的重復(fù)備份,備份僅用于FAT32 文件系統(tǒng)后期數(shù)據(jù)恢復(fù)。簡單的重復(fù)備份可能會出現(xiàn)以下3 種錯誤:一是原始數(shù)據(jù)出現(xiàn)錯誤;二是原始數(shù)據(jù)和備份出現(xiàn)相同的錯誤;三是原始數(shù)據(jù)和備份出現(xiàn)不同的錯誤,簡單的重復(fù)備份無法解決上述錯誤。因為FAT32 文件系統(tǒng)對DBR 原始數(shù)據(jù)的備份只是簡單的重復(fù)備份,原始數(shù)據(jù)和備份數(shù)據(jù)之間本身沒有規(guī)律,F(xiàn)AT32 文件系統(tǒng)無法確定原始數(shù)據(jù)錯誤還是備份數(shù)據(jù)錯誤??臻e簇號作為更新FAT、FDT 和DATA 的重要依據(jù),一旦DBR 空閑簇號出現(xiàn)上述錯誤,輕則部分文件被覆蓋,重則整個文件系統(tǒng)混亂,導(dǎo)致數(shù)據(jù)無法恢復(fù)。

        為了防止空閑簇號出現(xiàn)錯誤,本文對空閑簇號進行16 次循環(huán)冗余遞增存儲,分別存儲在DBR 后16 個相鄰扇區(qū)固定位置。循環(huán)冗余存儲不是進行重復(fù)備份,而是對空閑簇號進行16 次循環(huán)遞增加1 存儲,最大空閑簇號作為有效空閑簇號,其余15 個空閑簇號作為冗余備份。每次讀取DBR 空閑簇號都是按順序讀16 個空閑簇號,為防止最大空閑簇號出現(xiàn)問題,規(guī)定最大空閑簇號必須等于次大空閑簇號加1,否則以次大空閑簇號作為有效空閑簇號。

        16 次循環(huán)冗余遞增存儲帶來兩個好處:其一,如果最大空閑簇號存儲錯誤,則以次大空閑簇號作為有效空閑簇號,最多影響一個文件的存儲;其二,F(xiàn)AT32 文件系統(tǒng)每寫一次FDT 或DATA,DBR 存儲空閑簇號扇區(qū)必須擦寫一次,SD 卡存儲單元壽命也就10 萬次,因此文件數(shù)量不能超過10 萬個。如果采用16 個連續(xù)扇區(qū)循環(huán)冗余遞增存儲空閑簇號,保存50 萬個文件,每個扇區(qū)擦寫31 250 次,有效地延長了SD 卡壽命。

        2.3 FAT32 文件系統(tǒng)檢錯和糾錯

        在寫文件的過程中,SD 卡可能因外界因素導(dǎo)致存儲錯誤,單片機雖然不能處理數(shù)據(jù)本身的錯誤,但是可以發(fā)現(xiàn)違反FAT32 文件系統(tǒng)規(guī)則的錯誤,對DBR、FAT 和FDT 進行檢錯和糾錯,可以避免給后期數(shù)據(jù)存儲帶來無法恢復(fù)的問題。

        DBR 按照16 次循環(huán)冗余遞增存儲空閑簇號,正常情況下最大空閑簇號作為有效空閑簇號,其余15 個簇號存儲的空閑簇號備份。寫文件前,依次讀取DBR 內(nèi)16 個簇號,選取最大空閑簇號作為有效空閑簇號,如果最大空閑簇號比次大空閑簇號大于1 以上,則最大空閑簇號錯誤,那么以次大空閑簇號作為有效空閑簇號,遞增加1 后更新最大空閑簇號。

        經(jīng)過順序存儲改進后,F(xiàn)AT 按順序存儲FDT 簇號,每次修改FAT 時,檢查當(dāng)前扇區(qū)FAT 所指的FDT 簇號是否按順序存儲,如果未按序存儲,則按順序修改FDT 簇號。如果FAT 恰好進入下一扇區(qū),則需要檢查上一個扇區(qū)FDT 簇號是否按順序存儲。

        FDT 所存儲的文件目錄首字節(jié)不能為0x00,因為FAT32 系統(tǒng)規(guī)定當(dāng)FDT 文件目錄首字節(jié)為0x00 時,代表FDT 文件目錄結(jié)束。每次在寫FDT 文件目錄時,檢查當(dāng)前扇區(qū)存儲的FDT 文件目錄首字節(jié)是否為0x00。如果檢測到FDT 文件目錄首字節(jié)為0x00,簡單的處理方法是首字節(jié)填充0xE5,較好的處理方法是按照前期FDT 規(guī)律進行填充。如果寫FDT 為下一個空扇區(qū),則檢查前一個扇區(qū)存儲的文件目錄首字節(jié)是否為0x00。為防止當(dāng)前FDT 文件目錄后存在無效目錄,必須確保當(dāng)前FDT 文件目錄后的首字節(jié)為0x00。

        3 FAT32 文件系統(tǒng)可靠性改進實例

        3.1 SD 卡SPI 接 口

        以8 G 存儲容量SD 卡為例,采用C8051F340 單片機采集到的數(shù)據(jù)存儲到SD 卡,C8051F340單片機本身具有SPI 協(xié)議,因此直接采用SPI 指令讀寫SD 卡字節(jié),SPI 時鐘頻率設(shè)定為200 kHz,SD 卡與單片機SPI 協(xié)議引腳接線見圖1。

        3.2 SD 卡初始化

        SD 卡上電復(fù)位后,需要使SD 卡進入SPI 通信模式,通過SPI 總線發(fā)送指令CMD0 使卡復(fù)位,接著發(fā)送指令CMD1 激活卡進入內(nèi)部初始化處理,最后使卡退出空閑狀態(tài)。當(dāng)SD 卡退出空閑狀態(tài)后,就可以發(fā)送其他命令來操作卡。接著發(fā)送指令CMD58 讀取SD 卡的電壓、容量、卡的大小等信息,最后發(fā)送指令CMD16 設(shè)定扇區(qū)大小為512 字節(jié)[10]。SD 卡的初始化流程見圖2。?

        圖2 SD 卡初始化流程Fig.2 The initialization process of the SD card

        3.3 SD 卡自檢

        SD 卡初始化完成后需要自檢,SD 卡自檢流程見圖3。首先讀取DBR 起始物理扇區(qū),根據(jù)DBR 內(nèi)的信息,確定FAT 起始物理扇區(qū),再根據(jù)FDT 預(yù)留空間確定FDT 起始物理扇區(qū)。為了防止FDT 和DATA 之間穿插,需要提前給FDT 預(yù)留足夠的空間,因此空閑簇號要大于FDT 預(yù)留空間,可以通過比較DBR 內(nèi)中最大的空閑簇號和FDT 預(yù)留空間來判斷是否預(yù)留了足夠的FDT 空間,若空閑簇號大于FDT 預(yù)留空間,則說明預(yù)留了足夠的FDT 空間,否則SD 卡需要進行格式化。

        3.4 SD 卡格式化

        與標準的FAT32 文件系統(tǒng)格式化不同之處在于,此處SD 卡格式化增加了DBR 冗余存儲預(yù)留空間、FDT 與DATA 的順序存儲預(yù)留空間,SD 卡格式化流程見圖4。首先,為實現(xiàn)DBR 的16次冗余存儲,在DBR 后面預(yù)留16 個扇區(qū),其實質(zhì)是將DBR 所占扇區(qū)數(shù)增加到16 個扇區(qū),當(dāng)然也可以增加更多扇區(qū)保存其他參數(shù),比如采集系統(tǒng)的其他信息。其次,為了保證FDT 與DATA 的順序存儲,在FDT 后預(yù)留4 096 個簇,預(yù)留的空間足夠FDT 使用,并將FDT 的起始位置寫入DBR 內(nèi)。再次,F(xiàn)AT 首字節(jié)填充F8 FF FF FF,其后填充4 095 個FF FF FF F0,提示文件系統(tǒng)FDT 預(yù)留的4 096 個簇不能存儲DATA。最后,如上所述,F(xiàn)DT 預(yù)留了4 096 個簇,SD 卡格式化理論上4 096 個簇應(yīng)完全清零,為了節(jié)省時間,只需要將FDT 的首扇區(qū)清零即可。

        3.5 SD 卡寫文件

        SD 卡寫文件包含DBR 更新、FAT 更新、FDT 更新和寫DATA,為提高SD 文件存儲可靠性,加入必要的檢錯和糾錯,SD 卡寫文件流程見圖5。首先,讀取并比較DBR 內(nèi)16 個循環(huán)冗余遞增的空閑簇號,以最大的空閑簇號作為有效空閑簇號,有效空閑簇號所在扇區(qū)的下一個循環(huán)扇區(qū)保存有效空閑簇號遞增加1 并更新DBR,為了防止有效空閑簇號出現(xiàn)錯誤,要求有效空閑簇號小于其余空閑簇號增加16。其次,根據(jù)FDT 所在簇號計算出FDT 在FAT 內(nèi)的索引位置,將FDT 簇號填入FAT 索引,并對當(dāng)前FAT 進行更新;為防止FAT 存儲的FDT 出錯,每次更新FAT 時檢查FDT 索引是否按順序排列,若FDT 索引混亂則重新按序排列FDT。再次,檢測前期存儲的FDT 文件目錄首字節(jié)是否為0x00,若是則填充0xE5,防止FDT 目錄中斷;檢查文件目錄后面字節(jié)是否為0x00,否則后面字節(jié)清零,防止FDT 增加無效文件目錄;當(dāng)檢查前期存儲的FDT 檢錯和糾錯后,再添加最新FDT 文件目錄。最后,在有效空閑簇號所指向的簇內(nèi)寫DATA,完成文件的寫入。

        圖3 SD 卡自檢流程Fig.3 The self-check process of the SD card

        圖4 SD 卡格式化流程Fig.4 The format process of the SD card

        圖5 SD 卡寫文件流程Fig.5 The file writing process of the SD card

        4 結(jié)語

        分析了FAT32 文件系統(tǒng)在嵌入式系統(tǒng)應(yīng)用中存在的問題,通過預(yù)留FDT 空間來防止FDT和DATA 互相穿插,對DBR 空閑簇號進行循環(huán)冗余遞增存儲,對FAT32 文件系統(tǒng)格式的檢查和糾錯,通過上述方法對FAT32 文件系統(tǒng)的改進。以C8051F340 單片機為例,實現(xiàn)SD 卡存儲10萬個文件,提高了嵌入式系統(tǒng)利用SD 卡存儲文件的可靠性,同時完全兼容FAT32 文件系統(tǒng)。為防止FAT、FDT 和DATA 混亂,按照上述改進后,不允許進行刪除操作,這個問題不影響SD 卡應(yīng)用于嵌入式系統(tǒng)數(shù)據(jù)存儲。

        猜你喜歡
        格式化空閑扇區(qū)
        恩賜
        詩選刊(2023年7期)2023-07-21 07:03:38
        分階段調(diào)整增加扇區(qū)通行能力策略
        南北橋(2022年2期)2022-05-31 04:28:07
        現(xiàn)代人守則:昏死之前請把手機格式化
        “鳥”字謎
        小讀者之友(2019年9期)2019-09-10 07:22:44
        U盤故障排除經(jīng)驗談
        彪悍的“寵”生,不需要解釋
        格式化
        詩林(2016年5期)2016-10-25 07:51:39
        基于貝葉斯估計的短時空域扇區(qū)交通流量預(yù)測
        WLAN和LTE交通規(guī)則
        CHIP新電腦(2016年3期)2016-03-10 14:09:48
        中文字幕亚洲熟女av| 精品一区二区三区影片| 大岛优香中文av在线字幕| 亚洲高清一区二区三区在线播放| 亚洲精品色婷婷在线影院| 精品少妇ay一区二区三区| 99热这里只有精品久久6| 日韩精品免费av一区二区三区| 国产一区二区精品久久岳| 久久久久久人妻一区二区三区| 亚洲熟妇大图综合色区| 日韩一区二区中文天堂| 国产精品186在线观看在线播放| 制服丝袜人妻中文字幕在线| 精品久久久久久久久久中文字幕| 亚洲VA不卡一区| 亚洲一区二区三区精彩视频| 亚洲av无码专区亚洲av| 麻豆五月婷婷| 中文字幕人成乱码中文| 国产成人综合久久久久久| 狠狠色噜噜狠狠狠888米奇视频 | 色综合久久网| 亚洲乱亚洲乱少妇无码99p| 亚洲一区二区三区久久蜜桃| 蜜桃久久综合一区二区| 色综合av综合无码综合网站| 老熟女毛茸茸浓毛| 中文字幕亚洲精品第一页| 国产精品髙潮呻吟久久av| 一本加勒比hezyo无码专区| 精产国品一二三产品蜜桃| 国产va精品免费观看| 色婷婷亚洲一区二区三区在线| 国产精品亚洲av三区亚洲| 色哟哟网站在线观看| 国产人成无码视频在线1000| 亚洲成年国产一区二区| 久久久g0g0午夜无码精品| 99精品免费视频| 久久综合激情的五月天|