《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 嵌入式VxWorks下基于PCI總線的USB接口主機端設(shè)計
嵌入式VxWorks下基于PCI總線的USB接口主機端設(shè)計
來源:電子技術(shù)應(yīng)用2014年第2期
劉智武,王建宇,張立輝
中航工業(yè)西安航空計算技術(shù)研究所,陜西 西安710119
摘要: 分析了USB主機端的層次結(jié)構(gòu),采用PowerPC8270處理器設(shè)計了一種基于PCI總線的USB主機端設(shè)備,簡化了主處理器與USB控制器的交互。在VxWorks操作系統(tǒng)下進(jìn)行了USB主機端驅(qū)動的設(shè)計和實現(xiàn),并通過試驗對USB主機端的功能和讀寫速率性能參數(shù)進(jìn)行了測試驗證。測試表明,能夠穩(wěn)定地支持對USB接口存儲外設(shè)的讀寫訪問。
中圖分類號: TP302.1
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2014)02-0005-03
Design of USB host device in embedded VxWorks based on PCI bus
Liu Zhiwu,Wang Jianyu,Zhang Lihui
AVIC Computing Technique Research Institute,Xi′an 710119,China
Abstract: This paper analyses the USB host stack structure. A PCI bus-based USB host device is designed using PowerPC8270 CPU. The design simplifies interaction between host CPU and USB controller, implements the USB host driver in embedded VxWorks operating system. Finally, the USB host function and the speed of read/write are tested on USB storage device. The results slow that this design can support reading and writing USB storage peripheral device steadily.
Key words : USB host;PCI bus;VxWorks

    通用串行總線(USB)是一種用于連接計算機與外圍設(shè)備的串行接口標(biāo)準(zhǔn),具有結(jié)構(gòu)簡單、配置靈活、即插即用、支持熱插拔、可靠性高、成本低等優(yōu)點[1]。USB接口主機端為支持USB主機協(xié)議的計算機系統(tǒng),在機載計算機領(lǐng)域,USB接口主機端一般為嵌入式的控制設(shè)備。USB接口主機端在USB總線上占控制地位,可以掛載USB外設(shè),所有的USB接口傳輸事務(wù)由主機端發(fā)起,控制整個USB總線工作。
    本文提出一種適用于機載計算機領(lǐng)域的USB接口主機端設(shè)計,采用PowerPC系列處理器作為USB主機端的控制器,基于PCI總線與USB控制器連接,構(gòu)成基于PCI總線的USB接口主機端嵌入式設(shè)備?;?a class="innerlink" href="http://theprogrammingfactory.com/tags/VxWorks" title="VxWorks" target="_blank">VxWorks操作系統(tǒng)完成USB接口主機端的驅(qū)動程序設(shè)計和開發(fā),實現(xiàn)了一套完整的USB接口主機端軟硬件產(chǎn)品。利用U盤作為USB外設(shè),對所設(shè)計的USB接口主機端進(jìn)行了測試和驗證。結(jié)果表明,本文設(shè)計的USB接口主機端能夠很好地支持與USB外設(shè)的USB通信訪問和控制。
1 USB接口主機端分析
    USB總線系統(tǒng)由USB主機、USB外設(shè)及USB互聯(lián)總線三部分構(gòu)成。USB主機作為USB通信主控設(shè)備,主動發(fā)起對USB外設(shè)的訪問、控制及通信操作。USB總線作為一種標(biāo)準(zhǔn)通信協(xié)議,其主機端層次結(jié)構(gòu)如圖1所示[2]。

    如圖1所示,USB主機端采用分層結(jié)構(gòu),其層次包括USB硬件層、USB主機控制器驅(qū)動層、USB主機協(xié)議驅(qū)動層和USB主機應(yīng)用層,其中USB硬件層功能由硬件USB控制器完成,之上3層由軟件完成。USB硬件層主要由USB主機控制器實現(xiàn),負(fù)責(zé)完成USB總線的物理層和鏈路層協(xié)議,并對軟件提供配置和操作接口,由軟件實現(xiàn)對USB控制器的通信控制和總線訪問等功能。USB主機控制器驅(qū)動層實現(xiàn)USB主機控制器的驅(qū)動程序,該部分驅(qū)動程序需針對不同的USB主機控制器芯片的操作接口進(jìn)行開發(fā),一方面,通過軟件實現(xiàn)了USB硬件層的接口,完成對USB控制器基本操作的控制;另一方面,向上層提供了一個統(tǒng)一的接口抽象,屏蔽了底層硬件控制器的差異。USB主機協(xié)議驅(qū)動層提供USB協(xié)議的主機驅(qū)動程序,通過USB主機控制器層的抽象,使該部分程序不依賴于具體硬件層,利用下層的封裝接口,實現(xiàn)對USB總線的控制和管理,為上層軟件提供USB總線的訪問控制。USB主機應(yīng)用層利用USB主機協(xié)議層驅(qū)動,實現(xiàn)對USB外設(shè)的訪問,實現(xiàn)獨立的USB功能,常見的USB主機應(yīng)用層功能包括USB存儲外設(shè)訪問控制、USB鼠標(biāo)鍵盤訪問控制等。
