<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > USB主機控制器的設計

USB主機控制器的設計

作者: 時(shí)間:2010-04-02 來(lái)源:網(wǎng)絡(luò ) 收藏

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

本文引用地址:http://dyxdggzs.com/article/202547.htm

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


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


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



關(guān)鍵詞: USB 主機控制器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>