通用串行總線(xiàn)(USB)原理及接口設計
摘要:以USB1.1為基礎討論了USB的基本原理、工作流程、通信協(xié)議和相應的關(guān)鍵技術(shù),并介紹了一種USB接口的10M以太網(wǎng)卡的設計方案。已經(jīng)發(fā)布的USB2.0支持480Mbps的高速數據傳輸,這將使PC可以通過(guò)USB接口傳輸更高速更大量的數據。還論述了USB2.0的改進(jìn)和優(yōu)點(diǎn)。
關(guān)鍵詞:通用串行總線(xiàn)(USB) 設備驅動(dòng)程序 WDM
通用串行總線(xiàn)USB (Universal SerialBus)是Intel、Microsoft等大廠(chǎng)商為解決計算機外設種類(lèi)的日益增加與有限的主板插槽和端口之間的矛盾而于1995年提出制定的。它是一種用于將適用USB的外圍設備連接到主機的外部總線(xiàn)結構,主要用在中速和低速的外設。USB同時(shí)又是一種通信協(xié)議,支持主機和USB的外圍設備之間的數據傳輸。目前較多設備支持的是USB1.1?1?,最新的USB2.0?3?已于2000年4月正式發(fā)布。
USB設備具有較高的數據傳輸率、使用靈活、易擴展等優(yōu)點(diǎn)。
USB1.1有全速和低速兩種方式,低速方式的速率為1.5Mbps,支持一些不需要很大數據吞吐量和很高實(shí)時(shí)性的設備,如鼠標等;全速模式為12Mbps,可以外接速率更高的外設。在剛剛發(fā)布的USB2.0中,增加了一種高速方式,數據傳輸率達到480Mbps,可以滿(mǎn)足更加高速的外設的需要。
安裝USB設備不必打開(kāi)主機箱,它支持即插即用(Plug and Play) 和熱插拔(Hot Plug)。當插入USB設備的時(shí)候,主機檢測該外設并且通過(guò)自動(dòng)加載相關(guān)的驅動(dòng)程序來(lái)對該設備進(jìn)行配置,并使其正常工作。
1 USB的結構與工作原理
1.1物理結構
USB的物理拓撲結構如圖1所示。在USB2.0中,高速方式下Hub使全速和低速方式的信令環(huán)境獨立出來(lái),圖2中顯示了高速方式下Hub的作用。
通過(guò)使用集線(xiàn)器(Hub)擴展可外接多達127個(gè)外設。USB的電纜有四根線(xiàn),兩根傳送的是5V的電源,另外的兩根是數據線(xiàn)。功率不大的外圍設備可以直接通過(guò)USB總線(xiàn)供電,而不必外接電源。USB總線(xiàn)最大可以提供5V 500mA電流,并支持節約能源的掛機和喚醒模式。
1.2 USB設備邏輯結構
USB的設備可以分成多個(gè)不同類(lèi)型,同類(lèi)型的設備可以擁有一些共同的行為特征和工作協(xié)議,這樣可以使設備驅動(dòng)程序的編寫(xiě)變得簡(jiǎn)單一些。USB Forum在USB類(lèi)規范?2?中定義了USB的設備類(lèi)型,比如音頻、通信、HID、HUB等設備類(lèi)。
每一個(gè)USB設備會(huì )有一個(gè)或者多個(gè)的邏輯連接點(diǎn)在里面?每個(gè)連接點(diǎn)叫端點(diǎn)。在USB的規范中用4位地址標識端點(diǎn)地址,每個(gè)設備最多有16個(gè)端點(diǎn)。端點(diǎn)0都被用來(lái)傳送配置和控制信息。在NS公司的USB接口芯片USBN9602?4?中有7個(gè)端點(diǎn)。
管道實(shí)現了在主機的一個(gè)內存緩沖區和設備的端點(diǎn)之間的數據傳輸,連接端點(diǎn)0的叫做缺省管道。管道是具有多個(gè)特征的信道,如帶寬分配,包大小,管道類(lèi)別以及數據流向。管道有兩種類(lèi)型分別是流管道(stream pipe)和消息管道(messagepipe)。流管道傳輸的數據包的內容不具有USB要求的結構,它是單向傳輸的;流管道支持批量、等時(shí)和中斷傳輸方式。而消息管道與流管道具有不同的行為。首先,由主機發(fā)請求給USB設備,然后在適當的方向上傳輸數據,最后是到達一個(gè)狀態(tài)階段。為了保證三個(gè)階段的數據傳輸,消息管道定義了一個(gè)數據結構使命令可靠地被識別和傳輸。消息管道是雙向的,它只支持控制傳輸方式。
對于同樣性質(zhì)的一組端點(diǎn)的組合叫做接口,如果一個(gè)設備包含不止一個(gè)接口就可以稱(chēng)之為復合設備(見(jiàn)圖1)。
對于同樣類(lèi)型接口的組合可以稱(chēng)之為配置。但是每次只能有一個(gè)配置是可用的,而一旦該配置被激活,里面的接口和端點(diǎn)就都同時(shí)可以使用。主機從設備發(fā)過(guò)來(lái)的描述字中來(lái)判斷用的是哪個(gè)配置?哪個(gè)接口等等?而這些描述字通常是在端點(diǎn)0中傳送的。
1.3 USB通信分層模型
一臺主機到設備的連接需要許多層與實(shí)體之間的相互作用。USB總線(xiàn)接口層提供了主機和設備之間的物理/信令/包的連接。在系統軟件看來(lái),USB設備層執行的是一般的USB操作。功能接口層提供和應用軟件層相對應的附加功能。分層模型如圖3所示,雖然邏輯上USB設備層和功能層各自與主機上的相應層通信,但物理上都是通過(guò)USB總線(xiàn)接口層實(shí)現數據傳輸的。
1.4 四種傳輸方式
USB提供了四種傳輸方式,以適應各種設備的需要。這四種傳輸方式分別是:
控制傳輸方式:控制傳輸是雙向傳輸,數據量通常較小,主要用來(lái)進(jìn)行查詢(xún)、配置和給USB設備發(fā)送通用的命令??刂苽鬏斨饕迷谥饔嬎銠C和USB外設中端點(diǎn)0之間。
等時(shí)傳輸方式:等時(shí)傳輸提供了確定的帶寬和間隔時(shí)間。它被用于時(shí)間嚴格并具有較強容錯性的流數據傳輸,或者用于要求恒定的數據傳送率的即時(shí)應用中。例如進(jìn)行語(yǔ)音業(yè)務(wù)傳輸時(shí),使用等時(shí)傳輸方式是很好的選擇。
中斷傳輸方式:中斷方式傳送是單向的并且對于主機來(lái)說(shuō)只有輸入的方式。中斷傳輸方式主要用于定時(shí)查詢(xún)設備是否有中斷數據要傳送,該傳輸方式應用在少量的、分散的、不可預測的數據傳輸。鍵盤(pán)、游戲桿和鼠標就屬于這一類(lèi)型。
大量傳輸方式:主要應用在沒(méi)有帶寬和間隔時(shí)間要求的大量數據的傳送和接收,它要求保證傳輸。打印機和掃描儀屬于這種類(lèi)型。
在開(kāi)發(fā)USB設備時(shí)通過(guò)設置接口芯片中相應的寄存器使端點(diǎn)處于不同的工作方式。
1.5 USB通信協(xié)議
USB的物理協(xié)議規定了在總線(xiàn)上傳輸的數據格式,一個(gè)全速的數據幀有1500字節,而對于低速的幀有187字節。幀的作用是分配帶寬給不同的數據傳送方式。
一個(gè)最小的USB的數據塊叫做包,包通常有同步信號,包標識,地址、傳送的數據和CRC。包的ID由八位組成,其中后四位是糾錯位。根據包功能的不同,在USB1.1中定義了以下四類(lèi)十種:
token OUT IN SOF SETUP
data DATA0 DATA1
handshake ACK NAK STALL
special PRE
在USB2.0中又增加了幾種類(lèi)型的包以滿(mǎn)足高速傳輸的需要。其中data類(lèi)型增加了DATA2和MDATA,handshake類(lèi)型增加了NYET,special類(lèi)型則增加了ERR,SPLIT,PING,Reserved。
事務(wù)是在主機和設備之間不連續地數據交換。一個(gè)事務(wù)通常由主機開(kāi)始,一般分三個(gè)階段,第一階段發(fā)送token包,第二階段發(fā)送是data包(可以向上也可以向下),在數據包傳送完之后,就會(huì )由設備返回一個(gè)handshake包。
當客戶(hù)端程序通過(guò)一個(gè)USB管道發(fā)送或接收數據時(shí),它首先會(huì )調用Win32API,API會(huì )發(fā)送一個(gè)IRP到USB設備驅動(dòng)程序。USB設備驅動(dòng)程序的任務(wù)就是把客戶(hù)端的請求通過(guò)一個(gè)管道發(fā)送到外設合適的端點(diǎn)。為了實(shí)現這個(gè)任務(wù),USB設備驅動(dòng)程序會(huì )遞交請求給總線(xiàn)驅動(dòng)程序,總線(xiàn)驅動(dòng)程序可以把這些請求轉變成事務(wù),然后將這些事務(wù)組合成幀在總線(xiàn)上傳輸。
1.6 USB帶寬分析舉例
在USB1.1標準中將其有效的帶寬分成幀,每幀通常是1ms長(cháng)。但由于USB2.0的傳輸速率可高達480Mbps,因此在USB2.0增加了一種微幀,它只有原來(lái)幀的1/8,這使得在傳輸數據時(shí)使用更小的緩沖。在完成了系統的配置信息和連接之后,USB的主機就會(huì )對不同的端點(diǎn)和傳輸方式做一個(gè)統籌安排,用來(lái)適應它的帶寬。對全速和低速的端點(diǎn),系統為等時(shí)和中斷方式的傳輸保留整個(gè)帶寬的90%,即占每個(gè)幀時(shí)間的90%,剩下的就安排給控制方式傳送數據。在USB2.0中,對于高速的端點(diǎn),則為等時(shí)和中斷方式的傳輸保留每個(gè)微幀的80%。
以等時(shí)傳輸為例,在某個(gè)配置中作為一個(gè)等時(shí)傳輸管道的端點(diǎn),定義了它能傳輸的數據有效負載的長(cháng)度。USB系統軟件用這個(gè)長(cháng)度限制去保證足夠的總線(xiàn)時(shí)間使每幀的內容能容納最多的數據有效負載。如果有足夠的總線(xiàn)時(shí)間,配置才會(huì )建立。每個(gè)等時(shí)管道的數據有效負載可以是1,2,4,...,512,1023字節。
例如,當數據包最大有效負載為512個(gè)字節時(shí),一個(gè)全速幀(1500字節)最多可以傳輸2個(gè)這樣的包。除去協(xié)議開(kāi)銷(xiāo)的18個(gè)字節,剩余458個(gè)字節可以用于其他事務(wù)的傳輸。因此每幀有效字節數為2個(gè)包的字節即1024字節,因此最大帶寬為1.024Mbyte/s,每個(gè)包的有效字節占整個(gè)幀的35%。同樣可推算,數據有效負載長(cháng)度為64、128或256時(shí)其最大帶寬值最大,為1.28Mbyte/s。
在USB2.0高速工作方式下,每個(gè)等時(shí)管道的數據有效負載可以是1,2,4,...,2048,3072字節。當數據有效負載長(cháng)度為1024時(shí)其最大帶寬值最大,為5.7344Mbyte/s,每個(gè)包的有效字節占整個(gè)微幀的14%。
2 Windows USB驅動(dòng)程序接口
USB的驅動(dòng)程序和以往的直接跟硬件打交道的Win95的VxD(Virtual DeviceDriver)驅動(dòng)程序不同,它屬于WDM(Windows DriverModel)類(lèi)型的,Win98、Win2000等操作系統均支持該類(lèi)型的驅動(dòng)程序。WDM首先定義了一個(gè)基本的核心驅動(dòng)程序模型,處理所有類(lèi)型的數據,使驅動(dòng)程序模型的內核實(shí)現更加的固定。WDM驅動(dòng)程序還是一種分層的程序結構,可以看做是WindowsNT驅動(dòng)程序的改進(jìn),WDM驅動(dòng)程序支持即插即用、電源管理和WMI(Windows ManagementInstrumentation)特性。Win98和Win2000提供了一系列的系統驅動(dòng)程序,它們具有為許多標準類(lèi)型設備服務(wù)所需的所有基本功能。
USB的WDM驅動(dòng)程序接口框圖如圖4所示。
Windows提供了USB的系統類(lèi)驅動(dòng)程序,它處理USB上的所有底層通信,這樣其他驅動(dòng)程序就有了一個(gè)定義好的接口可以使用。USBHub.sys是USB集線(xiàn)器的驅動(dòng)程序。USBD.sys是USB類(lèi)驅動(dòng)程序,它使用圖4中UHCD.sys或OpenHCI.sys分別驅動(dòng)兩種類(lèi)型的控制器?UHCI(USB Host Controller Driver),OHCI(Open Host ControllerInterface)。當PCI枚舉器發(fā)現USB主機控制器后,就會(huì )裝入相關(guān)的驅動(dòng)程序。
通常一些設備都需要開(kāi)發(fā)者寫(xiě)一個(gè)核模式的驅動(dòng)程序來(lái)使硬件正常工作。在核模式下?驅動(dòng)程序通過(guò)IRP(I/O Request Packet)來(lái)組織和操作一些由其他部分發(fā)過(guò)來(lái)的要求和命令。而IRP又是通過(guò)URB(USB Request Blocks)來(lái)實(shí)現的。但對于一些HID(Human Interface Device)的USB設備,象鍵盤(pán)、鼠標和游戲操縱桿之類(lèi)的設備可以被操作系統自動(dòng)識別并且支持,開(kāi)發(fā)者不需要再另寫(xiě)驅動(dòng)程序。
3 USB接口10M以太網(wǎng)卡的實(shí)現
3.1 選擇器件
目前市場(chǎng)上USB的接口產(chǎn)品有兩種,一種是集成了USB接口的單片機,另一種是不帶單片機的USB接口芯片。由于前者需要專(zhuān)用的開(kāi)發(fā)機故開(kāi)發(fā)成本較高,本文將介紹一種使用廉價(jià)USB接口芯片USBN9602(NS公司)加高速的51單片機實(shí)現10M以太網(wǎng)卡的方案。
在做設計之前一定要計算好外設所要求的帶寬和USB的速度是否匹配。一個(gè)USB以太網(wǎng)卡應該包括USB通信接口(USBN9602)、8051單片機以及IEEE802.3的MAC層和物理層。USBN9602在全速工作方式下可以達到12Mbit/s,采用USBN9602基本可以滿(mǎn)足10M以太網(wǎng)的帶寬需求。為達到較高的傳輸速率,USBN9602還應該用DMA方式與單片機通信。電路框圖如圖5所示。
3.2 設計單片機控制程序
對于單片機控制程序,目前沒(méi)有任何廠(chǎng)商提供自動(dòng)生成微碼(firmware)的工具。USB單片機控制程序通常由三部分組成,第一、初始化單片機和所有的外圍電路(包括USBN9602);第二、主循環(huán)部分,其任務(wù)是可以中斷;第三、中斷句柄,其任務(wù)是對時(shí)間敏感的,必須馬上執行。
3.3 開(kāi)發(fā)USB網(wǎng)卡驅動(dòng)程序
開(kāi)發(fā)USB設備驅動(dòng)程序通常采用WindowsDDK來(lái)實(shí)現,但現在有許多第三方軟件廠(chǎng)商提供了各種各樣的生成工具,象Compuware的Driver Works,BlueWaters的DriverWizard等軟件能夠方便地生成高質(zhì)量的USB的驅動(dòng)程序。沒(méi)有DDK或WDM基礎的開(kāi)發(fā)人員可使用KRFTech公司的開(kāi)發(fā)軟件WinDriver,它的最新版本4.32已經(jīng)支持USB驅動(dòng)程序的開(kāi)發(fā)。最后的驅動(dòng)程序調試工作可以使用Compuware的Softice或Microsoft的Windows Debugger來(lái)進(jìn)行。
Windows下的網(wǎng)卡驅動(dòng)程序需符合NDIS規范(Network Driver Interface Specification)。網(wǎng)絡(luò )驅動(dòng)程序不直接調用操作系統的例程,而是通過(guò)NDIS進(jìn)行系統調用,NDIS還根據需要調用了驅動(dòng)程序提供的例程,共同完成網(wǎng)卡的功能。
USB網(wǎng)卡驅動(dòng)程序可分為NDIS中間介質(zhì)小端口驅動(dòng)程序和USB驅動(dòng)程序兩部分,然后將兩部分驅動(dòng)程序動(dòng)態(tài)連接。如果USB設備未連接和被禁止,使USB驅動(dòng)不可用,那么NDIS驅動(dòng)會(huì )返回一個(gè)NOT_AVAILABLE的狀態(tài)。這種實(shí)現方法可以保證用戶(hù)不必重新安裝NDIS或重啟就可以連接或拔掉USB設備。
4 小結與展望
目前Win98、Win2000和WinCE均支持USB設備,USB并且已經(jīng)得到了一個(gè)由450家技術(shù)公司組成的技術(shù)聯(lián)盟的支持,今后新PC都會(huì )裝有USB端口。APPLE公司更是推出了完全采用USB技術(shù)實(shí)現計算機與外設連接的新型計算機iMAC系列。市場(chǎng)上也已經(jīng)出現了越來(lái)越多的支持USB的外設,用戶(hù)將從中享受到對外設選擇范圍更廣和與外設數據交換速度更快的好處。據Dataquest公司統計結果顯示,2000年全球將會(huì )售出近1億臺USB設備。
USB2.0已經(jīng)于2000年4月27日正式發(fā)布。USB2.0將向下兼容,使用與1.1版相同的電纜、連接器、軟件接口、拓撲結構。對普通用戶(hù)來(lái)說(shuō),在使用時(shí)不會(huì )覺(jué)得有什么改變,但是USB2.0將可以達到480Mbps的高速,用戶(hù)將從2.0所提供的更高速的外設中受益。預計2000年第四季度USB2.0的外圍設備將試生產(chǎn),2001年將投入商業(yè)生產(chǎn),USB2.0使USB具有了更好的應用前景。
評論