2 基于PCI總線的USB接口設(shè)計
    機載計算機中一般選用具有高可靠性的PowerPC系列處理器。在PowerPC8270處理器芯片中,集成了PCI橋功能,支持標(biāo)準(zhǔn)的PCI總線訪問控制。本文USB主機端硬件設(shè)計選用PowerPC8270處理器,通過PCI總線接口連接USB控制器,完成USB主機硬件功能。USB主機核心硬件設(shè)計如圖2所示。

    如圖2所示,主機端處理器PowerPC8270芯片通過內(nèi)部集成的PCI橋功能,經(jīng)PCI總線連接USB控制器;USB控制器芯片選用ISP1562芯片,該芯片具有標(biāo)準(zhǔn)的PCI總線接口,內(nèi)部集成PCI核,可支持其作為PCI主設(shè)備或從設(shè)備工作,內(nèi)部支持2個OHCI控制器核和1個增強型EHCI控制器核,可支持低速1.5 Mb/s、全速12 Mb/s和高速480 Mb/s的通信速率。在圖2設(shè)計中,PowerPC處理器作為PCI主設(shè)備,USB控制器作為PCI從設(shè)備,PCI總線位寬為32 bit,總線頻率為33 MHz,處理器通過PCI總線實現(xiàn)對USB控制器的配置和對USB總線的訪問控制等操作。USB控制器通過I2C接口外接一片EEPROM,用于支持系統(tǒng)信息的加載和讀取。USB控制器接出USB總線經(jīng)過保護電路后,連接USB外設(shè),保護電路用來防止USB總線信號因過流、過壓和ESD靜電瞬態(tài)放電而導(dǎo)致的USB控制器損壞和通信故障。處理器通過局部的60X總線,掛載SDRAM和Flash存儲器。SDRAM存儲器用于支持主機程序運行,F(xiàn)lash存儲器支持主機端操作系統(tǒng)固件及應(yīng)用程序的固化存儲。
    采用圖2所示的設(shè)計結(jié)構(gòu)和標(biāo)準(zhǔn)PCI接口對USB控制器的配置寄存器進(jìn)行相應(yīng)的設(shè)置,即可完成對控制器的初始化及訪問控制操作,大大簡化了主處理器與USB控制器之間配置操作的復(fù)雜時序和流程控制,為主機端USB驅(qū)動及協(xié)議軟件設(shè)計和實現(xiàn)提供了便利。
3 VxWorks系統(tǒng)下USB主機端軟件設(shè)計
    VxWorks操作系統(tǒng)BSP中集成了對USB通信協(xié)議的支持,但在實際使用中,需要根據(jù)自身硬件的設(shè)計、地址空間的劃分及中斷分配等情況,對其通信協(xié)議進(jìn)行修改。USB主機端程序的調(diào)試是一個復(fù)雜的流程,而BSP中的程序不支持調(diào)試功能。因此,在驅(qū)動設(shè)計和修改中,單獨將VxWorks操作系統(tǒng)BSP中USB相關(guān)的程序作為一個部件剝離出來,添加到主機應(yīng)用程序的工程中,以支持對USB程序的調(diào)試,便于程序修改、功能調(diào)試和驗證。
