基于USB-Host的大容量數據采集系統(tǒng)的設計
引言
隨著移動數據存儲領域的日益擴大,在嵌入式系統(tǒng)中實現(xiàn)usb主機功能,以實現(xiàn)利用usb存儲設備進行數據存儲的需求變得日益迫切。u盤作為新型移動存儲設備,以體積小、速度高、抗震動、通用性強的特點倍受青睞,因此,在數據采集系統(tǒng)中開發(fā)出嵌入式usb主機控制u盤作為數據存儲器,將具有良好的實用價值和應用前景。
1 usb大容量存儲設備協(xié)議分析
基于usb的大容量數據采集系統(tǒng)的設計,主要是要實現(xiàn)嵌入式usb-host。要想設計出能直接讀寫u盤的嵌入式usb-host,就必須理解usb大容量存儲設備協(xié)議。目前usb大容量存儲設備軟件結構如圖1所示。
圖1 usb大容量存儲設備軟件結構示意圖 圖1中,虛線左邊部分是主機的驅動程序結構,也是嵌入式usb-host所要實現(xiàn)的。左邊最頂層是fat文件系統(tǒng)層api,用于提供給用戶訪問存儲設備的方法。
u盤中的數據都是以文件格式存儲的,fat16因具有高度兼容性而被廣泛應用于移動存儲設備中。這里簡要分析一下fat16文件系統(tǒng)結構和存儲空間的組織原則。
(1)fat16文件系統(tǒng)結構
fat格式的磁盤大致可以分5個部分:mbr區(qū)、dbr區(qū)、fat區(qū)、fdt區(qū)和data區(qū)。
mbr區(qū):又稱主引導記錄,其后為64字節(jié)的dpt(disk partition table,磁盤分區(qū)表)。由于不需要從u盤啟動,且u盤就一個分區(qū),所以u盤上沒有這個數據區(qū)。
dbr區(qū):即操作系統(tǒng)引導記錄區(qū),通常占用分區(qū)的第o扇區(qū),共512字節(jié),由跳轉指令、bpb、結束標志幾部分組成。
fat區(qū):存放文件分配表。文件分配表是一一對應于數據區(qū)簇號的列表,反映了所有簇的使用情況。每個表項單元的大小決定了fat的類型,比如fat16的表項單元為16位。fat表一般都有一個備份。
fdt區(qū):存放著文件目錄表,位于備份fat表之后。fdt由32位的目錄項線性構成,記錄著根目錄下每個文件(子目錄)的起始單元、屬性等。fdt大小為32個扇區(qū),最多可以保存512個目錄項。
data區(qū):是真正意義上的數據存儲的地方,位于fdt之后,占據硬盤上的大部分數據空間。
(2)fat16的存儲空間組織原則
當磁盤空間格式化為fat分區(qū)時,fat文件系統(tǒng)就將這個分區(qū)當成整塊可分配的區(qū)域進行規(guī)劃,以便數據的存儲。fat將磁盤空間以一定數目的扇區(qū)為單位進行劃分,這樣的單位稱為簇。通常情況下,每扇區(qū)512字節(jié)的原則是不變的。簇的大小一般是2n(n為整數)個扇區(qū)的大小(每個簇的最大存儲空間為32
kb)。一般采用邏輯塊lba(logical block addressing)尋址方式。
圖1虛線左邊中間的ufi/ata驅動層將應用程序的訪問轉換成ufi或ata命令/數據格式,與外部存儲設備之間按照子規(guī)范ufi或ata的定義進行命令/狀態(tài)/數據的交換;最底層則是usb傳輸驅動,負責將上層的ufi/ata數據發(fā)送到usb總線上以及接收從存儲設備返回的狀態(tài)/數據。cbi/bulk-only/ata/ufi是usb
mass storage類規(guī)范中4個獨立的子類規(guī)范的簡稱。前兩個子規(guī)范定義了數據/命令/狀態(tài)在usb上的傳輸方法。bulk-only傳輸規(guī)范僅使用bulk端點傳送數據/命令/狀態(tài),cbi傳輸規(guī)范則使用control/bulk/interrupt三種類型的端點進行數據/命令/狀態(tài)傳送。后兩個子規(guī)范則定義了存儲介質的操作命令。ata命令規(guī)范用于硬盤,ufi命令規(guī)范是針對usb移動存儲而制定的。
2 嵌入式usb-host設計
2.1 硬件設計
系統(tǒng)采用增強型8051內核的單片機stc89c516rd+作為中央處理芯片,選用南京沁恒電子公司的ch375s作為usb主機控制芯片。
stc89c516rd+具有64 kb的flash程序存儲器,1280字節(jié)的ram(256字節(jié)的內部ram和1kb的外部ram),支持在系統(tǒng)/在應用可編程(isp,iap);ch375s是一款符合usb1.1協(xié)議規(guī)范的usb總線的通用接口芯片,支持usb-host主機方式和usb-device/slave設備方式。ch375s具有8位數據總線和讀、寫、片選控制線以及中斷輸出,因此ch375s作全速usb-host主機接口時,外圍元器件只需要晶振和電容,就可以方便地掛接到單片機/dsp/mcu/mpu等控制器的系統(tǒng)總線上??紤]到讀/寫u盤或移動硬盤時一般都是以扇區(qū)模式進行的,所以要加磁盤數據緩沖區(qū)和文件數據緩沖區(qū)(都是512字節(jié)的整數倍),并且緩沖區(qū)越大,執(zhí)行的效率越高,所以外擴了32
kb的ram。
usb-host電路如圖2所示。
①創(chuàng)建文件。在fdt中申請新目錄項。
②寫文件。當寫一新文件時,需在fat表中查找未使用的簇,并將該簇號寫入文件對應目錄數據結構中的起始簇號位置。當此文件長度大于一簇時,還需在fat表中對應的起始簇號位置填入下一可用簇的簇號,直到文件的最后一簇(fat表中的相應位置填ffff)。若磁盤有備份fat,則須在備份fat表的相應位置填入正確的內容。
③刪除文件。除了將fdt中對應的目錄項置相應標志外,還要修改fat表及備份fat表。將此文件使用的簇號位置清0,表示此簇當前未被使用。
由于在fat16中子目錄被視為特殊的文件,對其操作類似于文件操作,所以不再贅述。
構建的fat16文件系統(tǒng)對用戶提供文件級api函數,如ch375_creat_file()、ch375_write_file()、ch375_delete_file()等,當執(zhí)行文件級api函數時,將調用seck_empty_cluster()尋找一個空簇、link_cluster_list()建立簇鏈、seck_sector()定位文件指針等中間函數。這些中間函數在調用ch375s專用于海量存儲設備類對應的命令,如set_usb_mode、disk_read、disk_write等。下面以創(chuàng)建adc.txt,并向其中寫入a/d采樣數據為例,其工作流程如圖3所示。
用fat16文件系統(tǒng)存儲文件時最小單元為簇。即使一個很小的文件也會占用一簇,所以,為了節(jié)約存儲空間,在圖3中將創(chuàng)建同名文件并向其中寫入數據轉換為向原文件追加數據。
3 大容量數據采集系統(tǒng)設計
利用已設計好的嵌入式usb-host搭建起大容量數據采集系統(tǒng),系統(tǒng)的框圖如圖4所示。
溫度傳感器采用ds18b20。它是單總線數字溫度傳感器,測量范圍為-55~+125℃,可編程9~12位a/d轉換精度,測溫分辨率可達o.0625℃。液晶采用tm320240eccw,它是320×240點陣液晶,顯示控制芯片是sed1335,既可以以文本模式顯示所測溫度數據,也可以自建平面坐標以曲線模式顯示溫度數據。外擴了4×5鍵盤,用于設定采集的時間間隔、時間長度;系統(tǒng)所允許的高、低溫容限;設定采集時的時間以及輸入自己想查看數據的存儲區(qū)域。鍵盤用8279管理,目的是減輕單片機的負擔。因為單片機處理溫度采集及溫度數據在液晶上顯示時已經耗去一些時間,再加上定時和不定時的讀/寫u盤,負荷已經很重了,所以鍵盤掃描與處理交給8279來做。單片機采用查詢方式查詢8279的中斷。
驅動程序包括液晶驅動、ds18820驅動和8279驅動。其中主要的工作是液晶驅動程序的編寫。液晶驅動包括初始化液晶、讀寫參數子程序、寫命令子程序、建坐標子程序、繪點子程序、漢字寫入子程序等。液晶在系統(tǒng)初始化和對u盤初始化與枚舉時顯示提示信息,在采集過程中,以曲線模式顯示溫度數據。
結語
基于ch375s實現(xiàn)的usb-host接口,其硬件結構便于在其他開發(fā)平臺上擴充,其核心的文件層協(xié)議棧采用標準的c語言編寫,具有良好的移植性。類似的基于usb的大容量數據采集方案已用于輕軌鐵路、無紙記錄儀的數據存儲系統(tǒng)中。隨著usb
otg時代的到來,基于usb的大容量數據采集將會有非常廣闊的應用前景。
評論