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

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > USB主機控制器的設計

          USB主機控制器的設計

          作者: 時間:2010-04-02 來源:網(wǎng)絡 收藏

          ML405板上的EZ-Host控制器工作在異步模式。因此opb_epc需配置為支持異步外設模式。這里使用PowerPC控制接口,因此EZ-Host工作于協(xié)處理器模式。并通過HPI接口與外設控制器opb_epc相連。

          本文引用地址:http://www.ex-cimer.com/article/202547.htm

          3 驅(qū)動程序設計
          3.1 主機端的軟件結構
          Linux 主機驅(qū)動協(xié)議棧由3部分組成:USB驅(qū)動(HCD)、USB驅(qū)動(USBD)和各種不同的USB設備類驅(qū)動,如圖2所示。


          USB設備類驅(qū)動(如插入主機的U盤、鼠標、鍵盤等設備驅(qū)動)是最終與應用程序交互的軟件模塊,負責建立虛擬連接、配置,與設備進行通信,將數(shù)據(jù)集成一個USB請求塊(URB),然后通過USB驅(qū)動(USBD)提供的編程接口將URB發(fā)送到USBD。USBD部分是整個USB主機驅(qū)動的核心。
          USBD完成以下工作:USB設備的枚舉和配置,根據(jù)需要裝載或卸載設備驅(qū)動程序,向上為設備驅(qū)動程序提供編程接口,向下為驅(qū)動提供編程接口,實現(xiàn)與設備驅(qū)動程序、主機控制驅(qū)動程序的通信。
          處于最底層USB驅(qū)動(HCD)是USB主機直接與硬件交互的軟件模塊。HCD作為底層硬件的驅(qū)動程序,一方面控制和管理底層硬件,負責將USB事務發(fā)送給USB主機控制器,并最終將串行數(shù)據(jù)發(fā)送到電纜上;另一方面為上層的USB系統(tǒng)軟件提供統(tǒng)一接口HCI(Host ControllerInterface),將各種不同的HC映射到USB系統(tǒng)。HC一般都集成有Root Hub的功能,HCD也要實現(xiàn)Root Hub Port訪問。
          USBD部分由操作系統(tǒng)實現(xiàn),一般不需要用戶修改。USB設備類驅(qū)動,對于常用的設備Linux內(nèi)核中有較成熟的驅(qū)動。針對特定的主機控制器硬件應該實現(xiàn)HCD部分,以解決基本的通信問題。故這里主要介紹EZ-Host主機控制器驅(qū)動(HCD)的設計。
          3.2 EZ-Host主機控制器驅(qū)動(HCD)設計
          開發(fā)過程主要針對EZ-Host主機控制器編寫USB主機控制器驅(qū)動程序。該驅(qū)動程序是嵌入式Linux開發(fā)平臺下USB協(xié)議棧和EZ-Host主機控制器的一個接口,其作用類似于Linux中由Intel制定的UHCI標準,其硬件設計比較簡單,但軟件較為復雜。
          USB主機控制器的驅(qū)動(HCD)在USB子系統(tǒng)中的功能主要有:硬件初始化,為上層(USBD)提供調(diào)用接口,管理根Hub,完成數(shù)據(jù)傳輸以及中斷處理。根據(jù)主機控制器驅(qū)動(HCD)在整個USB子系統(tǒng)中的功能,可將EZ-Host HCD分為HCD接口、HCD初始化、數(shù)據(jù)傳輸、中斷處理、讀寫操作、主機協(xié)議等模塊。HCD接口模塊表現(xiàn)為一套API函數(shù),通過這一套API函數(shù)使HCD與USBD進行通信。圖3為EZ-Host主機控制器驅(qū)動模塊結構。


          1)初始化。該初到始化涉及到復位EZ-Host控制器,并將其初始化到一個已知的狀態(tài);初始化必要的USB數(shù)據(jù)結構并為其分配空間;注冊USB host driver和USB host bus interface到USB host core;注冊USB host core的中斷服務程序;為每一個主端口建立一個虛擬根Hub,并且注冊根hub到USBhost eore。2)中斷處理。EZ-Host主控制器中斷采用電平觸發(fā),當中斷服務程序注冊到USB子系統(tǒng)后,EZ-Host主控制器開始處理中斷。3)傳輸數(shù)據(jù)。傳輸處理程序在初始化的過程中注冊到USB主端子系統(tǒng),它由USB host core喚醒并配置外圍設備,發(fā)送塊數(shù)據(jù),或確認塊數(shù)據(jù)的接收。4)接收數(shù)據(jù)。接收處理程序處理數(shù)據(jù)包的接收,它由中斷處理程序喚醒。數(shù)據(jù)接收處理程序詢問EZ-Host主控制器是否有接收錯誤,如果沒有錯誤,則接收處理程序從EZ-Host主控制器的緩沖區(qū)中提取數(shù)據(jù)并將數(shù)據(jù)存儲到一個數(shù)據(jù)結構,然后接收程序?qū)?shù)據(jù)傳送到USB host eore,等待進一步處理。5)主機協(xié)議實現(xiàn)。HCD從Linux USB協(xié)議棧接收并解析USB請求,然后建立基于該請求的USB交互(transactions),該交互被合理調(diào)度安排并發(fā)送到USB總線上。
          3.3 HCD的關鍵接口設計
          實際工作過程中,應用程序通過文件系統(tǒng)接口訪問相應的USB設備類驅(qū)動程序和USBD;USB設備類驅(qū)動程序則通過USBD提供的相關接口(USBDI)將數(shù)據(jù)請求包傳遞給USBD;USBD通過HCD提供的接口(HCI)進一步將數(shù)據(jù)包傳遞給HCD;HCD最終將數(shù)據(jù)發(fā)送到USB總線。
          主機控制器驅(qū)動中,最重要的接口是主機控制器驅(qū)動HCD與USBD之間的接口。在Linux內(nèi)核中,用usb_hcd結構體表示USBD接口,用來描述主機控制器(HC)的基本信息、硬件資源、狀態(tài)描述和用于操作主機控制器的hc_driver等。其中usb_hcd中的hc_driver成員非常重要,它包括具體用于操作主機控制器的鉤子函數(shù)。在Linux內(nèi)核中,使用如下函數(shù)創(chuàng)建HCD:
          struct USB_hcd*USB_create_hcd(const stroct hc_driver*driver,struct device*dev,char*bus_name);
          struct hc_driver可看作USBD模塊定義的需要底層主機控制器驅(qū)動實現(xiàn)的接口,通過實現(xiàn)這些接口,USBD可將更上層軟件的請求傳遞給HCD以及HC,HC及HCD完成后,也會通過這些接口通知USBD。



          關鍵詞: USB 主機控制器

          評論


          相關推薦

          技術專區(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); })();