文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)02-0005-03
通用串行總線(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è)備,。基于VxWorks操作系統(tǒng)完成USB接口主機(jī)端的驅(qū)動(dòng)程序設(shè)計(jì)和開發(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通信訪問和控制。
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è)的訪問,、控制及通信操作,。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控制器的通信控制和總線訪問等功能。USB主機(jī)控制器驅(qū)動(dòng)層實(shí)現(xiàn)USB主機(jī)控制器的驅(qū)動(dòng)程序,,該部分驅(qū)動(dòng)程序需針對(duì)不同的USB主機(jī)控制器芯片的操作接口進(jìn)行開發(fā),,一方面,通過軟件實(shí)現(xiàn)了USB硬件層的接口,,完成對(duì)USB控制器基本操作的控制,;另一方面,向上層提供了一個(gè)統(tǒng)一的接口抽象,,屏蔽了底層硬件控制器的差異,。USB主機(jī)協(xié)議驅(qū)動(dòng)層提供USB協(xié)議的主機(jī)驅(qū)動(dòng)程序,通過USB主機(jī)控制器層的抽象,,使該部分程序不依賴于具體硬件層,,利用下層的封裝接口,實(shí)現(xiàn)對(duì)USB總線的控制和管理,為上層軟件提供USB總線的訪問控制,。USB主機(jī)應(yīng)用層利用USB主機(jī)協(xié)議層驅(qū)動(dòng),,實(shí)現(xiàn)對(duì)USB外設(shè)的訪問,實(shí)現(xiàn)獨(dú)立的USB功能,,常見的USB主機(jī)應(yīng)用層功能包括USB存儲(chǔ)外設(shè)訪問控制,、USB鼠標(biāo)鍵盤訪問控制等。
2 基于PCI總線的USB接口設(shè)計(jì)
機(jī)載計(jì)算機(jī)中一般選用具有高可靠性的PowerPC系列處理器,。在PowerPC8270處理器芯片中,,集成了PCI橋功能,支持標(biāo)準(zhǔn)的PCI總線訪問控制,。本文USB主機(jī)端硬件設(shè)計(jì)選用PowerPC8270處理器,,通過PCI總線接口連接USB控制器,完成USB主機(jī)硬件功能,。USB主機(jī)核心硬件設(shè)計(jì)如圖2所示,。
如圖2所示,主機(jī)端處理器PowerPC8270芯片通過內(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,,處理器通過PCI總線實(shí)現(xiàn)對(duì)USB控制器的配置和對(duì)USB總線的訪問控制等操作。USB控制器通過I2C接口外接一片EEPROM,,用于支持系統(tǒng)信息的加載和讀取,。USB控制器接出USB總線經(jīng)過保護(hù)電路后,連接USB外設(shè),,保護(hù)電路用來防止USB總線信號(hào)因過流、過壓和ESD靜電瞬態(tài)放電而導(dǎo)致的USB控制器損壞和通信故障,。處理器通過局部的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ì)控制器的初始化及訪問控制操作,大大簡(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ù)雜的流程,,而BSP中的程序不支持調(diào)試功能。因此,,在驅(qū)動(dòng)設(shè)計(jì)和修改中,,單獨(dú)將VxWorks操作系統(tǒng)BSP中USB相關(guān)的程序作為一個(gè)部件剝離出來,添加到主機(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接口控制器的查找,,通過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è)備的讀寫訪問,。通過圖3所示流程,完成VxWorks操作系統(tǒng)下USB協(xié)議主機(jī)端軟件設(shè)計(jì),支持USB協(xié)議主機(jī)端軟件開發(fā),。
3.2 PCI橋配置
PCI總線具有性能高,、成本低、開放性和兼容性好等優(yōu)點(diǎn),,一般采用PCI專用芯片實(shí)現(xiàn)PCI總線設(shè)備的開發(fā)[3],。PowerPC8270處理器內(nèi)部集成了PCI橋功能,通過該橋?qū)崿F(xiàn)與USB控制器的訪問控制,,在USB主機(jī)端軟件開發(fā)中(如圖3所示),,首先需要進(jìn)行PCI橋的配置。在軟件上,,首先需要進(jìn)行PCI橋配置接口的設(shè)計(jì),。PowerPC8270處理器提供兩個(gè)地址寄存器,一個(gè)為PCI地址寄存器,,另一個(gè)為PCI數(shù)據(jù)寄存器,。在PCI讀操作時(shí),首先將要讀的PCI總線地址寫入PCI地址寄存器,,從PCI數(shù)據(jù)寄存器即可讀到該地址的數(shù)據(jù),;在PCI寫操作時(shí),首先將要寫入的PCI總線地址寫入PCI地址寄存器,,然后將數(shù)據(jù)寫入PCI數(shù)據(jù)寄存器,,可以完成一次寫操作。地址寄存器和數(shù)據(jù)寄存器的基址由處理器的配置字定義,,偏移地址分別為0x10900和0x10904,。USB控制器作為PCI從設(shè)備掛載在主機(jī)PCI橋下,根據(jù)USB控制器與主機(jī)的PCI總線上IDSEL信號(hào)的連接方式,,可以計(jì)算出主機(jī)訪問USB控制器的基址,。通過該基址加上偏移地址對(duì)主機(jī)與USB控制器連接的PCI配置空間進(jìn)行配置。
通過上述方法,,對(duì)PCI配置空間的基址BAR0寄存器,、命令狀態(tài)寄存器、Cache Line長(zhǎng)度,、總線延遲寄存器進(jìn)行配置,,建立通過BAR0寄存器的地址訪問USB控制器配置寄存器的通路。為了支持上層的USB軟件,,需要通過PCI總線建立處理器訪問USB控制器及USB控制器訪問處理器的雙向地址映射關(guān)系,。處理器訪問USB控制器的地址映射通過BAR0地址的配置來完成,USB控制器訪問處理器的地址映射需要通過主機(jī)PCI橋的InBound機(jī)制來配置完成,,通過配置InBound機(jī)制的寄存器,,提供一種外部設(shè)備通過PCI訪問處理器地址空間的方法,。通過PCI橋配置,實(shí)現(xiàn)雙向地址映射的示意圖如圖4所示,。
圖4中虛線框代表虛擬地址,實(shí)線框代表實(shí)際的物理空間,。圖4給出了處理器空間和USB控制器空間通過PCI橋的地址映射關(guān)系,,建立3段地址空間。處理器空間中,,通過硬件連接方式確定基址ADDR2,,作為處理器訪問控制器的256 B的PCI配置空間;通過向PCI配置中BAR0寄存器寫入ADDR3,,建立處理器訪問USB控制器自身配置寄存器空間的映射,,根據(jù)USB控制器手冊(cè)描述,該段空間大小為116 B,,處理器對(duì)USB控制器的初始化均通過該段空間完成,;通過處理器PCI橋的InBound機(jī)制,設(shè)置InBound基址,、大小寄存器,,建立控制器訪問處理器內(nèi)存空間的映射關(guān)系。在主機(jī)端USB協(xié)議棧調(diào)試時(shí),,可以通過ADDR3的映射來訪問USB控制器的寄存器,,判斷其當(dāng)前的工作狀態(tài),起到故障排查和定位的作用,。
通過PCI橋配置,,建立處理器與USB控制器的訪問地址映射,實(shí)現(xià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和斷開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è)試和讀寫速度性能測(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è)備,,分別寫入和讀取1 MB~10 MB數(shù)據(jù),測(cè)試主機(jī)端對(duì)U盤外設(shè)的讀取速率,,結(jié)果如圖5所示,。
圖5中,橫軸為每次讀或?qū)懙臄?shù)據(jù)量大小,,縱軸為所測(cè)量出來的讀寫速率,。從圖可以看出,隨著每次讀寫數(shù)據(jù)量的增大,,讀寫的速率基本保持穩(wěn)定,,而讀取的速率比寫入的速率快4 Mb/s左右,。計(jì)算平均值可得,本文設(shè)計(jì)的USB主機(jī)端寫入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è)的訪問,在工程上取得了良好的應(yīng)用,。
參考文獻(xiàn)
[1] 楊偉,劉強(qiáng),,顧新.Linux下USB設(shè)備驅(qū)動(dòng)研究與開發(fā)[J].計(jì)算機(jī)工程,,2006,32(19):283-285.
[2] 張楊,,于銀濤.VxWorks內(nèi)核,、設(shè)備驅(qū)動(dòng)與BSP開發(fā)詳解[M]. 北京:人民郵電出版社,2009.
[3] 鄧?guó)P軍,,張龍,,王益忠.基于PCI總線的HDLC通信卡的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012,,38(8):30-32.