隨著(zhù)移動(dòng)數據存儲領(lǐng)域的日益擴大,在嵌入式系統中實(shí)現USB主機功能,以實(shí)現利用USB存儲設備進(jìn)行數據存儲的需求變得日益迫切。U盤(pán)作為新型移動(dòng)存儲設備,以體積小、速度高、抗震動(dòng)、通用性強的特點(diǎn)倍受青睞,因此,在數據采集系統中開(kāi)發(fā)出嵌入式USB主機控制U盤(pán)作為數據存儲器,將具有良好的實(shí)用價(jià)值和應用前景。 1 USB大容量存儲設備協(xié)議分析 基于USB的大容量數據采集系統的設計,主要是要實(shí)現嵌入式USBHost。要想設計出能直接讀寫(xiě)U盤(pán)的嵌入式USBHost,就必須理解USB大容量存儲設備協(xié)議。目前USB大容量存儲設備軟件結構如圖1所示。 圖1 USB大容量存儲設備軟件結構示意圖 圖1中,虛線(xiàn)左邊部分是主機的驅動(dòng)程序結構,也是嵌入式USBHost所要實(shí)現的。左邊最頂層是FAT文件系統層API ,用于提供給用戶(hù)訪(fǎng)問(wèn)存儲設備的方法。U盤(pán)中的數據都是以文件格式存儲的,FAT16因具有高度兼容性而被廣泛應用于移動(dòng)存儲設備中。這里簡(jiǎn)要分析一下FAT16文件系統結構和存儲空間的組織原則。 (1) FAT16文件系統結構 FAT格式的磁盤(pán)大致可以分5個(gè)部分:MBR區、DBR區、FAT區、FDT區和DATA區。 MBR區: 又稱(chēng)主引導記錄,其后為64字節的DPT(Disk Partition Table,磁盤(pán)分區表)。由于不需要從U盤(pán)啟動(dòng),且U盤(pán)就一個(gè)分區,所以U盤(pán)上沒(méi)有這個(gè)數據區。 DBR區: 即操作系統引導記錄區,通常占用分區的第0扇區,共512字節,由跳轉指令、BPB、結束標志幾部分組成。 FAT 區: 存放文件分配表。文件分配表是一一對應于數據區簇號的列表,反映了所有簇的使用情況。每個(gè)表項單元的大小決定了FAT的類(lèi)型,比如FAT16的表項單元為16位。FAT表一般都有一個(gè)備份。 FDT區: 存放著(zhù)文件目錄表,位于備份FAT表之后。FDT由32位的目錄項線(xiàn)性構成,記錄著(zhù)根目錄下每個(gè)文件(子目錄)的起始單元、屬性等。FDT大小為32個(gè)扇區,最多可以保存512個(gè)目錄項。 DATA區: 是真正意義上的數據存儲的地方,位于FDT之后,占據硬盤(pán)上的大部分數據空間。 (2) FAT16的存儲空間組織原則 當磁盤(pán)空間格式化為FAT分區時(shí),FAT文件系統就將這個(gè)分區當成整塊可分配的區域進(jìn)行規劃,以便數據的存儲。FAT將磁盤(pán)空間以一定數目的扇區為單位進(jìn)行劃分,這樣的單位稱(chēng)為簇。通常情況下,每扇區512字節的原則是不變的。簇的大小一般是2n(n為整數)個(gè)扇區的大。總(gè)簇的最大存儲空間為32 KB)。一般采用邏輯塊LBA(Logical Block Addressing)尋址方式。 圖1虛線(xiàn)左邊中間的UFI/ATA驅動(dòng)層將應用程序的訪(fǎng)問(wèn)轉換成UFI或ATA命令/數據格式,與外部存儲設備之間按照子規范UFI或ATA的定義進(jìn)行命令/狀態(tài)/數據的交換;最底層則是USB傳輸驅動(dòng),負責將上層的UFI/ATA數據發(fā)送到USB總線(xiàn)上以及接收從存儲設備返回的狀態(tài)/數據。CBI/BulkOnly/ATA/UFI是USB Mass Storage類(lèi)規范中4個(gè)獨立的子類(lèi)規范的簡(jiǎn)稱(chēng)。前兩個(gè)子規范定義了數據/命令/狀態(tài)在USB上的傳輸方法。BulkOnly傳輸規范僅使用Bulk端點(diǎn)傳送數據/命令/狀態(tài),CBI傳輸規范則使用Control/Bulk/Interrupt三種類(lèi)型的端點(diǎn)進(jìn)行數據/命令/狀態(tài)傳送。后兩個(gè)子規范則定義了存儲介質(zhì)的操作命令。ATA命令規范用于硬盤(pán),UFI命令規范是針對USB移動(dòng)存儲而制定的。 2 嵌入式USB-Host設計 2.1 硬件設計 系統采用增強型8051內核的單片機STC89C516RD+作為中央處理芯片,選用南京沁恒電子公司的CH375S作為USB主機控制芯片。 STC89C516RD+具有64 KB的Flash程序存儲器,1 280字節的RAM(256字節的內部RAM和1 KB的外部RAM),支持在系統/在應用可編程(ISP,IAP);CH375S是一款符合USB1.1協(xié)議規范的USB總線(xiàn)的通用接口芯片,支持USBHost主機方式和USBDevice/Slave設備方式。CH375S具有8位數據總線(xiàn)和讀、寫(xiě)、片選控制線(xiàn)以及中斷輸出,因此CH375S作全速USBHost 主機接口時(shí),外圍元器件只需要晶振和電容,就可以方便地掛接到單片機/DSP/MCU/MPU等控制器的系統總線(xiàn)上?紤]到讀/寫(xiě)U盤(pán)或移動(dòng)硬盤(pán)時(shí)一般都是以扇區模式進(jìn)行的,所以要加磁盤(pán)數據緩沖區和文件數據緩沖區(都是512字節的整數倍),并且緩沖區越大,執行的效率越高,所以外擴了32 KB的RAM。 USB-Host電路如圖2所示。 圖2 USBHost電路框圖 在圖2中,CH375S芯片的RD和WR可以分別連接到單片機的讀選通輸出引腳和寫(xiě)選通輸出引腳。CS可以直接由單片機I/O腳驅動(dòng)。INT輸出的中斷請求是低電平有效,可以連接到單片機的中斷輸入引腳或者普通I/O 引腳;單片機可以使用中斷方式或者查詢(xún)方式獲知中斷請求。這里用中斷方式,使用單片機的INTO。 當WR為高電平并且CS和RD及A0 都為低電平時(shí),CH375S中的數據通過(guò)D7~D0輸出;當RD為高電平并且CS和WR及A0 都為低電平時(shí),D7~D0上的數據被寫(xiě)入CH375S 芯片中;當RD為高電平并且CS和WR都為低電平而A0為高電平時(shí),D7~D0上的數據被作為命令碼寫(xiě)入CH375S芯片中。 2.2 軟件設計 CH375S不僅是一個(gè)通用的USBHost 硬件接口芯片,而且還內置了控制傳輸的協(xié)議處理器和處理MassStorage海量存儲設備的專(zhuān)用通信協(xié)議固件,支持Bulk Only傳輸協(xié)議和SCSI、UFI、RBC 或等效命令集的USB 存儲設備,簡(jiǎn)化常用的控制傳輸。參考圖1,單片機程序主要是構建FAT文件系統。 設計文件系統,就是在指定的存儲介質(zhì)上,選擇一種或幾種數據組織方式,實(shí)現常用的幾個(gè)文件API函數功能,最終實(shí)現數據的按名存取。 從第一個(gè)分區數據結構的分區起始扇區數的位置讀取512字節,為DBR,包括一個(gè)引導程序和BPB參數塊。BPB參數塊記錄本分區的起始扇區、結束扇區、文件存儲格式、介質(zhì)描述符、根目錄項數、FAT個(gè)數、保留扇區數和分配單元的大小等重要參數。 根據保留扇區的數目可知FAT表的位置(分區起始扇區數+保留扇區數)。根據FAT的個(gè)數以及每個(gè)FAT表占用的扇區數,即可算出FDT的位置(FAT表位置+FAT表個(gè)數×FAT表所占扇區數)。FDT中保存著(zhù)目錄項,目錄項中的文件首簇號就是讀/寫(xiě)文件的入口。 根據以上分析,即可設計如下文件操作: ① 創(chuàng )建文件。在FDT中申請新目錄項。 ② 寫(xiě)文件。當寫(xiě)一新文件時(shí),需在FAT表中查找未使用的簇,并將該簇號寫(xiě)入文件對應目錄數據結構中的起始簇號位置。當此文件長(cháng)度大于一簇時(shí),還需在FAT表中對應的起始簇號位置填入下一可用簇的簇號,直到文件的最后一簇(FAT表中的相應位置填FFFF)。若磁盤(pán)有備份FAT,則須在備份FAT表的相應位置填入正確的內容。 ③ 刪除文件。除了將FDT中對應的目錄項置相應標志外,還要修改FAT表及備份FAT表。將此文件使用的簇號位置清 0,表示此簇當前未被使用。 由于在FAT16中子目錄被視為特殊的文件,對其操作類(lèi)似于文件操作,所以不再贅述。 構建的FAT16文件系統對用戶(hù)提供文件級API函數,如CH375_Creat_File( )、CH375_Write_File( )、CH375_Delete_File( )等,當執行文件級API函數時(shí),將調用Seck_Empty_Cluster( )尋找一個(gè)空簇、Link_Cluster_List( )建立簇鏈、Seck_Sector( )定位文件指針等中間函數。這些中間函數在調用CH375S專(zhuān)用于海量存儲設備類(lèi)對應的命令,如SET_USB_MODE、DISK_READ、 DISK_WRITE等。下面以創(chuàng )建ADC.TXT,并向其中寫(xiě)入A/D采樣數據為例,其工作流程如圖3所示。 圖3 創(chuàng )建文件并向其中寫(xiě)入數據流程 用FAT16文件系統存儲文件時(shí)最小單元為簇。即使一個(gè)很小的文件也會(huì )占用一簇,所以,為了節約存儲空間,在圖3中將創(chuàng )建同名文件并向其中寫(xiě)入數據轉換為向原文件追加數據。 3 大容量數據采集系統設計 利用已設計好的嵌入式USBHost搭建起大容量數據采集系統,系統的框圖如圖4所示。 圖4 系統硬件框圖 溫度傳感器采用DS18B20。它是單總線(xiàn)數字溫度傳感器,測量范圍為-55"+125℃,可編程9~12位A/D轉換精度,測溫分辨率可達0.062 5℃。液晶采用TM320240ECCW,它是320×240點(diǎn)陣液晶,顯示控制芯片是SED1335,既可以以文本模式顯示所測溫度數據,也可以自建平面坐標以曲線(xiàn)模式顯示溫度數據。外擴了4×5鍵盤(pán),用于設定采集的時(shí)間間隔、時(shí)間長(cháng)度;系統所允許的高、低溫容限;設定采集時(shí)的時(shí)間以及輸入自己想查看數據的存儲區域。鍵盤(pán)用8279管理,目的是減輕單片機的負擔。因為單片機處理溫度采集及溫度數據在液晶上顯示時(shí)已經(jīng)耗去一些時(shí)間,再加上定時(shí)和不定時(shí)的讀/寫(xiě)U盤(pán),負荷已經(jīng)很重了,所以鍵盤(pán)掃描與處理交給8279來(lái)做。單片機采用查詢(xún)方式查詢(xún)8279的中斷。 驅動(dòng)程序包括液晶驅動(dòng)、DS18B20驅動(dòng)和8279驅動(dòng)。其中主要的工作是液晶驅動(dòng)程序的編寫(xiě)。液晶驅動(dòng)包括初始化液晶、讀寫(xiě)參數子程序、寫(xiě)命令子程序、建坐標子程序、繪點(diǎn)子程序、漢字寫(xiě)入子程序等。液晶在系統初始化和對U盤(pán)初始化與枚舉時(shí)顯示提示信息,在采集過(guò)程中,以曲線(xiàn)模式顯示溫度數據。 結語(yǔ) 基于CH375S實(shí)現的USBHost接口,其硬件結構便于在其他開(kāi)發(fā)平臺上擴充,其核心的文件層協(xié)議棧采用標準的C語(yǔ)言編寫(xiě),具有良好的移植性。類(lèi)似的基于USB的大容量數據采集方案已用于輕軌鐵路、無(wú)紙記錄儀的數據存儲系統中。隨著(zhù)USB OTG時(shí)代的到來(lái),基于USB的大容量數據采集將會(huì )有非常廣闊的應用前景。 |