3.1 USB主機端軟件設(shè)計
    在VxWorks操作系統(tǒng)下,基于PCI總線的USB接口主機端驅(qū)動流程設(shè)計如圖3所示。

    如圖3所示的USB主機端程序流程中,首先需要進(jìn)行主機端PCI總線配置及初始化,主要進(jìn)行PCI橋的寄存器設(shè)置、主機端與USB控制器的PCI地址空間劃分、控制器中斷設(shè)置等工作。設(shè)計的USB接口選用EHCI接口控制器實現(xiàn)高速的USB通信,USB主機協(xié)議棧初始化進(jìn)行EHCI接口控制器的查找,通過PCI總線對EHCI接口的配置寄存器進(jìn)行設(shè)置和初始化,并對USB的主機協(xié)議層驅(qū)動USBD所需要的全局變量進(jìn)行初始化操作。控制器初始化及EHCI接口掛接完成對EHCI主機控制器驅(qū)動HCD的初始化,并建立控制器驅(qū)動HCD與主機協(xié)議層驅(qū)動USBD的連接關(guān)系。USB設(shè)備創(chuàng)建和掛載注冊回調(diào)函數(shù),當(dāng)有USB設(shè)備連接時,創(chuàng)建USB存儲設(shè)備,并將設(shè)備掛載到主機文件系統(tǒng),支持主機對USB存儲設(shè)備的讀寫訪問。通過圖3所示流程,完成VxWorks操作系統(tǒng)下USB協(xié)議主機端軟件設(shè)計,支持USB協(xié)議主機端軟件開發(fā)。
3.2 PCI橋配置
    PCI總線具有性能高、成本低、開放性和兼容性好等優(yōu)點,一般采用PCI專用芯片實現(xiàn)PCI總線設(shè)備的開發(fā)[3]。PowerPC8270處理器內(nèi)部集成了PCI橋功能,通過該橋?qū)崿F(xiàn)與USB控制器的訪問控制,在USB主機端軟件開發(fā)中(如圖3所示),首先需要進(jìn)行PCI橋的配置。在軟件上,首先需要進(jìn)行PCI橋配置接口的設(shè)計。PowerPC8270處理器提供兩個地址寄存器,一個為PCI地址寄存器,另一個為PCI數(shù)據(jù)寄存器。在PCI讀操作時,首先將要讀的PCI總線地址寫入PCI地址寄存器,從PCI數(shù)據(jù)寄存器即可讀到該地址的數(shù)據(jù);在PCI寫操作時,首先將要寫入的PCI總線地址寫入PCI地址寄存器,然后將數(shù)據(jù)寫入PCI數(shù)據(jù)寄存器,可以完成一次寫操作。地址寄存器和數(shù)據(jù)寄存器的基址由處理器的配置字定義,偏移地址分別為0x10900和0x10904。USB控制器作為PCI從設(shè)備掛載在主機PCI橋下,根據(jù)USB控制器與主機的PCI總線上IDSEL信號的連接方式,可以計算出主機訪問USB控制器的基址。通過該基址加上偏移地址對主機與USB控制器連接的PCI配置空間進(jìn)行配置。
    通過上述方法,對PCI配置空間的基址BAR0寄存器、命令狀態(tài)寄存器、Cache Line長度、總線延遲寄存器進(jìn)行配置,建立通過BAR0寄存器的地址訪問USB控制器配置寄存器的通路。為了支持上層的USB軟件,需要通過PCI總線建立處理器訪問USB控制器及USB控制器訪問處理器的雙向地址映射關(guān)系。處理器訪問USB控制器的地址映射通過BAR0地址的配置來完成,USB控制器訪問處理器的地址映射需要通過主機PCI橋的InBound機制來配置完成,通過配置InBound機制的寄存器,提供一種外部設(shè)備通過PCI訪問處理器地址空間的方法。通過PCI橋配置,實現(xiàn)雙向地址映射的示意圖如圖4所示。

    圖4中虛線框代表虛擬地址,實線框代表實際的物理空間。圖4給出了處理器空間和USB控制器空間通過PCI橋的地址映射關(guān)系,建立3段地址空間。處理器空間中,通過硬件連接方式確定基址ADDR2,作為處理器訪問控制器的256 B的PCI配置空間;通過向PCI配置中BAR0寄存器寫入ADDR3,建立處理器訪問USB控制器自身配置寄存器空間的映射,根據(jù)USB控制器手冊描述,該段空間大小為116 B,處理器對USB控制器的初始化均通過該段空間完成;通過處理器PCI橋的InBound機制,設(shè)置InBound基址、大小寄存器,建立控制器訪問處理器內(nèi)存空間的映射關(guān)系。在主機端USB協(xié)議棧調(diào)試時,可以通過ADDR3的映射來訪問USB控制器的寄存器,判斷其當(dāng)前的工作狀態(tài),起到故障排查和定位的作用。
    通過PCI橋配置,建立處理器與USB控制器的訪問地址映射,實現(xiàn)兩者的互相訪問,為USB主機端協(xié)議功能的實現(xiàn)提供基礎(chǔ)支持。
