當(dāng)前位置:首頁(yè) > 智能硬件 > 智能硬件
[導(dǎo)讀]摘要:討論在SoPC(System on a Programmable Chip)系統(tǒng)中設(shè)計(jì)USB主機(jī)接口設(shè)備的一般方法,著重闡述主機(jī)控制器的驅(qū)動(dòng)程序開(kāi)發(fā)。利用Xilinx公司的EDK軟件在ML405開(kāi)發(fā)板上搭建一個(gè)基于PowerPC的片上系統(tǒng),設(shè)計(jì)EZ-Host的

摘要:討論在SoPC(System on a Programmable Chip)系統(tǒng)中設(shè)計(jì)USB主機(jī)接口設(shè)備的一般方法,著重闡述主機(jī)控制器的驅(qū)動(dòng)程序開(kāi)發(fā)。利用Xilinx公司的EDK軟件在ML405開(kāi)發(fā)板上搭建一個(gè)基于PowerPC的片上系統(tǒng),設(shè)計(jì)EZ-Host的USB主機(jī)控制器的Linux驅(qū)動(dòng)程序,使系統(tǒng)具有USB主機(jī)功能,能夠和各種USB設(shè)備進(jìn)行通信,實(shí)現(xiàn)SoPC系統(tǒng)上基于Linux的USB接口的擴(kuò)展,對(duì)于開(kāi)發(fā)其他USB主控制器驅(qū)動(dòng)具有一定借鑒意義。
關(guān)鍵詞:USB;USB主機(jī)控制器;EZ-Host;Linux;SoPC

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

1 開(kāi)發(fā)環(huán)境
    目前Linux 2.6內(nèi)核中的USB支持3種主控制器接口:通用主控制器接口(UHCI)、開(kāi)放控制器接口(OHCI)及增強(qiáng)主機(jī)控制接口(EHCI)。在嵌入式系統(tǒng)中,如果處理器集成有USB主機(jī)控制器,則可直接引出USB主控端口;而未集成USB主機(jī)控制器的處理器則需使用USB主控器件,從總線上擴(kuò)展USB主機(jī)接口。
    這里所采用的開(kāi)發(fā)環(huán)境是Xilinx公司的ML405開(kāi)發(fā)板。開(kāi)發(fā)板上核心FPGA采用Xilinx的XC4VFX20-FF672器件,其內(nèi)置1個(gè)PowerPC硬核,2個(gè)以太網(wǎng)MAC層控制器。開(kāi)發(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é)處理器使用或單獨(dú)使用;同時(shí)支持USB的OTG協(xié)議,擁有2個(gè)可獨(dú)立配置并各帶有2個(gè)端口的USB串行接口引擎(SIE);既可用作主機(jī),又可用作外設(shè),并支持多達(dá)4個(gè)主機(jī)端口。另外,該器件擁有一個(gè)可編程I/O接口模塊,可供各種接口編程使用,可編程實(shí)現(xiàn)HPI、HSS、SPI等接口模式。當(dāng)EZ-Host控制器作為USB主機(jī)控制器時(shí),一般采用HPI主機(jī)端接口(Host Port Interface)接口模式。

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


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

3 驅(qū)動(dòng)程序設(shè)計(jì)
3.1 USB主機(jī)端的軟件結(jié)構(gòu)
    Linux USB主機(jī)驅(qū)動(dòng)協(xié)議棧由3部分組成:USB主機(jī)控制器驅(qū)動(dòng)(HCD)、USB驅(qū)動(dòng)(USBD)和各種不同的USB設(shè)備類驅(qū)動(dòng),如圖2所示。


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


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


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

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


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

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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