摘 要:介紹了TI公司出品的DSP芯片TMS320F206對(duì)基于FAT32文件系統(tǒng)的文件讀寫(xiě)和管理技術(shù)以及其對(duì)IDE硬盤的讀寫(xiě)技術(shù),著重介紹了文件的讀寫(xiě)部分并且給出了該系統(tǒng)的軟件流程圖,簡(jiǎn)要介紹了硬件接口部分和對(duì)IDE硬盤的直接讀寫(xiě)技術(shù)
關(guān)鍵詞:FAT32;TMS320F206;IDE;DSP
1 引 言
隨著大數(shù)據(jù)量嵌入式系統(tǒng)的發(fā)展(如:視頻采集系統(tǒng)、視頻監(jiān)控系統(tǒng)等),傳統(tǒng)的數(shù)據(jù)存儲(chǔ)器件已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足當(dāng)前的數(shù)據(jù)量要求。硬盤以其成熟的技術(shù),通用的接口,尤其是巨大的數(shù)據(jù)存儲(chǔ)空間,越來(lái)越多地吸引了設(shè)計(jì)人員的注意。所以如何用微控制芯片來(lái)實(shí)現(xiàn)對(duì)硬盤的讀寫(xiě),如何運(yùn)用硬盤接口的通用性來(lái)實(shí)現(xiàn)硬盤數(shù)據(jù)管理的可移植性,是非常實(shí)際的問(wèn)題。
FAT32文件系統(tǒng)是現(xiàn)在PC機(jī)上普遍應(yīng)用的文件系統(tǒng),經(jīng)過(guò)PC機(jī)高級(jí)格式化后的硬盤本身就包含了FAT32文件系統(tǒng)的系統(tǒng)參數(shù)。將該硬盤直接連接到嵌入式系統(tǒng)的IDE接口,可以由DSP芯片讀寫(xiě)和管理硬盤上的文件并且也可以將該硬盤作為第二硬盤接到PC機(jī)上進(jìn)行數(shù)據(jù)處理。這一思想切實(shí)可行,下面將介紹具體實(shí)現(xiàn)方法。
2 FAT32文件系統(tǒng)簡(jiǎn)介
2.1 硬盤主引導(dǎo)記錄(MBR)
嚴(yán)格地說(shuō),MBR并非在建立FAT32系統(tǒng)時(shí)建立,他是由分區(qū)命令在將硬盤分區(qū)時(shí)寫(xiě)入到硬盤的0柱面、0磁頭、1扇區(qū)的。他包括了主引導(dǎo)程序和分區(qū)信息表,并且以十六進(jìn)制數(shù)55AA為扇區(qū)結(jié)束標(biāo)志。
2.2 FAT32分區(qū)的數(shù)據(jù)結(jié)構(gòu)
FAT32分區(qū)的數(shù)據(jù)結(jié)構(gòu)如表1[1]所示。

引導(dǎo)扇區(qū)在分區(qū)的第一個(gè)扇區(qū),其中包含了非常重要的BIOS參數(shù)塊(BPB)[1],根據(jù)這些參數(shù)可以找到FAT和根目錄的入口地址。本文用到的參數(shù)列于表2中以供參考。

