新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 采用單片無操作系統的 USB 主機控制器接口設計

        采用單片無操作系統的 USB 主機控制器接口設計

        作者: 時間:2012-04-03 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/149293.htm

        3.3 HCD 的數據管理

        HCD 的主要功能是完成對HC 的驅動,包括對的硬件初始化和控制管理, 并與HC 合作完成 各種事務處理。它將各種要傳輸的數據TD 鏈入相應的ED 并啟動 HC 進行傳輸,HC 把接收的數據存入相應的TD,HCD 則將這些結果返回給D 層,此 外HCD 還完成對HC 的配置和驅動等操作。由于對可重用性考慮和便于對HC 的管理,首 先定義了一個OHCI 的數據結構,通過這個數據結構來對和各種傳輸類型的數據 進行管理。該結構體具體如下:

        typedef struct ohci{

        struct root_hub rh;//根集線器的結構體

        struct ohci_hcca *hcca;//HCCA 結構體

        struct ohci_regs *regs;//OHCI 操作寄存器結構體

        struct usb_device *dev;// 設備

        U32 hc_control;//控制寄存器的copy

        int ohci_int_load[32]; //32 個中斷鏈使用

        ed_t *ed_rm_list[2]; //指向移除的ED 鏈

        ed_t *ed_bulktail; //批量傳輸ED 的鏈尾

        ed_t *ed_controltail; //控制傳輸ED 的鏈尾

        U32 status;//HC 工作狀態

        }ohci_t;

        OHCI 規范中定義了4 個鏈表:控制傳輸數據鏈表,批量傳輸數據鏈表,完成數據鏈表 和周期性數據鏈表,其中除了完成數據鏈表是一維鏈表外,其他的鏈表都是二維鏈表(如圖 2 所示),主要由數據結構TD 和ED 組成。硬件通過寄存器訪問每個鏈表來得到相關的USB 數據包,并將其發送到USB 總線上。主機控制器驅動程序則根據實際的數據傳 輸需要,構建相應的ED 并將要傳輸的數據轉為TD 格式,所有的同類型ED 被連接在一起, 而TD 表述才是最終要在USB 總線上傳輸的數據包,同時屬于同一個USB 設備端點的TD 被鏈接在一起,并掛在相應的ED 上。

        當主機控制器完成鏈接在相關鏈表上的TD 后,會將該TD 從相應的鏈表上取下,并鏈 接到完成數據鏈表上。主機控制器驅動程序則通過對該鏈表的訪問來獲得已經傳輸完成的數 據包。此時HCD 可以將這些返回的數據放入到相應的URB 中,由USBD 向上層傳輸。

        4 試驗實例

        由USBD 層初始化URB 結構,并通過HCD 的函數ohci_submit_urb()傳遞給HCD 層。通過在S3C2410 實驗平臺上的實驗表明主機控制器驅動程序能夠很好的向USBD 層提 供服務并管理HC。

        5 結束語

        主機控制器是USB 主機系統的硬件核心,主機控制器驅動則是USB 系統軟件的最底層實 現。依據在USB 協議底層的主機開發的實踐,詳細介紹了基于OHCI 的主機控制器的規 范,列舉了所構建的數據結構以及函數,實現了獨立于的HCD。

        本文作者創新點:實現了嵌入式系統中OHCI 的主機控制器驅動,對整個USB 協議棧采 用模塊化分層,開發的HCD 獨立于,適合于無系統的USB 主機。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿巴嘎旗| 出国| 田东县| 蛟河市| 介休市| 奎屯市| 隆昌县| 普兰县| 呼玛县| 稻城县| 科技| 江山市| 页游| 正定县| 柳河县| 宣化县| 吕梁市| 大石桥市| 海伦市| 韩城市| 安塞县| 龙山县| 淮北市| 孟连| 奉节县| 卓资县| 平乐县| 大城县| 宜阳县| 曲阳县| 鄱阳县| 怀柔区| 松阳县| 哈密市| 阿荣旗| 龙泉市| 瑞昌市| 安阳市| 普宁市| 德江县| 蒙山县|