《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 嵌入式VxWorks下基于PCI總線的USB接口主機(jī)端設(shè)計(jì)
嵌入式VxWorks下基于PCI總線的USB接口主機(jī)端設(shè)計(jì)
來(lái)源:電子技術(shù)應(yīng)用2014年第2期
劉智武,王建宇,張立輝
中航工業(yè)西安航空計(jì)算技術(shù)研究所,陜西 西安710119
摘要: 分析了USB主機(jī)端的層次結(jié)構(gòu),采用PowerPC8270處理器設(shè)計(jì)了一種基于PCI總線的USB主機(jī)端設(shè)備,簡(jiǎn)化了主處理器與USB控制器的交互。在VxWorks操作系統(tǒng)下進(jìn)行了USB主機(jī)端驅(qū)動(dòng)的設(shè)計(jì)和實(shí)現(xiàn),并通過(guò)試驗(yàn)對(duì)USB主機(jī)端的功能和讀寫(xiě)速率性能參數(shù)進(jìn)行了測(cè)試驗(yàn)證。測(cè)試表明,能夠穩(wěn)定地支持對(duì)USB接口存儲(chǔ)外設(shè)的讀寫(xiě)訪問(wèn)。
中圖分類號(hào): TP302.1
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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)是一種用于連接計(jì)算機(jī)與外圍設(shè)備的串行接口標(biāo)準(zhǔn),具有結(jié)構(gòu)簡(jiǎn)單、配置靈活、即插即用、支持熱插拔、可靠性高、成本低等優(yōu)點(diǎn)[1]。USB接口主機(jī)端為支持USB主機(jī)協(xié)議的計(jì)算機(jī)系統(tǒng),在機(jī)載計(jì)算機(jī)領(lǐng)域,USB接口主機(jī)端一般為嵌入式的控制設(shè)備。USB接口主機(jī)端在USB總線上占控制地位,可以掛載USB外設(shè),所有的USB接口傳輸事務(wù)由主機(jī)端發(fā)起,控制整個(gè)USB總線工作。
    本文提出一種適用于機(jī)載計(jì)算機(jī)領(lǐng)域的USB接口主機(jī)端設(shè)計(jì),采用PowerPC系列處理器作為USB主機(jī)端的控制器,基于PCI總線與USB控制器連接,構(gòu)成基于PCI總線的USB接口主機(jī)端嵌入式設(shè)備?;?a class="innerlink" href="http://ihrv.cn/tags/VxWorks" title="VxWorks" target="_blank">VxWorks操作系統(tǒng)完成USB接口主機(jī)端的驅(qū)動(dòng)程序設(shè)計(jì)和開(kāi)發(fā),實(shí)現(xiàn)了一套完整的USB接口主機(jī)端軟硬件產(chǎn)品。利用U盤作為USB外設(shè),對(duì)所設(shè)計(jì)的USB接口主機(jī)端進(jìn)行了測(cè)試和驗(yàn)證。結(jié)果表明,本文設(shè)計(jì)的USB接口主機(jī)端能夠很好地支持與USB外設(shè)的USB通信訪問(wèn)和控制。
1 USB接口主機(jī)端分析
    USB總線系統(tǒng)由USB主機(jī)、USB外設(shè)及USB互聯(lián)總線三部分構(gòu)成。USB主機(jī)作為USB通信主控設(shè)備,主動(dòng)發(fā)起對(duì)USB外設(shè)的訪問(wèn)、控制及通信操作。USB總線作為一種標(biāo)準(zhǔn)通信協(xié)議,其主機(jī)端層次結(jié)構(gòu)如圖1所示[2]。

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

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

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

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

 

 

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

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