基于USB-Host的大容量數(shù)據(jù)采集系統(tǒng)的設(shè)計
引言
隨著移動數(shù)據(jù)存儲領(lǐng)域的日益擴大,在嵌入式系統(tǒng)中實現(xiàn)USB主機功能,以實現(xiàn)利用USB存儲設(shè)備進行數(shù)據(jù)存儲的需求變得日益迫切。U盤作為新型移動存儲設(shè)備,以體積小、速度高、抗震動、通用性強的特點倍受青睞,因此,在數(shù)據(jù)采集系統(tǒng)中開發(fā)出嵌入式USB主機控制U盤作為數(shù)據(jù)存儲器,將具有良好的實用價值和應(yīng)用前景。
1 USB大容量存儲設(shè)備協(xié)議分析
基于USB的大容量數(shù)據(jù)采集系統(tǒng)的設(shè)計,主要是要實現(xiàn)嵌入式USBHost。要想設(shè)計出能直接讀寫U盤的嵌入式USBHost,就必須理解USB大容量存儲設(shè)備協(xié)議。目前USB大容量存儲設(shè)備軟件結(jié)構(gòu)如圖1所示。
圖1 USB大容量存儲設(shè)備軟件結(jié)構(gòu)示意圖
圖1中,虛線左邊部分是主機的驅(qū)動程序結(jié)構(gòu),也是嵌入式USBHost所要實現(xiàn)的。左邊最頂層是FAT文件系統(tǒng)層API ,用于提供給用戶訪問存儲設(shè)備的方法。U盤中的數(shù)據(jù)都是以文件格式存儲的,F(xiàn)AT16因具有高度兼容性而被廣泛應(yīng)用于移動存儲設(shè)備中。這里簡要分析一下FAT16文件系統(tǒng)結(jié)構(gòu)和存儲空間的組織原則。
(1) FAT16文件系統(tǒng)結(jié)構(gòu)
FAT格式的磁盤大致可以分5個部分:MBR區(qū)、DBR區(qū)、FAT區(qū)、FDT區(qū)和DATA區(qū)。
MBR區(qū): 又稱主引導(dǎo)記錄,其后為64字節(jié)的DPT(Disk Partition Table,磁盤分區(qū)表)。由于不需要從U盤啟動,且U盤就一個分區(qū),所以U盤上沒有這個數(shù)據(jù)區(qū)。
DBR區(qū): 即操作系統(tǒng)引導(dǎo)記錄區(qū),通常占用分區(qū)的第0扇區(qū),共512字節(jié),由跳轉(zhuǎn)指令、BPB、結(jié)束標志幾部分組成。
FAT 區(qū): 存放文件分配表。文件分配表是一一對應(yīng)于數(shù)據(jù)區(qū)簇號的列表,反映了所有簇的使用情況。每個表項單元的大小決定了FAT的類型,比如FAT16的表項單元為16位。FAT表一般都有一個備份。
FDT區(qū): 存放著文件目錄表,位于備份FAT表之后。FDT由32位的目錄項線性構(gòu)成,記錄著根目錄下每個文件(子目錄)的起始單元、屬性等。FDT大小為32個扇區(qū),最多可以保存512個目錄項。
DATA區(qū): 是真正意義上的數(shù)據(jù)存儲的地方,位于FDT之后,占據(jù)硬盤上的大部分數(shù)據(jù)空間。
(2) FAT16的存儲空間組織原則
當磁盤空間格式化為FAT分區(qū)時,F(xiàn)AT文件系統(tǒng)就將這個分區(qū)當成整塊可分配的區(qū)域進行規(guī)劃,以便數(shù)據(jù)的存儲。FAT將磁盤空間以一定數(shù)目的扇區(qū)為單位進行劃分,這樣的單位稱為簇。通常情況下,每扇區(qū)512字節(jié)的原則是不變的。簇的大小一般是2n(n為整數(shù))個扇區(qū)的大小(每個簇的最大存儲空間為32 KB)。一般采用邏輯塊LBA(Logical Block Addressing)尋址方式。
圖1虛線左邊中間的UFI/ATA驅(qū)動層將應(yīng)用程序的訪問轉(zhuǎn)換成UFI或ATA命令/數(shù)據(jù)格式,與外部存儲設(shè)備之間按照子規(guī)范UFI或ATA的定義進行命令/狀態(tài)/數(shù)據(jù)的交換;最底層則是USB傳輸驅(qū)動,負責(zé)將上層的UFI/ATA數(shù)據(jù)發(fā)送到USB總線上以及接收從存儲設(shè)備返回的狀態(tài)/數(shù)據(jù)。CBI/BulkOnly/ATA/UFI是USB Mass Storage類規(guī)范中4個獨立的子類規(guī)范的簡稱。前兩個子規(guī)范定義了數(shù)據(jù)/命令/狀態(tài)在USB上的傳輸方法。BulkOnly傳輸規(guī)范僅使用Bulk端點傳送數(shù)據(jù)/命令/狀態(tài),CBI傳輸規(guī)范則使用Control/Bulk/Interrupt三種類型的端點進行數(shù)據(jù)/命令/狀態(tài)傳送。后兩個子規(guī)范則定義了存儲介質(zhì)的操作命令。ATA命令規(guī)范用于硬盤,UFI命令規(guī)范是針對USB移動存儲而制定的。
2 嵌入式USB-Host設(shè)計
2.1 硬件設(shè)計
系統(tǒng)采用增強型8051內(nèi)核的單片機STC89C516RD+作為中央處理芯片,選用南京沁恒電子公司的CH375S作為USB主機控制芯片。
STC89C516RD+具有64 KB的Flash程序存儲器,1 280字節(jié)的RAM(256字節(jié)的內(nèi)部RAM和1 KB的外部RAM),支持在系統(tǒng)/在應(yīng)用可編程(ISP,IAP);CH375S是一款符合USB1.1協(xié)議規(guī)范的USB總線的通用接口芯片,支持USBHost主機方式和USBDevice/Slave設(shè)備方式。CH375S具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,因此CH375S作全速USBHost 主機接口時,外圍元器件只需要晶振和電容,就可以方便地掛接到單片機/DSP/MCU/MPU等控制器的系統(tǒng)總線上??紤]到讀/寫U盤或移動硬盤時一般都是以扇區(qū)模式進行的,所以要加磁盤數(shù)據(jù)緩沖區(qū)和文件數(shù)據(jù)緩沖區(qū)(都是512字節(jié)的整數(shù)倍),并且緩沖區(qū)越大,執(zhí)行的效率越高,所以外擴了32 KB的RAM。
USB-Host電路如圖2所示。
圖2 USBHost電路框圖
在圖2中,CH375S芯片的RD和WR可以分別連接到單片機的讀選通輸出引腳和寫選通輸出引腳。CS可以直接由單片機I/O腳驅(qū)動。INT輸出的中斷請求是低電平有效,可以連接到單片機的中斷輸入引腳或者普通I/O 引腳;單片機可以使用中斷方式或者查詢方式獲知中斷請求。這里用中斷方式,使用單片機的INTO。
當WR為高電平并且CS和RD及A0 都為低電平時,CH375S中的數(shù)據(jù)通過D7~D0輸出;當RD為高電平并且CS和WR及A0 都為低電平時,D7~D0上的數(shù)據(jù)被寫入CH375S 芯片中;當RD為高電平并且CS和WR都為低電平而A0為高電平時,D7~D0上的數(shù)據(jù)被作為命令碼寫入CH375S芯片中。
2.2 軟件設(shè)計
CH375S不僅是一個通用的USBHost 硬件接口芯片,而且還內(nèi)置了控制傳輸?shù)膮f(xié)議處理器和處理MassStorage海量存儲設(shè)備的專用通信協(xié)議固件,支持BulkOnly傳輸協(xié)議和SCSI、UFI、RBC 或等效命令集的USB 存儲設(shè)備,簡化常用的控制傳輸。參考圖1,單片機程序主要是構(gòu)建FAT文件系統(tǒng)。
設(shè)計文件系統(tǒng),就是在指定的存儲介質(zhì)上,選擇一種或幾種數(shù)據(jù)組織方式,實現(xiàn)常用的幾個文件API函數(shù)功能,最終實現(xiàn)數(shù)據(jù)的按名存取。
從第一個分區(qū)數(shù)據(jù)結(jié)構(gòu)的分區(qū)起始扇區(qū)數(shù)的位置讀取512字節(jié),為DBR,包括一個引導(dǎo)程序和BPB參數(shù)塊。BPB參數(shù)塊記錄本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲格式、介質(zhì)描述符、根目錄項數(shù)、FAT個數(shù)、保留扇區(qū)數(shù)和分配單元的大小等重要參數(shù)。
根據(jù)保留扇區(qū)的數(shù)目可知FAT表的位置(分區(qū)起始扇區(qū)數(shù)+保留扇區(qū)數(shù))。根據(jù)FAT的個數(shù)以及每個FAT表占用的扇區(qū)數(shù),即可算出FDT的位置(FAT表位置+FAT表個數(shù)
評論