3.3 USB主機端軟件實現(xiàn)
    在PCI配置完成的基礎(chǔ)上進(jìn)行USB主機端軟件設(shè)計。按照圖3所示的流程實現(xiàn)對USB總線的管理和控制,進(jìn)行初始化、應(yīng)用程序注冊、動態(tài)鏈接注冊等功能。USBD初始化相關(guān)的API包括usbdInitialize、usbdShutdown、usbdHcdAttach和usbdHcdDetach共4個,完成usbdLib庫的初始化、關(guān)閉usbdLib庫、連接HCD和斷開HCD功能;使用usbdClientRegister和usbdClientUnregister 2個API實現(xiàn)應(yīng)用程序注冊和取消注冊功能,USBD允許同時有多個應(yīng)用程序模塊使用USB總線,因此對于要使用USB總線的應(yīng)用程序模塊,需要先在USBD中進(jìn)行注冊,而不再使用USB的模塊應(yīng)當(dāng)取消在USBD中的注冊,以節(jié)省主機端資源;動態(tài)連接注冊API接口函數(shù)usbdDynamicAttachRegister和usbdDynamicAttachUnRegister用于注冊回調(diào)函數(shù),當(dāng)USB總線上有設(shè)備插入或設(shè)備拔出動作時,回調(diào)函數(shù)能夠收到報告并進(jìn)行相應(yīng)處理,對于插入操作,回調(diào)函數(shù)進(jìn)行設(shè)備類型判斷、設(shè)備創(chuàng)建操作,對于拔出操作,回調(diào)函數(shù)進(jìn)行設(shè)備類型確認(rèn)、設(shè)備銷毀操作。
4 測試驗證
    采用標(biāo)準(zhǔn)的U盤設(shè)備對本文設(shè)計的USB主機端進(jìn)行了功能測試和讀寫速度性能測試,測試結(jié)果如表1所示。

 

 

    表1針對主機設(shè)備未插入卡、插入卡和拔出卡3種場景下USB主機端的串口輸出進(jìn)行了測試。在未插入卡的情況下,USB主機端完成了協(xié)議棧初始化、USBD驅(qū)動初始化、EHCI控制器初始化并連接EHCI控制器與USBD驅(qū)動;當(dāng)有卡插入主機端時,觸發(fā)回調(diào)函數(shù)工作,首先查找到主機設(shè)備下的卡設(shè)備,然后創(chuàng)建/bd0文件系統(tǒng),完成卡設(shè)備到/bd0文件系統(tǒng)的掛載;當(dāng)拔出卡時,觸發(fā)回調(diào)函數(shù)的移除設(shè)備操作,主機端移除/bd0文件系統(tǒng)。
    向主機端插入U盤設(shè)備,分別寫入和讀取1 MB~10 MB數(shù)據(jù),測試主機端對U盤外設(shè)的讀取速率,結(jié)果如圖5所示。
    圖5中,橫軸為每次讀或?qū)懙臄?shù)據(jù)量大小,縱軸為所測量出來的讀寫速率。從圖可以看出,隨著每次讀寫數(shù)據(jù)量的增大,讀寫的速率基本保持穩(wěn)定,而讀取的速率比寫入的速率快4 Mb/s左右。計算平均值可得,本文設(shè)計的USB主機端寫入U盤的速率為5.92 Mb/s,讀取U盤的速率為9.77 Mb/s。

    本文基于PowerPC處理器設(shè)計并實現(xiàn)了一種基于PCI總線的USB主機端設(shè)備,并在VxWorks操作系統(tǒng)下設(shè)計并實現(xiàn)了其PCI配置、USB主機端驅(qū)動及協(xié)議軟件,能夠穩(wěn)定地支持對U盤等存儲外設(shè)的訪問,在工程上取得了良好的應(yīng)用。
參考文獻(xiàn)
[1] 楊偉,劉強,顧新.Linux下USB設(shè)備驅(qū)動研究與開發(fā)[J].計算機工程,2006,32(19):283-285.
[2] 張楊,于銀濤.VxWorks內(nèi)核、設(shè)備驅(qū)動與BSP開發(fā)詳解[M]. 北京:人民郵電出版社,2009.
[3] 鄧鳳軍,張龍,王益忠.基于PCI總線的HDLC通信卡的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(8):30-32.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。