久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

USB主機(jī)控制器的設(shè)計

 lchjczw 2012-05-22

USB具有簡單,、標(biāo)準(zhǔn)的連接方式,、支持熱插拔等諸多優(yōu)點,因此已成為流行的接口技術(shù),。USB是典型的主/從結(jié)構(gòu)的總線標(biāo)準(zhǔn),,即只有USB主機(jī)才能與USB設(shè)備連接。USB總線與計算機(jī)系統(tǒng)的接口部分是主機(jī)控制器,,它可以被看作一個硬件,、固件和軟件的綜合體。主機(jī)控制器實現(xiàn)主機(jī)與設(shè)備之間的電氣和協(xié)議層匹配,,主要包括:串并轉(zhuǎn)換,、幀起始,、數(shù)據(jù)處理、協(xié)議使用,、傳輸錯誤處理,、遠(yuǎn)程喚醒、根Hub,、主機(jī)系統(tǒng)接口等功能,。USB設(shè)備之間通過USB Hub連接,主機(jī)控制器和USB設(shè)備之間一般通過根Hub相連,。通常主機(jī)控制器提供與根Hub相關(guān)的狀態(tài)查詢和控制單元,。當(dāng)有設(shè)備插入時,在枚舉過程中,,主機(jī)控制器驅(qū)動通過查詢和控制單元應(yīng)答設(shè)備偽裝成一個Hub,,所以通常稱此Hub為虛擬根Hub。

  這里利用EDK軟件搭建一個基于PowerPC的片上系統(tǒng),,實現(xiàn)了SoPC系統(tǒng)上基于Linux的USB接口的擴(kuò)展,,使系統(tǒng)具有USB主機(jī)功能,能夠和各種USB設(shè)備進(jìn)行通信,。

1 開發(fā)環(huán)境

  目前Linux 2.6內(nèi)核中的USB支持3種主控制器接口:通用主控制器接口(UHCI),、開放控制器接口(OHCI)及增強(qiáng)主機(jī)控制接口(EHCI)。在嵌入式系統(tǒng)中,,如果處理器集成有USB主機(jī)控制器,,則可直接引出USB主控端口;而未集成USB主機(jī)控制器的處理器則需使用USB主控器件,,從總線上擴(kuò)展USB主機(jī)接口,。

  這里所采用的開發(fā)環(huán)境是Xilinx公司的ML405開發(fā)板。開發(fā)板上核心FPGA采用Xilinx的XC4VFX20-FF672器件,,其內(nèi)置1個PowerPC硬核,,2個以太網(wǎng)MAC層控制器。開發(fā)板上還帶有64 MB的DDR SDRAM,,10/100/1000以太網(wǎng)端口,、帶主機(jī)/設(shè)備端的USB接口器件(CY7C67300)等。

  EZ-Host(CY7C67300)是Cypress半導(dǎo)體公司的全速低耗多端口主機(jī)/外設(shè)控制器,,該器件可方便接至高性能CPU上完成USB主機(jī)控制器端的功能,;擁有16位RISC指令處理器,可作為協(xié)處理器使用或單獨使用,;同時支持USB的OTG協(xié)議,,擁有2個可獨立配置并各帶有2個端口的USB串行接口引擎(SIE);既可用作主機(jī),,又可用作外設(shè),,并支持多達(dá)4個主機(jī)端口,。另外,該器件擁有一個可編程I/O接口模塊,,可供各種接口編程使用,,可編程實現(xiàn)HPI、HSS,、SPI等接口模式,。當(dāng)EZ-Host控制器作為USB主機(jī)控制器時,一般采用HPI主機(jī)端接口(Host Port Interface)接口模式,。

2 硬件設(shè)計

  Xilinx公司提供一個IP核opb_epc外設(shè)控制器(external peripheral controller),,為OPB總線與外部同步或異步外圍設(shè)備之間的數(shù)據(jù)傳送提供一個通用接口,可方便實現(xiàn)處理器對于外設(shè)的控制,。一個opb_epe最多可接4個外設(shè),,且每個外設(shè)可獨立配置成同步或異步模式,其時序參數(shù)(如建立時間,、保持時間、訪問時間周期等)都可由用戶設(shè)置,。opb_epc通過OPB總線接收處理器的讀寫指令,,在相應(yīng)外設(shè)接口產(chǎn)生相應(yīng)的訪問周期,從而實現(xiàn)處理器對外圍設(shè)備的控制,。這里使用opb_epc模塊作為控制器,,實現(xiàn)PowerPC與EZ-Host的主機(jī)控制器的接口通信,嵌入式硬件系統(tǒng)架構(gòu)如圖l所示,。

 

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

