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