• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 關 閉

    新聞中心

    EEPW首頁 > 工控自動化 > 設計應用 > USB-HOST實時數據采集嵌入式模塊的實現

    USB-HOST實時數據采集嵌入式模塊的實現

    作者: 時間:2005-04-10 來源:網絡 收藏

    摘要:提出利用SL811HS和8位單片機實現USB-Host。該系統的數據傳輸,遵守大規模存儲協議和USB 1.1協議規范,可作為嵌入式設備的數據輸入輸出模塊。它以文件的形式,與Slave端的USB移動存儲器進行數據傳輸。

    關鍵詞:SL811HS 大規模存儲協議 USB1.1

    引言

    隨著數據采集系統、工控行業和嵌入式用戶對移動存儲的需求越來越大,傳統的通過軟盤、串行口(RS232/RS485)或以太網等傳輸數據的方式已不能滿足當前數據存儲和交換的需求。如何在中實現USB移動存儲已成為急需解決的問題。

    本文提出利用SL811HS和8位單片機實現的一種方案。它帶有標準USB數據總線接口,完全遵守USB 1.1協議和大規模存儲協議規范。移動存儲設備的文件操作方式支持FAT16文件系統。

    1 嵌入式模塊原理

    USB技術規范將使用USB進行數據傳輸的雙方劃分為兩種角色――Host和Slave,并且規定,數據傳輸只能發生在Host和Slave之間。目前,絕大多數Host功能角色被集成在各種類型的PC機上,如筆記本電腦、臺式機、Mac機及服務器等;而各種各樣的基本USB的移動設備都集成了USB Slave功能角色,例如U盤、帶USB接口的數碼相機等。這樣,就導致這些作為USB Slave的USB接口的數字設備中的數據,離開PC機無法讀寫。解決這一問題的根本辦法就是在需要使用USB設備的系統中集成USB Host功能模塊,使之具有與USB Slave設備進行數據傳輸的能力。

    利用SL811HS和8位單片機實現的系統完成了USB Host功能,并且提供了USB總線的接口方式。它可以作為一個數據接口模塊集成到用戶的嵌入式系統中,使用戶系統能夠讀/寫作為Slave的USB移動存儲器,從而完成數據存儲和交換功能。由于它支持FAT16文件系統,所以可以將用戶系統發來的數據以文件的方式存儲到USB移動存儲器中,因此,用戶可以在需要時,將USB移動存儲器取出,并拿到自己數據處理中心的PC機,直接將采集到的數據進行分析,極大地方便了用戶數據的采集和處理。其原理如圖1所示。

    2 SL811HS芯片介紹

    Cypress公司提供的USB嵌入式主控制器芯片SL811HS具有標準的微處理器總線接口,可以提供全速(12Mb/s)和低速(1.5Mb/s)USB數據轉換。圖2為SL811HS主從控制功能模塊。

    它具有以下功能:

    ①自動檢測全速或低速設備;

    ②8位雙向數據輸出端口;

    ③集成芯片的串行接口驅動和USB接收;

    ④256字節內部SRAM緩存,乒乓處理;

    ⑤自動生成內部幀同步和CRC5/16校驗;

    ⑥自動地址增益模式,可以節省存儲器讀寫周期。

    3 硬件電路設計

    圖3為SL81HS電路設計圖,在實際項目中已經得到了應用。

    其中AD0~AD7、CS、RD、WR均與單片機89C51相連,由單片機進行控制。雖然SL811HS可以使用12MHz晶振,然而在實際使用過程中發現,當晶振質量不太好時,電路穩定性較差,故建議在條件許可的情況下,盡量使用48MHz的有源晶振。

    4 SL811HS的工作過程

    ①通過SL811HS向從機發送數據過程。接收數據過程同發送數據過程類似。

    ②通過SL811HS向從機發送數據的Ping-Pong方式的實現。若有大量的數據(如以512字節為最小單位的扇區寫操作)需要傳送,就要考慮到Ping-Pong傳送。其具體過程為:

    *向BUFFER中同時寫入2個幀;

    *發出第1個幀;

    *等待確認信息;

    *收到確認信息后發出第2個幀,在第1個幀的位置上填充第3個幀,同時開始等待確認信息。

    Ping-Pong方式利用等待的時隙,填充BUFFER,可以極大提高系統的性能,在不改變其它條件的情況下,提高速度。

    5 大規模存儲過程

    大規模存儲是CPU和移動存儲設備打交道的接口程序,通過調用大規模存儲程序,可以得知移動存儲設備文件分區表中的DBR、FAT表、文件目錄表等的起始位置,并且可以獲得移動存儲設備某些地址區間的一系列數值。Windows系統可以自動支持大規模存儲協議,使主機可以自如訪問移動存儲設備;然而在單獨開發此嵌入式模塊時,大規模存儲協議須自己編寫。

    下面為通過大規模存儲協議訪問移動存儲設備的部分程序。

    if(!SPC_RequestSense()) return FLASE;

    //轉換數據狀態到主機

    if(!SPC_TestUnit()) returnFALSE; //檢測UFI設備狀態

    if(!RBC_ReadCapacity()) return FLASE; //主機讀取的最大容量

    if(!RBC_Read(0x0,1,DBUF)) return FLASE;//主機讀0x0開始的一個數據塊到DBUF

    //以上為大規模存儲的各個命令塊,運行成功,則繼續。

    if(DBUF[0]==0xeb||DBUF[0]==0xe9)

    DeviceInfo.StartSector=0;

    Else

    DeviceInfo.SartSector=SwapINT32(pMBR->StartSector);

    pBPB=(PBPB_BLOCK)DBUF; //引導扇區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;

    /*以上為各個部分存儲位置即每扇區字節數、每簇扇區數、FAT表起始扇區、根目標起始扇區、數據區起始扇區等。*/

    6 系統的整個工作流程

    通過單片機定時器0檢測設備狀態,如果發現從設備接入,則觸發外部中斷0。當從設備發現后,通過SL811HS進行設備枚舉,設置設備地址、數據描述和配置,然后通過大規模存儲協議訪問從設備文件系統。發讀或寫命令,對從設備進行讀寫,最后反饋響應碼。

    7 總結

    本文描述了SL811HS芯片和大規模存儲協議的應用,介紹了基于8位單片機實現USB-HOST的整個過程。此系統已經過試驗,能夠完成對從設備的直接讀寫數據,查看從設備目標及從設備剩余存儲空間等一系列操作,穩定性較強;可廣泛地應用于數據采集系統、工控行業等領域,具有一定的實用價值。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 荆门市| 工布江达县| 琼结县| 枞阳县| 莎车县| 萍乡市| 佛山市| 深泽县| 崇信县| 小金县| 女性| 澳门| 广丰县| 邵阳市| 安丘市| 新河县| 庄浪县| 青州市| 石林| 陇川县| 天祝| 沂水县| 景德镇市| 宕昌县| 溧水县| 长子县| 江津市| 安吉县| 阳江市| 建德市| 金塔县| 广德县| 常州市| 木兰县| 吉安市| 绥芬河市| 平远县| 方山县| 嘉义市| 沙河市| 元氏县|