3 驅(qū)動程序設(shè)計

  3.1 USB主機(jī)端的軟件結(jié)構(gòu)

  Linux USB主機(jī)驅(qū)動協(xié)議棧由3部分組成:USB主機(jī)控制器驅(qū)動(HCD),、USB驅(qū)動(USBD)和各種不同的USB設(shè)備類驅(qū)動,,如圖2所示。


   USB設(shè)備類驅(qū)動(如插入主機(jī)的U盤,、鼠標(biāo),、鍵盤等設(shè)備驅(qū)動)是最終與應(yīng)用程序交互的軟件模塊,負(fù)責(zé)建立虛擬連接,、配置,,與設(shè)備進(jìn)行通信,將數(shù)據(jù)集成一個USB請求塊(URB),,然后通過USB驅(qū)動(USBD)提供的編程接口將URB發(fā)送到USBD,。USBD部分是整個USB主機(jī)驅(qū)動的核心,。

  USBD完成以下工作:USB設(shè)備的枚舉和配置,根據(jù)需要裝載或卸載設(shè)備驅(qū)動程序,,向上為設(shè)備驅(qū)動程序提供編程接口,,向下為主機(jī)控制器驅(qū)動提供編程接口,實現(xiàn)與設(shè)備驅(qū)動程序,、主機(jī)控制驅(qū)動程序的通信,。

  處于最底層USB主機(jī)控制器驅(qū)動(HCD)是USB主機(jī)直接與硬件交互的軟件模塊。HCD作為底層硬件的驅(qū)動程序,,一方面控制和管理底層硬件,,負(fù)責(zé)將USB事務(wù)發(fā)送給USB主機(jī)控制器,并最終將串行數(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設(shè)備類驅(qū)動,,對于常用的設(shè)備Linux內(nèi)核中有較成熟的驅(qū)動。針對特定的主機(jī)控制器硬件應(yīng)該實現(xiàn)HCD部分,,以解決基本的通信問題,。故這里主要介紹EZ-Host主機(jī)控制器驅(qū)動(HCD)的設(shè)計。

  3.2 EZ-Host主機(jī)控制器驅(qū)動(HCD)設(shè)計

  開發(fā)過程主要針對EZ-Host主機(jī)控制器編寫USB主機(jī)控制器驅(qū)動程序,。該驅(qū)動程序是嵌入式Linux開發(fā)平臺下USB協(xié)議棧和EZ-Host主機(jī)控制器的一個接口,,其作用類似于Linux中由Intel制定的UHCI標(biāo)準(zhǔn),其硬件設(shè)計比較簡單,,但軟件較為復(fù)雜,。

  USB主機(jī)控制器的驅(qū)動(HCD)在USB子系統(tǒng)中的功能主要有:硬件初始化,為上層(USBD)提供調(diào)用接口,,管理根Hub,,完成數(shù)據(jù)傳輸以及中斷處理。根據(jù)主機(jī)控制器驅(qū)動(HCD)在整個USB子系統(tǒng)中的功能,,可將EZ-Host HCD分為HCD接口,、HCD初始化、數(shù)據(jù)傳輸,、中斷處理,、讀寫操作、主機(jī)協(xié)議等模塊,。HCD接口模塊表現(xiàn)為一套API函數(shù),,通過這一套API函數(shù)使HCD與USBD進(jìn)行通信,。圖3為EZ-Host主機(jī)控制器驅(qū)動模塊結(jié)構(gòu)。


  1)初始化,。該初到始化涉及到復(fù)位EZ-Host控制器,,并將其初始化到一個已知的狀態(tài);初始化必要的USB數(shù)據(jù)結(jié)構(gòu)并為其分配空間,;注冊USB host driver和USB host bus interface到USB host core,;注冊USB host core的中斷服務(wù)程序;為每一個主端口建立一個虛擬根Hub,,并且注冊根hub到USBhost eore,。2)中斷處理。EZ-Host主控制器中斷采用電平觸發(fā),,當(dāng)中斷服務(wù)程序注冊到USB子系統(tǒng)后,,EZ-Host主控制器開始處理中斷。3)傳輸數(shù)據(jù),。傳輸處理程序在初始化的過程中注冊到USB主端子系統(tǒng),,它由USB host core喚醒并配置外圍設(shè)備,發(fā)送塊數(shù)據(jù),,或確認(rèn)塊數(shù)據(jù)的接收,。4)接收數(shù)據(jù)。接收處理程序處理數(shù)據(jù)包的接收,,它由中斷處理程序喚醒。數(shù)據(jù)接收處理程序詢問EZ-Host主控制器是否有接收錯誤,,如果沒有錯誤,,則接收處理程序從EZ-Host主控制器的緩沖區(qū)中提取數(shù)據(jù)并將數(shù)據(jù)存儲到一個數(shù)據(jù)結(jié)構(gòu),然后接收程序?qū)?shù)據(jù)傳送到USB host eore,,等待進(jìn)一步處理,。5)主機(jī)協(xié)議實現(xiàn)。HCD從Linux USB協(xié)議棧接收并解析USB請求,,然后建立基于該請求的USB交互(transactions),,該交互被合理調(diào)度安排并發(fā)送到USB總線上。

  3.3 HCD的關(guān)鍵接口設(shè)計

  實際工作過程中,,應(yīng)用程序通過文件系統(tǒng)接口訪問相應(yīng)的USB設(shè)備類驅(qū)動程序和USBD,;USB設(shè)備類驅(qū)動程序則通過USBD提供的相關(guān)接口(USBDI)將數(shù)據(jù)請求包傳遞給USBD;USBD通過HCD提供的接口(HCI)進(jìn)一步將數(shù)據(jù)包傳遞給HCD,;HCD最終將數(shù)據(jù)發(fā)送到USB總線,。

  主機(jī)控制器驅(qū)動中,最重要的接口是主機(jī)控制器驅(qū)動HCD與USBD之間的接口,。在Linux內(nèi)核中,,用usb_hcd結(jié)構(gòu)體表示USBD接口,,用來描述主機(jī)控制器(HC)的基本信息、硬件資源,、狀態(tài)描述和用于操作主機(jī)控制器的hc_driver等,。其中usb_hcd中的hc_driver成員非常重要,它包括具體用于操作主機(jī)控制器的鉤子函數(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模塊定義的需要底層主機(jī)控制器驅(qū)動實現(xiàn)的接口,通過實現(xiàn)這些接口,,USBD可將更上層軟件的請求傳遞給HCD以及HC,,HC及HCD完成后,也會通過這些接口通知USBD,。

  這里在EZ-Host主控制器驅(qū)動中定義一個結(jié)構(gòu)體structusb hcd c67x00_hcd,,用于描述EZ-Host的基本信息、硬件資源,、狀態(tài)描述,,定義struct hc_driver c67x00_hc_driver來描述用于操作主機(jī)控制器的鉤子函數(shù),其結(jié)構(gòu)體如圖4所示,。


   c67x00_hub_start()啟動HCD主控制器,,c67x00_hub_irq()實現(xiàn)其中斷控制處理,c67x00_hub_status_data(),,c67x00_hub_control()實現(xiàn)對虛擬根集線器的控制,,c67x00_hub_enqueue(),c67x00_hub_dequeue()實現(xiàn)對USB請求(URB)進(jìn)行排隊,,對URB進(jìn)行調(diào)度,。根據(jù)hcd和endp-oint的信息,安排URB的schedule到e67x00,,該URB的傳輸完成后,,會調(diào)用urb->complete()通知USBD。

4 測試結(jié)果

  在ML405開發(fā)板上實現(xiàn)了USB主機(jī)控制器的開發(fā),,使系統(tǒng)具有USB主機(jī)功能,。在開發(fā)板上分別插入USB鍵盤、USB鼠標(biāo),、U盤進(jìn)行測試,,內(nèi)核識別信息輸出如圖5所示。

  從圖5中可看出,系統(tǒng)可以方便與大容量存儲類(MassStorage類)USB接口,、人機(jī)接口類HID(Human Interfaee Device)USB接口進(jìn)行通信,,進(jìn)行正常讀寫操作,實現(xiàn)了系統(tǒng)的SB接口擴(kuò)展,。

5 結(jié)束語

  詳細(xì)介紹在SoPC平臺上進(jìn)行USB主機(jī)控制器的硬,、軟件設(shè)計。針對EZ-Host器件,,詳細(xì)介紹其USB主控制器的Linux驅(qū)動開發(fā)過程及主要的接口設(shè)計,,對于USB的主機(jī)控制器的驅(qū)動開發(fā)有一定參考價值。設(shè)計的重點和難點主要集中在主機(jī)控制器器件的驅(qū)動程序開發(fā)的環(huán)節(jié)上,,但Linux作為開源系統(tǒng),,在開發(fā)設(shè)備驅(qū)動程序時有著其他嵌入式系統(tǒng)不可比擬的優(yōu)勢,大量的開放源碼無疑可以大大加快開發(fā)的進(jìn)程并使得其應(yīng)用更加的廣泛,。因此,,USB作為一種新型的高速外設(shè)總線,在嵌入式Linux領(lǐng)域有著廣闊的應(yīng)用前景,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多