![基于MCF51QE128的SD卡文件系統(tǒng)設(shè)計(jì)-設(shè)計(jì)應(yīng)用_第1頁(yè)](http://file4.renrendoc.com/view/f353c6115adb16d3bebf6dd89448ca6f/f353c6115adb16d3bebf6dd89448ca6f1.gif)
![基于MCF51QE128的SD卡文件系統(tǒng)設(shè)計(jì)-設(shè)計(jì)應(yīng)用_第2頁(yè)](http://file4.renrendoc.com/view/f353c6115adb16d3bebf6dd89448ca6f/f353c6115adb16d3bebf6dd89448ca6f2.gif)
![基于MCF51QE128的SD卡文件系統(tǒng)設(shè)計(jì)-設(shè)計(jì)應(yīng)用_第3頁(yè)](http://file4.renrendoc.com/view/f353c6115adb16d3bebf6dd89448ca6f/f353c6115adb16d3bebf6dd89448ca6f3.gif)
![基于MCF51QE128的SD卡文件系統(tǒng)設(shè)計(jì)-設(shè)計(jì)應(yīng)用_第4頁(yè)](http://file4.renrendoc.com/view/f353c6115adb16d3bebf6dd89448ca6f/f353c6115adb16d3bebf6dd89448ca6f4.gif)
![基于MCF51QE128的SD卡文件系統(tǒng)設(shè)計(jì)-設(shè)計(jì)應(yīng)用_第5頁(yè)](http://file4.renrendoc.com/view/f353c6115adb16d3bebf6dd89448ca6f/f353c6115adb16d3bebf6dd89448ca6f5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
精品文檔-下載后可編輯基于MCF51QE128的SD卡文件系統(tǒng)設(shè)計(jì)-設(shè)計(jì)應(yīng)用摘要:隨著嵌入式系統(tǒng)的發(fā)展,越來(lái)越多的嵌入式設(shè)備需要處理大量的數(shù)據(jù),使用文件系統(tǒng)將成為這類(lèi)嵌入式應(yīng)用的一個(gè)必然趨勢(shì)。本文基于Freescale公司MCF51QEl28微控制器和SD卡,結(jié)合實(shí)驗(yàn)數(shù)據(jù)深入探討了FATl6文件系統(tǒng)及其存儲(chǔ)原則,實(shí)現(xiàn)了文件的創(chuàng)建、打開(kāi)和多扇區(qū)數(shù)據(jù)的讀寫(xiě)。
引言
MCF51QEl28微控制器是Freescale公司生產(chǎn)的8位/32位兼容的低功耗微處理器。工作電壓的典型值是3.6V,與SD卡的工作電壓兼容,可直接與SD卡連接而無(wú)需電平轉(zhuǎn)換電路。SD卡因?yàn)槠潴w積小、功耗低、容量大且成本低,目前被廣泛應(yīng)用于各類(lèi)嵌入式數(shù)據(jù)采集系統(tǒng)中。本文針對(duì)此類(lèi)應(yīng)用,通過(guò)實(shí)測(cè)512MBSD卡數(shù)據(jù),以實(shí)例的形式深入解析了FATl6文件系統(tǒng)的存儲(chǔ)原則,并給出了實(shí)現(xiàn)方案。
1FATl6文件系統(tǒng)
SD卡格式化為FAT文件系統(tǒng)時(shí),一般只采用1個(gè)分區(qū),以便于存儲(chǔ)空間的管理。FATl6主要由圖1所示的6個(gè)陰影部分組成。通常情況下,每扇區(qū)的大小為512字節(jié)。
1.1主引導(dǎo)記錄
MBR(MasterBootRecord,主引導(dǎo)記錄)總是位于存儲(chǔ)卡的起始位置,即扇區(qū)O。圖2是主引導(dǎo)記錄的詳細(xì)信息。由于只有1個(gè)分區(qū),所以由偏移量0x1BE可找到第1分區(qū)的入口,接著由偏移量0x08找到第1分區(qū)的相對(duì)起始扇區(qū),即第1分區(qū)引導(dǎo)記錄所在的扇區(qū)。以512MBSD卡為例,讀取圖2中地址OxlC6~OxlC9處的4個(gè)字節(jié)數(shù)據(jù)(由高位向低位讀取),即Ox000000E9??芍?分區(qū)引導(dǎo)記錄位于SD卡的第0xE9個(gè)扇區(qū)。
1.2分區(qū)引導(dǎo)記錄
分區(qū)BR(BootRecord,引導(dǎo)記錄)位于分區(qū)的第O扇區(qū)。它由跳轉(zhuǎn)代碼,OEM(OriginalEqtlipmentManufacturer,原始設(shè)備制造商),BPB(BIOsParameterBlock,BIOS參數(shù)塊),擴(kuò)展BPB,引導(dǎo)代碼和結(jié)束標(biāo)志(Ox55AA)組成。圖3重點(diǎn)列出了分區(qū)引導(dǎo)記錄中BPB的各項(xiàng)參數(shù)。讀圖3中Ox000000E9扇區(qū),由偏移量0x0B處2字節(jié)數(shù)據(jù)Ox0200=512可知,SD卡每扇區(qū)的字節(jié)數(shù)為512。類(lèi)似地,可得到其他相關(guān)參數(shù)。
1.3FAT表和文件存儲(chǔ)原則
FATl6文件系統(tǒng)主要通過(guò)FAT表(FATl和FAT2)、根目錄和數(shù)據(jù)區(qū)實(shí)現(xiàn)對(duì)文件的存儲(chǔ)管理。FAT表記錄了數(shù)據(jù)文件的存儲(chǔ)鏈表,對(duì)數(shù)據(jù)的讀取極為重要,通常都會(huì)有一個(gè)或多個(gè)備份。這里,F(xiàn)AT2就是對(duì)FATl的備份,必須隨著FATl即時(shí)同步更新。根目錄一般以32字節(jié)為單位來(lái)存放文件記錄。
數(shù)據(jù)區(qū)主要存放文件數(shù)據(jù),為了有效利用存儲(chǔ)空間,一般以簇為單位,簇的大小通常是2的,n次冪個(gè)扇區(qū)。FAT格式化后,簇的大小就確定下來(lái)了,可通過(guò)讀取分區(qū)引導(dǎo)記錄獲得。例如,讀取圖3中Ox000000E9扇區(qū),由偏移量OxOD處1字節(jié)數(shù)據(jù)0x10=16可知,SD卡的1個(gè)簇占16個(gè)扇區(qū)。
如果將SD卡的存儲(chǔ)空間想象成一本書(shū),那么要閱讀一篇文章,首先應(yīng)該打開(kāi)目錄找到文章的頁(yè)碼,然后根據(jù)頁(yè)碼翻到文章所在的地方。類(lèi)比到FATl6文件系統(tǒng),F(xiàn)AT表和根目錄就像書(shū)的目錄,簇號(hào)類(lèi)似于書(shū)的頁(yè)碼,而數(shù)據(jù)區(qū)存放的就是文章的具體內(nèi)容。
以打開(kāi)文件為例,文件的存儲(chǔ)原則可以這樣描述:首先在根目錄中查找文件名,如有匹配,就找到了文件的開(kāi)始簇號(hào),好比知道了文章的頁(yè)碼。但文件的存儲(chǔ)和書(shū)不同,書(shū)的內(nèi)容一般是連續(xù)的,而文件在存儲(chǔ)后是可以隨意修改的(例如添加或刪除),因而在存儲(chǔ)空間上可能不連續(xù),這樣就無(wú)法僅通過(guò)開(kāi)始簇號(hào)找到整個(gè)文件。那么怎樣才能完整找到這些不連續(xù)的數(shù)據(jù)呢?答案就是FAT表。FAT表以“0xF8FFFFFF”作為開(kāi)始標(biāo)志,以2字節(jié)為單位存放文件簇號(hào)。FAT表實(shí)質(zhì)是一個(gè)二維鏈表,如圖4所示。
FAT表上面的數(shù)字是這2個(gè)字節(jié)在表中的位置序號(hào),同時(shí)也代表文件的簇號(hào),與數(shù)據(jù)區(qū)的簇號(hào)對(duì)應(yīng),類(lèi)似目錄的頁(yè)碼。通常SD卡上個(gè)文件的開(kāi)始簇號(hào)為2。若文件長(zhǎng)度小于1簇,則其開(kāi)始簇號(hào)所對(duì)應(yīng)的2字節(jié)值為FFFF。若文件長(zhǎng)度大于1簇,則其開(kāi)始簇號(hào)所對(duì)應(yīng)2字節(jié)中存放的是文件所在的下一個(gè)簇號(hào),由所得簇號(hào)再查找其對(duì)應(yīng)的2字節(jié),可找到文件接下來(lái)的簇號(hào)。依此類(lèi)推,直到所得簇號(hào)對(duì)應(yīng)的2字節(jié)值為FFFF,即為文件的結(jié)束簇號(hào)。根據(jù)上述原則,由FAT表和根目錄就可以確定文件在數(shù)據(jù)區(qū)的存儲(chǔ)簇號(hào),從而實(shí)現(xiàn)文件數(shù)據(jù)的管理。
2FATl6文件系統(tǒng)設(shè)計(jì)
文件系統(tǒng)的基本功能包括:文件的創(chuàng)建、打開(kāi)和讀寫(xiě)。這里假定已經(jīng)實(shí)現(xiàn)了MCF51QEl28微控制器和SD卡的硬件接口和底層通信,具體細(xì)節(jié)參考文獻(xiàn)。
2.1數(shù)據(jù)結(jié)構(gòu)
為了便于對(duì)主引導(dǎo)記錄、分區(qū)引導(dǎo)記錄、FAT表、根目錄和數(shù)據(jù)區(qū)中的相關(guān)信息進(jìn)行記錄和處理,定義了FATl6_t和FILE_t兩個(gè)結(jié)構(gòu)體類(lèi)型。數(shù)據(jù)類(lèi)型byte、word和dword分別對(duì)應(yīng)于8位、16位和32位數(shù)據(jù)。
FATl6_t結(jié)構(gòu)體類(lèi)型用于記錄主引導(dǎo)記錄和第1分區(qū)引導(dǎo)扇區(qū)信息,部分定義如下:
FILE_t結(jié)構(gòu)體類(lèi)型用于記錄每個(gè)文件項(xiàng)信息,部分定義如下:
2.2FATl6初始化
FATl6的初始化主要是讀取主引導(dǎo)記錄和第1分區(qū)引導(dǎo)扇區(qū)信息,并保存到FATl6_t類(lèi)型變量中。初始化流程如圖5所示。
FATl6初始化子程序中調(diào)用了底層SD卡讀數(shù)據(jù)塊函數(shù)SD_ReadBlock。其函數(shù)聲明為byteSD_ReadBlock(dwordsector,byte*buffer),用于讀入地址為sector扇區(qū)中的數(shù)據(jù),暫存入buffer中。預(yù)編譯函數(shù)from_BE_32和from_BE_16分別實(shí)現(xiàn)由高位向低位讀取4字節(jié)和2字節(jié)數(shù)據(jù)。
FATl6初始化子程序聲明為byteInit_FAT(FArl6_t*FAT,byte*buffer),部分代碼如下:
2.3打開(kāi)和創(chuàng)建文件
打開(kāi)和創(chuàng)建文件采用一個(gè)函數(shù)來(lái)實(shí)現(xiàn)。首先根據(jù)讀入的文件名查找根目錄,若有匹配項(xiàng)則打開(kāi)文件,否則創(chuàng)建一個(gè)新文件。流程如圖6所示。
打開(kāi)和創(chuàng)建文件子程序聲明為byteOpen_File(FILE_t*FILE,F(xiàn)ATl6_t*FAT,byte*buffer,byte*name)。部分代碼如下:
在根目錄中查找是否有文件項(xiàng)匹配,從根目錄的第1個(gè)扇區(qū)開(kāi)始讀扇區(qū)。
根據(jù)文件起始簇號(hào)和根目錄的記錄項(xiàng)號(hào),計(jì)算文件FAT表、根目錄和數(shù)據(jù)區(qū)的相關(guān)信息。對(duì)于根目錄和數(shù)據(jù)區(qū)的信息,已有文件和新文件的計(jì)算一致。如果是新文件,還需修改FAT表和根目錄記錄項(xiàng)。
2.4多扇區(qū)數(shù)據(jù)讀寫(xiě)
多扇區(qū)數(shù)據(jù)的讀寫(xiě)是在打開(kāi)文件的基礎(chǔ)上,以扇區(qū)為單位讀寫(xiě)文件,可連續(xù)讀寫(xiě)多個(gè)扇區(qū)數(shù)據(jù),同時(shí)寫(xiě)入文件的屬性、日期和時(shí)間。寫(xiě)數(shù)據(jù)的流程如圖7所示,讀數(shù)據(jù)與之類(lèi)似。多扇區(qū)數(shù)據(jù)的寫(xiě)子程序聲明為byteWrite_File(FILE_t*FILE,F(xiàn)ATl6_t*FAT,byteattribute,wordtime,worddate,dWOEdsize_s,byte*buffer),根據(jù)寫(xiě)入扇區(qū)數(shù)size_s,設(shè)置文件的寫(xiě)入位置。首先將寫(xiě)入扇區(qū)數(shù)與文件剩余扇區(qū)數(shù)進(jìn)行比較,若寫(xiě)入扇區(qū)數(shù)小于等于剩余扇區(qū)數(shù),則新寫(xiě)入扇區(qū)數(shù)、簇?cái)?shù)均為0,文件結(jié)束簇、寫(xiě)簇號(hào)不變,不需要修改FAT表,僅修改根目錄中的文件長(zhǎng)度。否則,需要計(jì)算新寫(xiě)入扇區(qū)數(shù)和簇?cái)?shù)。若有增加簇,則需修改FAT表,包括FATl和FAT2、根目錄的文件記,錄項(xiàng)。,將數(shù)據(jù)寫(xiě)入文件數(shù)據(jù)區(qū)。
結(jié)語(yǔ)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能網(wǎng)聯(lián)汽車(chē)租賃服務(wù)合同
- 2025年度國(guó)際IT產(chǎn)品全球獨(dú)家代理銷(xiāo)售合同
- 2025年度國(guó)際貨物檢驗(yàn)與檢疫服務(wù)合同示例
- 2025年度環(huán)保工人環(huán)保知識(shí)普及培訓(xùn)合同
- 2025年度公廁文化建設(shè)與宣傳推廣合同
- 2025年度建筑項(xiàng)目土方工程監(jiān)理合同范本
- 2025年度綠色建筑節(jié)能改造工程合同范本新
- 2025年居間合同范本:藝術(shù)品交易居間代理服務(wù)協(xié)議
- 2025年度共有產(chǎn)權(quán)住房還建房買(mǎi)賣(mài)合同參考文本
- 2025年度文化衍生品創(chuàng)意設(shè)計(jì)購(gòu)銷(xiāo)合同完整版
- 基礎(chǔ)知識(shí)3500個(gè)常用漢字附拼音
- 企業(yè)易制毒化學(xué)品管理培訓(xùn)
- 酒店財(cái)務(wù)部SOP(標(biāo)準(zhǔn)操作手冊(cè))4092
- JJF(紡織)072-2018紡織滾筒式烘干機(jī)校準(zhǔn)規(guī)范
- 北京故宮作文600字
- 羊水栓塞的應(yīng)急預(yù)案演練腳本
- 餐飲服務(wù)保障措施、食品衛(wèi)生安全保障方案
- 物業(yè)保潔及餐飲服務(wù)項(xiàng)目方案
- (新版教材)粵教粵科版六年級(jí)下冊(cè)科學(xué)全冊(cè)課時(shí)練(同步練習(xí))
- TCETA 001-2021 演藝燈具型號(hào)命名規(guī)則
- c語(yǔ)言期末機(jī)考(大連理工大學(xué)題庫(kù))
評(píng)論
0/150
提交評(píng)論