<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于OHCI的嵌入式USB主機控制器接口實現(xiàn)

          基于OHCI的嵌入式USB主機控制器接口實現(xiàn)

          作者: 時間:2012-06-27 來源:網(wǎng)絡 收藏

          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 工作狀態(tài)

          }ohci_t;

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

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

          4 試驗實例

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

          5 結束語

          主機控制器是USB 主機系統(tǒng)的硬件核心,主機控制器驅動則是USB 系統(tǒng)軟件的最底層實 現(xiàn)。依據(jù)在USB 協(xié)議底層的主機開發(fā)的實踐,詳細介紹了 的主機控制器的規(guī) 范,列舉了所構建的數(shù)據(jù)結構以及函數(shù),了獨立于操作系統(tǒng)的HCD。

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

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

          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();