999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

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

許雙燕,石江宏

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

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

許雙燕,石江宏

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

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

USB;USB主機控制器;EZ-Host;Linux;SoPC

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

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

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

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

這里所采用的開發(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)端口、帶主機/設(shè)備端的USB接口器件(CY7C67300)等。

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

2 硬件設(shè)計

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

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

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

圖2 Linux USB主機堆棧

USB設(shè)備類驅(qū)動(如插入主機的U盤、鼠標(biāo)、鍵盤等設(shè)備驅(qū)動)是最終與應(yīng)用程序交互的軟件模塊,負(fù)責(zé)建立虛擬連接、配置,與設(shè)備進(jìn)行通信,將數(shù)據(jù)集成一個USB請求塊(URB),然后通過USB驅(qū)動(USBD)提供的編程接口將URB發(fā)送到USBD。USBD部分是整個 USB主機驅(qū)動的核心,USBD完成以下工作:USB設(shè)備的枚舉和配置,根據(jù)需要裝載或卸載設(shè)備驅(qū)動程序,向上為設(shè)備驅(qū)動程序提供編程接口,向下為主機控制器驅(qū)動提供編程接口,實現(xiàn)與設(shè)備驅(qū)動程序、主機控制驅(qū)動程序的通信。

處于最底層 USB主機控制器驅(qū)動(HCD)是 USB主機直接與硬件交互的軟件模塊。HCD作為底層硬件的驅(qū)動程序,一方面控制和管理底層硬件,負(fù)責(zé)將USB事務(wù)發(fā)送給USB主機控制器,并最終將串行數(shù)據(jù)發(fā)送到電纜上;另一方面為上層的USB系統(tǒng)軟件提供統(tǒng)一接口HCI(Host Controller Interface),將各種不同的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ū)動。針對特定的主機控制器硬件應(yīng)該實現(xiàn)HCD部分,以解決基本的通信問題。故這里主要介紹EZ-Host主機控制器驅(qū)動(HCD)的設(shè)計。

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

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

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進(jìn)行通信[6]。圖3為EZ-Host主機控制器驅(qū)動模塊結(jié)構(gòu)。

圖3 EZ-Host主機控制器驅(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到USB host core。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 core,等待進(jìn)一步處理。5)主機協(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總線。

主機控制器驅(qū)動中,最重要的接口是主機控制器驅(qū)動HCD與USBD之間的接口。在Linux內(nèi)核中,用usb_hcd結(jié)構(gòu)體表示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 struct hc_driver*driver, struct device*dev, char*bus_name);

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

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

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

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

4 測試結(jié)果

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

圖5 USB接口測試

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

5 結(jié)束語

詳細(xì)介紹在SoPC平臺上進(jìn)行USB主機控制器的硬、軟件設(shè)計。針對EZ-Host器件,詳細(xì)介紹其USB主控制器的Linux驅(qū)動開發(fā)過程及主要的接口設(shè)計,對于USB的主機控制器的驅(qū)動開發(fā)有一定參考價值。設(shè)計的重點和難點主要集中在主機控制器器件的驅(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)用前景。

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

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

[3]劉 淼.嵌入式系統(tǒng)接口設(shè)計與Linux驅(qū)動程序開發(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 稿件編號:200907080

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

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

猜你喜歡
嵌入式設(shè)備系統(tǒng)
諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機系統(tǒng)
ZC系列無人機遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于MPU6050簡單控制設(shè)備
電子制作(2018年11期)2018-08-04 03:26:08
搭建基于Qt的嵌入式開發(fā)平臺
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
500kV輸變電設(shè)備運行維護(hù)探討
原來他們都是可穿戴設(shè)備
消費者報道(2014年7期)2014-07-31 11:23:57
主站蜘蛛池模板: 手机精品福利在线观看| 91精品伊人久久大香线蕉| 亚洲中字无码AV电影在线观看| 91成人在线观看| 亚洲人成在线精品| 国产在线观看人成激情视频| 国产黑丝视频在线观看| 国产男女免费视频| 国产亚洲视频免费播放| 亚洲视频a| 在线精品亚洲一区二区古装| 女人爽到高潮免费视频大全| 久久国产精品国产自线拍| 亚洲色婷婷一区二区| 精品福利国产| 国产国产人免费视频成18| 国产成人区在线观看视频| 热99精品视频| 国产成人区在线观看视频| 日本道综合一本久久久88| 亚洲人成亚洲精品| 88av在线看| 国产成人h在线观看网站站| 亚洲成人黄色在线| 亚洲自拍另类| 无码一区二区波多野结衣播放搜索| 国产成人h在线观看网站站| 国产99精品视频| 婷婷六月在线| 亚洲AⅤ波多系列中文字幕| 免费在线成人网| 欧美一区二区啪啪| 欧美啪啪网| 亚洲日韩AV无码精品| 国产aⅴ无码专区亚洲av综合网| 99久久婷婷国产综合精| 国产自视频| 国产成人夜色91| 久久夜夜视频| 久久精品亚洲热综合一区二区| 免费一级成人毛片| 国产99视频精品免费观看9e| 日本午夜三级| 波多野结衣无码视频在线观看| 一本色道久久88综合日韩精品| 色成人亚洲| 国产在线98福利播放视频免费| 免费人成又黄又爽的视频网站| 国产玖玖玖精品视频| 欧美成人精品高清在线下载| 日韩福利视频导航| 亚洲无码91视频| 真实国产精品vr专区| 亚洲中文精品人人永久免费| 久久无码av三级| 国产SUV精品一区二区6| AV无码无在线观看免费| 亚洲日韩久久综合中文字幕| 精品一区二区三区自慰喷水| 欧美激情成人网| 色噜噜在线观看| 在线精品自拍| 人妻无码一区二区视频| 国产日韩精品一区在线不卡| 欧美一区二区三区国产精品| 19国产精品麻豆免费观看| 久久永久精品免费视频| 中文字幕免费视频| 国产成人夜色91| 亚洲天堂网在线观看视频| 亚洲第一区欧美国产综合| 国产高清又黄又嫩的免费视频网站| 全免费a级毛片免费看不卡| 国产男女免费视频| 色综合日本| 18禁不卡免费网站| 香蕉久人久人青草青草| 国产美女免费网站| 久久综合亚洲鲁鲁九月天| 国产精品亚洲а∨天堂免下载| 国产精品冒白浆免费视频| 久久精品国产精品国产一区|