
向硬盤中寫入一個(gè)文件首先要做的就是在根目錄下建立文件的文件目錄項(xiàng),無論文件目錄項(xiàng)的存儲(chǔ)位置還是文件本身的存儲(chǔ)位置,都需要由系統(tǒng)在硬盤上查找空閑簇。找到這些空閑簇之后需要在FAT1中建立一個(gè)鏈表,并且在FAT2中備份。
因?yàn)镕AT32文件系統(tǒng)管理的硬盤空間一般都比較大,所以如果從頭至尾逐個(gè)查詢每一簇是否空閑將浪費(fèi)很多時(shí)間。這里對(duì)FAT32特有的“文件系統(tǒng)信息”扇區(qū)加以利用:從BPB參數(shù)中可以找到該扇區(qū)在保留扇區(qū)中的位置,通常為第1扇區(qū)。該扇區(qū)中有一個(gè)重要的參數(shù):起始空閑簇號(hào),在該扇區(qū)的偏移量為1ECH,共占用4 B。其中的內(nèi)容為硬盤中被占用的簇的最大簇號(hào),如果該值是FFFFFFFFH,則表示系統(tǒng)對(duì)最大簇號(hào)不知情,那么尋找空閑簇只好從頭找起。當(dāng)然寫完文件后,要將這個(gè)參數(shù)的內(nèi)容變?yōu)楫?dāng)前值,并且在BPB參數(shù)的備份區(qū)中也要更新此參數(shù)。
寫文件子程序所需變量除了已經(jīng)獲知的參數(shù)外,還定義了:當(dāng)前簇號(hào)(4 B),用于存儲(chǔ)寫入過程中當(dāng)前簇的簇號(hào);空閑簇號(hào)(4 B),用于存儲(chǔ)查找到的空閑簇號(hào);m(4 B),n(4 B),分別用來計(jì)數(shù)。由于程序結(jié)構(gòu)比較復(fù)雜,所以這里將這個(gè)子程序分為兩部分加以說明,分別是:利用起始空閑簇號(hào)和FAT查找空閑簇、在根目錄中建立目錄項(xiàng)和文件寫入。
利用起始空閑簇號(hào)和FAT查找空閑簇,將空閑簇號(hào)和當(dāng)前簇號(hào)作為參數(shù)傳遞給子程序的后續(xù)部分,具體程序流程為圖2所示。在根目錄中建立目錄項(xiàng)和文件寫入的程序流程圖如圖3所示。


3.3 刪除文件
刪除文件比較簡單,只需要找到文件目錄項(xiàng)所在位置將第一個(gè)字節(jié)變?yōu)?EH,然后將FAT中對(duì)應(yīng)的鏈表中各項(xiàng)清零即可。
4 TMS320F206對(duì)IDE硬盤的讀寫
4.1 電氣接口
硬盤IDE接口用一條40線的電纜來轉(zhuǎn)接信號(hào),包括16根數(shù)據(jù)線(D0~D15),3根地址線(DA0~DA2)以及接口控制線(CS0,CS1,DIOW,DIOR,IORDY,INTRQ,IOCS16,DMARQ,DMACK,RESET)[3]。將16根數(shù)據(jù)線同TMS320F206芯片的數(shù)據(jù)線相連;CS0,CS1與地址線分別同DSP芯片的低5位相連;控制信號(hào)可以由時(shí)序電路產(chǎn)生。
4.2 直接讀寫IDE硬盤
前文中講到了許多讀取硬盤的操作,對(duì)于怎樣具體直接讀寫IDE硬盤,這里只做一個(gè)簡單的介紹。
IDE硬盤尋址 IDE硬盤是通過磁頭、柱面和扇區(qū)組織起來的,可以通過這3個(gè)參數(shù)來惟一的確定一個(gè)扇區(qū),這種尋址方式叫作物理尋址(CHS方式)。另外,為了尋址簡便,每一個(gè)扇區(qū)都有其對(duì)應(yīng)的邏輯地址(LBA),F(xiàn)AT32文件系統(tǒng)中的扇區(qū)地址都是采用的邏輯地址。
PIO方式讀寫硬盤 對(duì)硬盤的操作是通過向硬盤的命令寄存器組中的寄存器寫入命令來實(shí)現(xiàn)的。硬盤控制器命令長度為7 B。其中前6 B為參數(shù),最后1 B為命令碼[3]!
讀命令的執(zhí)行 在硬盤驅(qū)動(dòng)器空閑的情況下,TMS320F206把操作碼發(fā)送到命令寄存器中,然后等待硬盤驅(qū)動(dòng)器發(fā)出的DRQ數(shù)據(jù)請求信號(hào),檢測到DRQ后,將DIOR和IOCS16信號(hào)置低,檢測IORDY信號(hào)是否有效,如09有效,則從數(shù)據(jù)線上讀取當(dāng)前數(shù)據(jù),然后繼續(xù)檢測IORDY信號(hào),再讀數(shù)據(jù),直到請求扇區(qū)的所有數(shù)據(jù)讀取完畢。
寫命令同讀命令類似,只是在檢測到IORDY命令后將要寫入的數(shù)據(jù)送到數(shù)據(jù)線上。
5 本設(shè)計(jì)中的幾點(diǎn)技術(shù)細(xì)節(jié)
(1)由于FAT中的所有數(shù)據(jù)的組織都是低位在前、高位在后,而DSP系統(tǒng)中處理數(shù)據(jù)恰好相反,所以在向硬盤讀取數(shù)據(jù)之后和寫入數(shù)據(jù)之前要進(jìn)行高低位的轉(zhuǎn)換。
(2)雖然在FAT32的FAT中每個(gè)簇號(hào)都是由4 B共32位來表示,但是真正有效的只是低28位,所以在進(jìn)行簇號(hào)判斷之前最好先屏蔽高4位。
(3)由于讀取硬盤數(shù)據(jù)的最小單位是扇區(qū),所以文中提到的提取某字節(jié)的內(nèi)容時(shí),要先將該字節(jié)所在扇區(qū)讀入,再取其內(nèi)容。
以上幾點(diǎn)技術(shù)細(xì)節(jié)是筆者在實(shí)驗(yàn)中的體會(huì),在程序設(shè)計(jì)中這幾點(diǎn)不容忽視,否則會(huì)造成判斷錯(cuò)誤或程序繁瑣。
6 結(jié)語
本設(shè)計(jì)實(shí)現(xiàn)了DSP芯片基于FAT32對(duì)IDE硬盤的文件操作,使得硬盤作為大數(shù)據(jù)量的存儲(chǔ)器件運(yùn)用到嵌入式系統(tǒng)并且實(shí)現(xiàn)了同PC機(jī)之間的數(shù)據(jù)兼容。由于建立文件系統(tǒng)的工作由Windows系統(tǒng)完成,所以大大減少了DSP芯片的工作量,主程序采用子程序調(diào)用的模式,使得程序結(jié)構(gòu)簡單且易于維護(hù)。
<--→參考文獻(xiàn)CH(開始)-->
參考文獻(xiàn)
[1]FAT:GeneraloverviewofOn-disk format[M].Microsoft Corporation,1999:8-25.
[2]李剛.TMS320F206 DSP結(jié)構(gòu)、原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2002.
[3][德]Friedhelm Schmidt.SCSI總線和IDE接口:協(xié)議、應(yīng)用和編程[M].北京:中國電力出版社,2001.
[1]





