• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于OHCI的嵌入式USB主機控制器接口實現

    基于OHCI的嵌入式USB主機控制器接口實現

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

    typedef struct ohci{

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

    struct ohci_hcca *hcca;//HCCA 結構體

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

    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;

    規范中定義了4 個鏈表:控制傳輸數據鏈表,批量傳輸數據鏈表,完成數據鏈表 和周期性數據鏈表,其中除了完成數據鏈表是一維鏈表外,其他的鏈表都是二維鏈表(如圖 2 所示),主要由數據結構TD 和ED 組成。硬件通過寄存器訪問每個鏈表來得到相關的 數據包,并將其發送到 總線上。驅動程序則根據實際的數據傳 輸需要,構建相應的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 協議底層的主機開發的實踐,詳細介紹了 的主機控制器的規 范,列舉了所構建的數據結構以及函數,了獨立于操作系統的HCD。

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

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

    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 若尔盖县| 吉木萨尔县| 永城市| 敦煌市| 卓尼县| 合江县| 米林县| 永福县| 安徽省| 日照市| 尤溪县| 云梦县| 永安市| 岢岚县| 富锦市| 布尔津县| 通许县| 沭阳县| 合水县| 琼海市| 嘉禾县| 土默特右旗| 太白县| 高阳县| 靖西县| 周宁县| 同仁县| 安远县| 高雄市| 商洛市| 酒泉市| 澄城县| 札达县| 东方市| 弋阳县| 五指山市| 遵义市| 阿巴嘎旗| 巴青县| 民和| 惠州市|