USB-HOST實時數(shù)據(jù)采集嵌入式模塊的實現(xiàn)
摘要:提出利用SL811HS和8位單片機實現(xiàn)USB-Host實時數(shù)據(jù)采集嵌入式模塊。該系統(tǒng)的數(shù)據(jù)傳輸,遵守大規(guī)模存儲協(xié)議和USB 1.1協(xié)議規(guī)范,可作為嵌入式設備的數(shù)據(jù)輸入輸出模塊。它以文件的形式,與Slave端的USB移動存儲器進行數(shù)據(jù)傳輸。
關鍵詞:SL811HS USB-HOST 大規(guī)模存儲協(xié)議 USB1.1
引言
隨著數(shù)據(jù)采集系統(tǒng)、工控行業(yè)和嵌入式用戶對移動存儲的需求越來越大,傳統(tǒng)的通過軟盤、串行口(RS232/RS485)或以太網(wǎng)等傳輸數(shù)據(jù)的方式已不能滿足當前數(shù)據(jù)存儲和交換的需求。如何在嵌入式模塊中實現(xiàn)USB移動存儲已成為急需解決的問題。
本文提出利用SL811HS和8位單片機實現(xiàn)USB-HOST嵌入式模塊的一種方案。它帶有標準USB數(shù)據(jù)總線接口,完全遵守USB 1.1協(xié)議和大規(guī)模存儲協(xié)議規(guī)范。移動存儲設備的文件操作方式支持FAT16文件系統(tǒng)。
1 USB-HOST嵌入式模塊原理
USB技術規(guī)范將使用USB進行數(shù)據(jù)傳輸?shù)碾p方劃分為兩種角色――Host和Slave,并且規(guī)定,數(shù)據(jù)傳輸只能發(fā)生在Host和Slave之間。目前,絕大多數(shù)Host功能角色被集成在各種類型的PC機上,如筆記本電腦、臺式機、Mac機及服務器等;而各種各樣的基本USB的移動設備都集成了USB Slave功能角色,例如U盤、帶USB接口的數(shù)碼相機等。這樣,就導致這些作為USB Slave的USB接口的數(shù)字設備中的數(shù)據(jù),離開PC機無法讀寫。解決這一問題的根本辦法就是在需要使用USB設備的系統(tǒng)中集成USB Host功能模塊,使之具有與USB Slave設備進行數(shù)據(jù)傳輸?shù)哪芰Α?/P>
利用SL811HS和8位單片機實現(xiàn)的系統(tǒng)完成了USB Host功能,并且提供了USB總線的接口方式。它可以作為一個數(shù)據(jù)接口模塊集成到用戶的嵌入式系統(tǒng)中,使用戶系統(tǒng)能夠讀/寫作為Slave的USB移動存儲器,從而完成數(shù)據(jù)存儲和交換功能。由于它支持FAT16文件系統(tǒng),所以可以將用戶系統(tǒng)發(fā)來的數(shù)據(jù)以文件的方式存儲到USB移動存儲器中,因此,用戶可以在需要時,將USB移動存儲器取出,并拿到自己數(shù)據(jù)處理中心的PC機,直接將采集到的數(shù)據(jù)進行分析,極大地方便了用戶數(shù)據(jù)的采集和處理。其原理如圖1所示。
2 SL811HS芯片介紹
Cypress公司提供的USB嵌入式主控制器芯片SL811HS具有標準的微處理器總線接口,可以提供全速(12Mb/s)和低速(1.5Mb/s)USB數(shù)據(jù)轉換。圖2為SL811HS主從控制功能模塊。
它具有以下功能:
①自動檢測全速或低速設備;
②8位雙向數(shù)據(jù)輸出端口;
③集成芯片的串行接口驅動和USB接收;
④256字節(jié)內部SRAM緩存,乒乓處理;
⑤自動生成內部幀同步和CRC5/16校驗;
⑥自動地址增益模式,可以節(jié)省存儲器讀寫周期。
3 硬件電路設計
圖3為SL81HS電路設計圖,在實際項目中已經(jīng)得到了應用。
其中AD0~AD7、CS、RD、WR均與單片機89C51相連,由單片機進行控制。雖然SL811HS可以使用12MHz晶振,然而在實際使用過程中發(fā)現(xiàn),當晶振質量不太好時,電路穩(wěn)定性較差,故建議在條件許可的情況下,盡量使用48MHz的有源晶振。
4 SL811HS的工作過程
①通過SL811HS向從機發(fā)送數(shù)據(jù)過程。接收數(shù)據(jù)過程同發(fā)送數(shù)據(jù)過程類似。
②通過SL811HS向從機發(fā)送數(shù)據(jù)的Ping-Pong方式的實現(xiàn)。若有大量的數(shù)據(jù)(如以512字節(jié)為最小單位的扇區(qū)寫操作)需要傳送,就要考慮到Ping-Pong傳送。其具體過程為:
*向BUFFER中同時寫入2個幀;
*發(fā)出第1個幀;
*等待確認信息;
*收到確認信息后發(fā)出第2個幀,在第1個幀的位置上填充第3個幀,同時開始等待確認信息。
Ping-Pong方式利用等待的時隙,填充BUFFER,可以極大提高系統(tǒng)的性能,在不改變其它條件的情況下,提高速度。
5 大規(guī)模存儲過程
大規(guī)模存儲是CPU和移動存儲設備打交道的接口程序,通過調用大規(guī)模存儲程序,可以得知移動存儲設備文件分區(qū)表中的DBR、FAT表、文件目錄表等的起始位置,并且可以獲得移動存儲設備某些地址區(qū)間的一系列數(shù)值。Windows系統(tǒng)可以自動支持大規(guī)模存儲協(xié)議,使主機可以自如訪問移動存儲設備;然而在單獨開發(fā)此嵌入式模塊時,大規(guī)模存儲協(xié)議須自己編寫。
下面為通過大規(guī)模存儲協(xié)議訪問移動存儲設備的部分程序。
if(!SPC_RequestSense()) return FLASE;
//轉換數(shù)據(jù)狀態(tài)到主機
if(!SPC_TestUnit()) returnFALSE; //檢測UFI設備狀態(tài)
if(!RBC_ReadCapacity()) return FLASE; //主機讀取的最大容量
if(!RBC_Read(0x0,1,DBUF)) return FLASE;//主機讀0x0開始的一個數(shù)據(jù)塊到DBUF
//以上為大規(guī)模存儲的各個命令塊,運行成功,則繼續(xù)。
if(DBUF[0]==0xeb||DBUF[0]==0xe9)
DeviceInfo.StartSector=0;
Else
DeviceInfo.SartSector=SwapINT32(pMBR->StartSector);
pBPB=(PBPB_BLOCK)DBUF; //引導扇區(qū)DBR的BRB塊定義
if(!RBC_Read(DeviceInfo.StartSector,1,DBUF)) return FLASE;
DeviceInfo.BPB_BytesPerSec=SwapINT16(pBPB->BPB_BytesPerSec);
DeviceInfo.PBP_SecPerClus=pBPB->BPB_SecPerClus;
DeviceInfo.BPB_NumFATs=pBPB->BPB_NumFATs;
DeviceInfo.BPB_RootEntCnt=SwapINT16(pBPB->BPB_RootEntCnt);
DeviceInfo.BPB_TotSec16=SwapINT16(pBPB->BPB_TotSec16);
DeviceInfo.BPB_FATSz16=SwapINT16(pBPB->BPB_FATSz16);
DeviceInfo.BPB_TotSec32=SwapINT32(pBPB->BPB_TotSec32);
SeviceInfo.FatStartSector=DeviceInfo.StartSector+1;
SeviceInfo.RootStartSector=DeviceInfo.StartSector+2*DeviceInfo.BPB_FATSz16+1;
DeviceInfo.FirstDataSector=DeviceInfo.FatStartSector+2*DeviceInfo.BPB_FATSz16+32;
/*以上為各個部分存儲位置即每扇區(qū)字節(jié)數(shù)、每簇扇區(qū)數(shù)、FAT表起始扇區(qū)、根目標起始扇區(qū)、數(shù)據(jù)區(qū)起始扇區(qū)等。*/
6 系統(tǒng)的整個工作流程
通過單片機定時器0檢測設備狀態(tài),如果發(fā)現(xiàn)從設備接入,則觸發(fā)外部中斷0。當從設備發(fā)現(xiàn)后,通過SL811HS進行設備枚舉,設置設備地址、數(shù)據(jù)描述和配置,然后通過大規(guī)模存儲協(xié)議訪問從設備文件系統(tǒng)。發(fā)讀或寫命令,對從設備進行讀寫,最后反饋響應碼。
7 總結
本文描述了SL811HS芯片和大規(guī)模存儲協(xié)議的應用,介紹了基于8位單片機實現(xiàn)USB-HOST的整個過程。此系統(tǒng)已經(jīng)過試驗,能夠完成對從設備的直接讀寫數(shù)據(jù),查看從設備目標及從設備剩余存儲空間等一系列操作,穩(wěn)定性較強;可廣泛地應用于數(shù)據(jù)采集系統(tǒng)、工控行業(yè)等領域,具有一定的實用價值。
評論