新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于LPC2132的U盤軟硬件系統設計

        基于LPC2132的U盤軟硬件系統設計

        作者: 時間:2012-08-27 來源:網絡 收藏

        為了使軟件可移植性強、易維護,采用分層的方法編寫PDIUSBDl2的驅動程序。USB驅動程序分層結構如表1所列。

        ①硬件提取層(D12HAL.c)包含最底層的函數。
        ②D12命令接口(D12CI.c)實現PDIUSBDl2的命令接口以簡化器件的編程。該層的甬數及其功能如下:
        ◇讀取芯片ID號,uintl6 D12_ReadChipID(void);
        ◇沒置地址/使能,void D12_SetAddressEnable(UINT8bAddress,UINT8 bEnable);
        ◇設置端點使能,void D12_SetEndpointEnable(UINT8 bEnablc);
        ◇設置模式,void D12_SetMode(uint8 bConfig,uint8bClkDiv)。
        ③協議層(Chap_9.c)處理標準的USB設備請求,以及特殊的廠商請求,如DMA等。USB主機通過標準USB設備請求,可設定和獲取USB設備的有關信息,完成USB設備的枚舉。
        所有的請求都是通過端點0接收和發送SETUP包來完成的。接收主機SETUP包的函數為ep0_rxdone(),所有SETUP包都由函數control_handler()來處理,發送SETUP包的函數為ep0_txdone()。SETUP包的接收和發送通過控制傳輸結構仝局變量CONTROL_XFER ControlData來控制,它實現了以上3個函數之間的通信。


        上述幾個函數及ControlData變量之問的關系如圖3所示。

        ④應用層(D12Driver.c)實現PDIUSBD12的所有功能。USB設備控制驅動、USB接口控制驅動和協議層都在應用層的控制之中。應用層要實現的仟務包括:
        ◆初始化PDIUSBDl2。包括初始化PDIUSBD12的硬件連接、復位PDIUSBDl2、配置PDIUSBD12的中斷服務程序地址、初始化應用層相關的全局變量。
        ◆編寫PDIUSBD12中斷服務程序。PDIUSBD12幾乎所有功能都是通過PDIUSBDl2中斷服務程序來完成的,因此中斷服務程序是應用層的核心部分,也是本驅動程序的核心部分。它要完成以下任務:
        ◇控制端點數據接收與發送中斷服務程序,負責處理控制傳輸的有關工作;
        ◇端點1和端點2數據接收與發送中斷服務程序;
        ◇USB總線掛起、復位、DMA結束中斷服務程序。
        ◆用戶讀寫端點1和端點2的API函數。
        ◆傳輸控制處理任務。該任務用于處理枚舉、標準任務請求、廠商請求等傳輸控制。
        2.2 Mass 的實現
        完整的Mass 需要實現如下兒部分:在枚舉時,提供Mass 描述符;實現BulkOnly批量傳輸協議;實現SCSI命令集。
        2.2.1 Mass Storage類協議描述符

        USB采用設備類的方式對設備進行管理。要讓主機識別設備,設備就必須提供正確的描述符:
        ◇設備描述符;
        ◇配置描述符;
        ◇接口描述符;
        ◇端點描述符。
        2.2.2 Bulk-Only批量傳輸協議實現
        Bulk-Only協議包括兩部分:類特定請求命令和Bulk-Only傳輸。
        (1)類特定請求命令
        ①批量傳輸的大容量存儲器復位。要發送批量傳輸的大容量存儲器復位請求,主機將在默認管道發送一個設備請求:
        ◇bmRequestType——類、接口、主機到設備;
        ◇bRequest字段設置為255(FFh);
        ◇wValue字段設置為0;
        ◇wIndex字段設置為接口編號;
        ◇wLength字段設置為O。
        批量傳輸的大容量存儲器復位請求如下:


        ②獲取最大邏輯單元號(專用類清求)。Get MaxLUN設備請求用于確定設備支持的邏輯單元編號。設備的邏輯單元編號可以從LUN為O到LUN的最大值15(Fh)。
        要發送Get Max LUN設備請求,主機應在以下默認管道發送一個設備請求:
        ◇bmRequestType——類、接口、設備到主機;
        ◇bRequest范圍設置為254(FEh);
        ◇wValue字段設置為0;
        ◇wIndex字段設置為接口編號;
        ◇wLength字段設置為1。
        獲得最大邏輯單元字如下:


        設備應返回1字節包含設備支持的最大邏輯單元數。例如,如果設備支持4個LUN,則LUN的編號應從0~3,則返回值為3。如果設備沒有相關的LUN,則返回值為0。主機不應向一個不存在的LUN發送命令塊包(CBW)。
        不支持多LUN的設備會返回STALL。
        (2)Bulk—Only傳輸
        Bulk—Only傳輸協議沒有使用中斷和控制端點,僅使用Bulk批量端點來進行命令塊、數據和命令塊狀態的傳輸。控制端點(默認)管道僅用來請求批量端點上的STALL停止的狀態和執行類特定請求命令。
        Bulk—Only傳輸的流程如圖4所示。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 香河县| 榕江县| 玛纳斯县| 萍乡市| 葫芦岛市| 禹城市| 岗巴县| 买车| 鄂尔多斯市| 镇远县| 永兴县| 当阳市| 阿拉善右旗| 宝清县| 星座| 邹城市| 宿迁市| 苗栗县| 团风县| 高陵县| 博爱县| 琼结县| 通化县| 福清市| 信阳市| 会泽县| 江口县| 梁河县| 仁布县| 民和| 务川| 定襄县| 通榆县| 阿尔山市| 正镶白旗| 阳曲县| 大姚县| 芦溪县| 迁西县| 防城港市| 崇义县|