亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2010-09-27 01:40:52許雙燕石江宏
        電子設(shè)計(jì)工程 2010年1期
        關(guān)鍵詞:嵌入式設(shè)備系統(tǒng)

        許雙燕,石江宏

        (廈門大學(xué) 信息科學(xué)與技術(shù)學(xué)院,福建 廈門 361005)

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

        許雙燕,石江宏

        (廈門大學(xué) 信息科學(xué)與技術(shù)學(xué)院,福建 廈門 361005)

        討論在SoPC(System on a Programmable Chip)系統(tǒng)中設(shè)計(jì)USB主機(jī)接口設(shè)備的一般方法,著重闡述主機(jī)控制器的驅(qū)動(dòng)程序開發(fā)。利用Xilinx公司的EDK軟件在ML405開發(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ì)于開發(fā)其他USB主控制器驅(qū)動(dòng)具有一定借鑒意義。

        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è)硬件、固件和軟件的綜合體[1]。主機(jī)控制器實(shí)現(xiàn)主機(jī)與設(shè)備之間的電氣和協(xié)議層匹配,主要包括:串并轉(zhuǎn)換、幀起始、數(shù)據(jù)處理、協(xié)議使用、傳輸錯(cuò)誤處理、遠(yuǎn)程喚醒、根Hub、主機(jī)系統(tǒng)接口等功能。USB設(shè)備之間通過USB Hub連接,主機(jī)控制器和USB設(shè)備之間一般通過根Hub相連。通常主機(jī)控制器提供與根Hub相關(guān)的狀態(tài)查詢和控制單元[2]。當(dāng)有設(shè)備插入時(shí),在枚舉過程中,主機(jī)控制器驅(qū)動(dòng)通過查詢和控制單元應(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 開發(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ī)接口[3]。

        這里所采用的開發(fā)環(huán)境是Xilinx公司的ML405開發(fā)板。開發(fā)板上核心FPGA采用Xilinx的XC4VFX20-FF672器件,其內(nèi)置1個(gè)PowerPC硬核,2個(gè)以太網(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é)處理器使用或單獨(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)接口模式[4]。

        2 硬件設(shè)計(jì)

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

        圖1 嵌入式硬件系統(tǒng)架構(gòu)

        ML405板上的EZ-Host控制器工作在異步模式,因此opb_epc需配置為支持異步外設(shè)模式。這里使用PowerPC控制USB接口,因此EZ-Host工作于協(xié)處理器模式,并通過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所示。

        圖2 Linux USB主機(jī)堆棧

        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),然后通過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 Controller Interface),將各種不同的HC映射到USB系統(tǒng)。HC一般都集成有Root Hub的功能,HCD也要實(shí)現(xiàn)Root Hub Port訪問。

        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部分,以解決基本的通信問題。故這里主要介紹EZ-Host主機(jī)控制器驅(qū)動(dòng)(HCD)的設(shè)計(jì)。

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

        開發(fā)過程主要針對(duì)EZ-Host主機(jī)控制器編寫USB主機(jī)控制器驅(qū)動(dòng)程序。該驅(qū)動(dòng)程序是嵌入式Linux開發(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ù),通過這一套API函數(shù)使HCD與USBD進(jìn)行通信[6]。圖3為EZ-Host主機(jī)控制器驅(qū)動(dòng)模塊結(jié)構(gòu)。

        圖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到USB host core。2)中斷處理。EZ-Host主控制器中斷采用電平觸發(fā),當(dāng)中斷服務(wù)程序注冊(cè)到USB子系統(tǒng)后,EZ-Host主控制器開始處理中斷。3)傳輸數(shù)據(jù)。傳輸處理程序在初始化的過程中注冊(cè)到USB主端子系統(tǒng),它由USB host core喚醒并配置外圍設(shè)備,發(fā)送塊數(shù)據(jù),或確認(rèn)塊數(shù)據(jù)的接收。4)接收數(shù)據(jù)。接收處理程序處理數(shù)據(jù)包的接收,它由中斷處理程序喚醒。數(shù)據(jù)接收處理程序詢問EZ-Host主控制器是否有接收錯(cuò)誤,如果沒有錯(cuò)誤,則接收處理程序從EZ-Host主控制器的緩沖區(qū)中提取數(shù)據(jù)并將數(shù)據(jù)存儲(chǔ)到一個(gè)數(shù)據(jù)結(jié)構(gòu),然后接收程序?qū)?shù)據(jù)傳送到USB host core,等待進(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í)際工作過程中,應(yīng)用程序通過文件系統(tǒng)接口訪問相應(yīng)的USB設(shè)備類驅(qū)動(dòng)程序和USBD;USB設(shè)備類驅(qū)動(dòng)程序則通過USBD提供的相關(guān)接口(USBDI)將數(shù)據(jù)請(qǐng)求包傳遞給USBD;USBD通過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接口,用來描述主機(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 struct hc_driver*driver, struct device*dev, char*bus_name);

        struct hc_driver可看作USBD模塊定義的需要底層主機(jī)控制器驅(qū)動(dòng)實(shí)現(xiàn)的接口,通過實(shí)現(xiàn)這些接口,USBD可將更上層軟件的請(qǐng)求傳遞給HCD以及HC,HC及HCD完成后,也會(huì)通過這些接口通知USBD。

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

        圖4 struct hc_driver c67x00_hc_driver結(jié)構(gòu)體

        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和endpoint的信息,安排URB的schedule到c67x00,該URB的傳輸完成后,會(huì)調(diào)用 urb->complete()通知USBD。

        4 測(cè)試結(jié)果

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

        圖5 USB接口測(cè)試

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

        5 結(jié)束語(yǔ)

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

        [1]杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003.

        [2]孫 瓊.嵌入式Linux應(yīng)用技程序開發(fā)詳解[M].北京:人民郵電出版社,2006.

        [3]劉 淼.嵌入式系統(tǒng)接口設(shè)計(jì)與Linux驅(qū)動(dòng)程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.

        [4]Cypress Semiconductor Corporation.EZ-Host programmable embedded USB host/peripheral controller[EB/OL].2003.http://www.cypress.com.

        [5]Xilinx公司.OPB external peripheral controller(EPC) v1.00a[EB/OL].2006.http://www.xilinx.com.

        [6]Cypress Semiconductor Corporation.Linux USB driver user’s guide CY7C67200/300[EB/OL].2003.http://www.cypress.com.

        Design of USB host controller

        XU Shuang-yan,SHI Jiang-hong
        (School of Information Science and Technology,Xiamen University,Xiamen361005,China)

        The general development method of USB host interface based on SoPC system is discussed,and the driver program development of host controller is introduced in detail.A PowerPC-based system on chip is built up by using Xilinx′s EDK software in the ML405 development board.Linux driver program of USB host controller of EZ-Host is designed.The system is capable of communicating with a variety of USB devices,achieves extension of the Linux-based USB interface.The design is helpful to the development of other USB host drivers.

        USB; USB host controller; EZ-Host; Linux; SoPC

        TN92

        A

        1674-6236(2010)01-0035-03

        2009-07-23 稿件編號(hào):200907080

        福建省重大專項(xiàng)項(xiàng)目(2007HZ0003)

        許雙燕(1986—),女,福建泉州人,碩士研究生。研究方向:無(wú)線通信技術(shù)。

        猜你喜歡
        嵌入式設(shè)備系統(tǒng)
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無(wú)人機(jī)系統(tǒng)
        ZC系列無(wú)人機(jī)遙感系統(tǒng)
        基于MPU6050簡(jiǎn)單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        搭建基于Qt的嵌入式開發(fā)平臺(tái)
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        500kV輸變電設(shè)備運(yùn)行維護(hù)探討
        原來他們都是可穿戴設(shè)備
        国产黄色看三级三级三级| 国产流白浆视频在线观看 | 无码人妻专区免费视频| 国产成人久久综合第一区| 久久一道精品一区三区| 午夜无码一区二区三区在线观看| 亚洲国产美女精品久久久久∴ | 欧美猛男军警gay自慰| 精品无码久久久久久久动漫| 亚洲美女国产精品久久久久久久久| 成人国产高清av一区二区三区| 蜜臀av在线播放一区二区三区| 大肉大捧一进一出视频| 四虎成人免费| 亚洲无线码一区在线观看| 久久精品国产亚洲av网站| 人人妻人人澡人人爽欧美一区双 | 精品无码国产污污污免费网站| 精品久久久久久99人妻| 久久av少妇亚洲精品 | 国产精品国产三级国产av剧情| 欧洲人妻丰满av无码久久不卡| 久久久久久无中无码| 国产午夜福利小视频在线观看| 又大又粗欧美黑人aaaaa片| 成年女人毛片免费视频| 亚洲欧洲日产国产AV无码| 麻豆av在线免费观看精品| 无码人妻丰满熟妇区免费| 亚洲五月天综合| av草草久久久久久久久久久| 漂亮人妻出轨中文字幕| 欧美成免费a级毛片| 亚洲成人欧美| 国产午夜精品综合久久久| 国产一区二区三区四色av| 亚洲性啪啪无码av天堂| 国产精品福利片免费看| 一级一片内射在线播放| 亚洲av无码国产精品色午夜软件 | 久久精品国产免费一区二区三区|