FAT(文件分配表)是文件管理系統(tǒng)用來(lái)記錄每個(gè)文件的存儲(chǔ)位置的表格,他以鏈表的方式存放簇號(hào)。磁盤上有2個(gè)FAT,一個(gè)是基本表(FAT1,如不加說(shuō)明下面提到的FAT均指FAT1),另一個(gè)是備份(FAT2)。FAT是一個(gè)由許多32 b整數(shù)(登記項(xiàng))組成的數(shù)組,每個(gè)登記項(xiàng)的位置對(duì)應(yīng)一個(gè)簇號(hào),該登記項(xiàng)的值代表該文件的下一簇的簇FAT找到整個(gè)文件的存儲(chǔ)位置。當(dāng)FAT中的登記項(xiàng)為0FFFFFF8H~0FFFFFFFH時(shí)表示對(duì)應(yīng)的簇是文件分配的最后一簇,00000000H表示未用的簇,F(xiàn)FFFFFF7H表示已損壞的簇。
FAT32系統(tǒng)采用動(dòng)態(tài)的文件目錄表(FDT)[1],F(xiàn)DT是由32 B的文件目錄項(xiàng)組成的,當(dāng)根目錄上存儲(chǔ)的文件超過(guò)當(dāng)前FDT所能記錄的數(shù)量后,操作系統(tǒng)將為根目錄增加一個(gè)或多個(gè)簇的存儲(chǔ)空間(這部分存儲(chǔ)空間可以是硬盤上任意未用空間),同時(shí)在FAT中登記。另外,在FDT中一個(gè)目錄項(xiàng)的第一個(gè)字節(jié)如果是00H或E5H,則表示該目錄項(xiàng)空閑,可以建立新的文件目錄項(xiàng)。
3 TMS320F206對(duì)基于FAT32文件系統(tǒng)的文件操作
3.1 初始化步驟
(1)TMS320F206的數(shù)據(jù)空間分配:TMS320F206片內(nèi)的數(shù)據(jù)存儲(chǔ)器包括256 B的B0(0100H~01FFH)、256 B的B1(0300H~03FFH)、32 B的B2(0060H~007FH)以及4 kB字的SDRAM(0800H~17FFH)[2]。將B0作為IDE硬盤的輸入輸出緩沖區(qū)(1扇區(qū)),B1作為引導(dǎo)扇區(qū)的保存位置。
(2)利用PC機(jī)上裝載的操作系統(tǒng)(Windows 98/Me/2000/XP)在硬盤上建立FAT32文件系統(tǒng),將硬盤作為第二硬盤做不分區(qū)格式化,該指令為:
FORMAT第二硬盤驅(qū)動(dòng)器名\FS:FAT32
這樣Windows系統(tǒng)會(huì)把第二硬盤作為一個(gè)分區(qū),向其中寫(xiě)入引導(dǎo)扇區(qū)、FAT表,并定義文件和目錄存放的位置。
(3)將MBR讀入來(lái)獲取硬盤上的邏輯分區(qū)入口地址,MBR中的前446 B中裝載了主引導(dǎo)程序,由DSP芯片控制硬盤的情況不需要處理這一部分內(nèi)容。從偏移量為446的字節(jié)開(kāi)始時(shí)64 B的分區(qū)表,每個(gè)分區(qū)信息占用16 B,這16 B的9~12四個(gè)字節(jié)表示分區(qū)的入口邏輯扇區(qū)地址(LBA)。
(4)將引導(dǎo)記錄扇區(qū)(邏輯0扇區(qū))讀入來(lái)獲取所需參數(shù):讀入BPB參數(shù),存儲(chǔ)到DSP對(duì)應(yīng)空間,根據(jù)獲得的參數(shù),可以計(jì)算出讀寫(xiě)文件所必需的其他參數(shù):
FAT起始LBA=分區(qū)入口LBA+保留扇區(qū)數(shù)
首簇LBA=分區(qū)入口LBA+保留扇區(qū)數(shù)+(FAT個(gè)數(shù)×每個(gè)FAT所占扇區(qū)數(shù))
任意簇的LBA=首簇LBA+(簇號(hào)-2)×每簇扇區(qū)數(shù)
數(shù)據(jù)存儲(chǔ)總簇?cái)?shù)=每個(gè)FAT所占扇區(qū)數(shù)×512/4;由于FAT中每4個(gè)字節(jié)對(duì)應(yīng)一簇的數(shù)據(jù)存儲(chǔ)空間
這些參數(shù)連同BPB參數(shù)一起存儲(chǔ)在TMS320F206的片內(nèi)數(shù)據(jù)分配中定義的相應(yīng)位置。
3.2 文件操作部分
當(dāng)要讀取已知文件名的文件時(shí),可以直接調(diào)用讀取文件子程序,入口參數(shù)為已知文件名。所需變量除了已經(jīng)獲知的參數(shù)外,還定義了:當(dāng)前簇號(hào)(4 B),用于存儲(chǔ)讀取過(guò)程中當(dāng)前簇的簇號(hào)。需要說(shuō)明的是:為了簡(jiǎn)化程序結(jié)構(gòu),這里只考慮了短文件名(8.3格式)的形式。圖1為讀取文件子程序的程序流程圖。





