通用串行總線USB (Universal SerialBus)是Intel、Microsoft等大廠商為解決計(jì)算機(jī)外設(shè)種類的日益增加與有限的主板插槽和端口之間的矛盾而于1995年提出制定的。它是一種用于將適用USB的外圍設(shè)備連接到主機(jī)的外部總線結(jié)構(gòu),主要用在中速和低速的外設(shè)。USB同時(shí)又是一種通信協(xié)議,支持主機(jī)和USB的外圍設(shè)備之間的數(shù)據(jù)傳輸。目前較多設(shè)備支持的是USB1.1 1 ,最新的USB2.0 3 已于2000年4月正式發(fā)布。
???? USB設(shè)備具有較高的數(shù)據(jù)傳輸率、使用靈活、易擴(kuò)展等優(yōu)點(diǎn)。
???? USB1.1有全速和低速兩種方式,低速方式的速率為1.5Mbps,支持一些不需要很大數(shù)據(jù)吞吐量和很高實(shí)時(shí)性的設(shè)備,如鼠標(biāo)等;全速模式為12Mbps,可以外接速率更高的外設(shè)。在剛剛發(fā)布的USB2.0中,增加了一種高速方式,數(shù)據(jù)傳輸率達(dá)到480Mbps,可以滿足更加高速的外設(shè)的需要。
???? 安裝USB設(shè)備不必打開(kāi)主機(jī)箱,它支持即插即用(Plug and Play) 和熱插拔(Hot Plug)。當(dāng)插入USB設(shè)備的時(shí)候,主機(jī)檢測(cè)該外設(shè)并且通過(guò)自動(dòng)加載相關(guān)的驅(qū)動(dòng)程序來(lái)對(duì)該設(shè)備進(jìn)行配置,并使其正常工作。
1 USB的結(jié)構(gòu)與工作原理
1.1物理結(jié)構(gòu)
???? USB的物理拓?fù)浣Y(jié)構(gòu)如圖1所示。在USB2.0中,高速方式下Hub使全速和低速方式的信令環(huán)境獨(dú)立出來(lái),圖2中顯示了高速方式下Hub的作用。
???? 通過(guò)使用集線器(Hub)擴(kuò)展可外接多達(dá)127個(gè)外設(shè)。USB的電纜有四根線,兩根傳送的是5V的電源,另外的兩根是數(shù)據(jù)線。功率不大的外圍設(shè)備可以直接通過(guò)USB總線供電,而不必外接電源。USB總線最大可以提供5V 500mA電流,并支持節(jié)約能源的掛機(jī)和喚醒模式。
1.2 USB設(shè)備邏輯結(jié)構(gòu)
???? USB的設(shè)備可以分成多個(gè)不同類型,同類型的設(shè)備可以擁有一些共同的行為特征和工作協(xié)議,這樣可以使設(shè)備驅(qū)動(dòng)程序的編寫(xiě)變得簡(jiǎn)單一些。USB Forum在USB類規(guī)范 2 中定義了USB的設(shè)備類型,比如音頻、通信、HID、HUB等設(shè)備類。
???? 每一個(gè)USB設(shè)備會(huì)有一個(gè)或者多個(gè)的邏輯連接點(diǎn)在里面 每個(gè)連接點(diǎn)叫端點(diǎn)。在USB的規(guī)范中用4位地址標(biāo)識(shí)端點(diǎn)地址,每個(gè)設(shè)備最多有16個(gè)端點(diǎn)。端點(diǎn)0都被用來(lái)傳送配置和控制信息。在NS公司的USB接口芯片USBN9602 4 中有7個(gè)端點(diǎn)。
???? 管道實(shí)現(xiàn)了在主機(jī)的一個(gè)內(nèi)存緩沖區(qū)和設(shè)備的端點(diǎn)之間的數(shù)據(jù)傳輸,連接端點(diǎn)0的叫做缺省管道。管道是具有多個(gè)特征的信道,如帶寬分配,包大小,管道類別以及數(shù)據(jù)流向。管道有兩種類型分別是流管道(stream pipe)和消息管道(messagepipe)。流管道傳輸?shù)臄?shù)據(jù)包的內(nèi)容不具有USB要求的結(jié)構(gòu),它是單向傳輸?shù)模涣鞴艿乐С峙俊⒌葧r(shí)和中斷傳輸方式。而消息管道與流管道具有不同的行為。首先,由主機(jī)發(fā)請(qǐng)求給USB設(shè)備,然后在適當(dāng)?shù)姆较蛏蟼鬏敂?shù)據(jù),最后是到達(dá)一個(gè)狀態(tài)階段。為了保證三個(gè)階段的數(shù)據(jù)傳輸,消息管道定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)使命令可靠地被識(shí)別和傳輸。消息管道是雙向的,它只支持控制傳輸方式。
???? 對(duì)于同樣性質(zhì)的一組端點(diǎn)的組合叫做接口,如果一個(gè)設(shè)備包含不止一個(gè)接口就可以稱之為復(fù)合設(shè)備(見(jiàn)圖1)。
???? 對(duì)于同樣類型接口的組合可以稱之為配置。但是每次只能有一個(gè)配置是可用的,而一旦該配置被激活,里面的接口和端點(diǎn)就都同時(shí)可以使用。主機(jī)從設(shè)備發(fā)過(guò)來(lái)的描述字中來(lái)判斷用的是哪個(gè)配置 哪個(gè)接口等等 而這些描述字通常是在端點(diǎn)0中傳送的。
1.3 USB通信分層模型
???? 一臺(tái)主機(jī)到設(shè)備的連接需要許多層與實(shí)體之間的相互作用。USB總線接口層提供了主機(jī)和設(shè)備之間的物理/信令/包的連接。在系統(tǒng)軟件看來(lái),USB設(shè)備層執(zhí)行的是一般的USB操作。功能接口層提供和應(yīng)用軟件層相對(duì)應(yīng)的附加功能。分層模型如圖3所示,雖然邏輯上USB設(shè)備層和功能層各自與主機(jī)上的相應(yīng)層通信,但物理上都是通過(guò)USB總線接口層實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)摹?/P>
1.4 四種傳輸方式
???? USB提供了四種傳輸方式,以適應(yīng)各種設(shè)備的需要。這四種傳輸方式分別是:
???? 控制傳輸方式:控制傳輸是雙向傳輸,數(shù)據(jù)量通常較小,主要用來(lái)進(jìn)行查詢、配置和給USB設(shè)備發(fā)送通用的命令。控制傳輸主要用在主計(jì)算機(jī)和USB外設(shè)中端點(diǎn)0之間。
???? 等時(shí)傳輸方式:等時(shí)傳輸提供了確定的帶寬和間隔時(shí)間。它被用于時(shí)間嚴(yán)格并具有較強(qiáng)容錯(cuò)性的流數(shù)據(jù)傳輸,或者用于要求恒定的數(shù)據(jù)傳送率的即時(shí)應(yīng)用中。例如進(jìn)行語(yǔ)音業(yè)務(wù)傳輸時(shí),使用等時(shí)傳輸方式是很好的選擇。
???? 中斷傳輸方式:中斷方式傳送是單向的并且對(duì)于主機(jī)來(lái)說(shuō)只有輸入的方式。中斷傳輸方式主要用于定時(shí)查詢?cè)O(shè)備是否有中斷數(shù)據(jù)要傳送,該傳輸方式應(yīng)用在少量的、分散的、不可預(yù)測(cè)的數(shù)據(jù)傳輸。鍵盤(pán)、游戲桿和鼠標(biāo)就屬于這一類型。
???? 大量傳輸方式:主要應(yīng)用在沒(méi)有帶寬和間隔時(shí)間要求的大量數(shù)據(jù)的傳送和接收,它要求保證傳輸。打印機(jī)和掃描儀屬于這種類型。
???? 在開(kāi)發(fā)USB設(shè)備時(shí)通過(guò)設(shè)置接口芯片中相應(yīng)的寄存器使端點(diǎn)處于不同的工作方式。
1.5 USB通信協(xié)議
???? USB的物理協(xié)議規(guī)定了在總線上傳輸?shù)臄?shù)據(jù)格式,一個(gè)全速的數(shù)據(jù)幀有1500字節(jié),而對(duì)于低速的幀有187字節(jié)。幀的作用是分配帶寬給不同的數(shù)據(jù)傳送方式。
???? 一個(gè)最小的USB的數(shù)據(jù)塊叫做包,包通常有同步信號(hào),包標(biāo)識(shí),地址、傳送的數(shù)據(jù)和CRC。包的ID由八位組成,其中后四位是糾錯(cuò)位。根據(jù)包功能的不同,在USB1.1中定義了以下四類十種:
???? token OUT IN SOF SETUP
???? data DATA0 DATA1
???? handshake ACK NAK STALL
???? special PRE
???? 在USB2.0中又增加了幾種類型的包以滿足高速傳輸?shù)男枰F渲校洌幔簦犷愋驮黾恿耍模粒裕粒埠停停模粒裕粒瑁幔睿洌螅瑁幔耄孱愋驮黾恿耍危伲牛裕螅穑澹悖椋幔祛愋蛣t增加了ERR,SPLIT,PING,Reserved。
???? 事務(wù)是在主機(jī)和設(shè)備之間不連續(xù)地?cái)?shù)據(jù)交換。一個(gè)事務(wù)通常由主機(jī)開(kāi)始,一般分三個(gè)階段,第一階段發(fā)送token包,第二階段發(fā)送是data包(可以向上也可以向下),在數(shù)據(jù)包傳送完之后,就會(huì)由設(shè)備返回一個(gè)handshake包。
???? 當(dāng)客戶端程序通過(guò)一個(gè)USB管道發(fā)送或接收數(shù)據(jù)時(shí),它首先會(huì)調(diào)用Win32API,API會(huì)發(fā)送一個(gè)IRP到USB設(shè)備驅(qū)動(dòng)程序。USB設(shè)備驅(qū)動(dòng)程序的任務(wù)就是把客戶端的請(qǐng)求通過(guò)一個(gè)管道發(fā)送到外設(shè)合適的端點(diǎn)。為了實(shí)現(xiàn)這個(gè)任務(wù),USB設(shè)備驅(qū)動(dòng)程序會(huì)遞交請(qǐng)求給總線驅(qū)動(dòng)程序,總線驅(qū)動(dòng)程序可以把這些請(qǐng)求轉(zhuǎn)變成事務(wù),然后將這些事務(wù)組合成幀在總線上傳輸。
1.6 USB帶寬分析舉例
???? 在USB1.1標(biāo)準(zhǔn)中將其有效的帶寬分成幀,每幀通常是1ms長(zhǎng)。但由于USB2.0的傳輸速率可高達(dá)480Mbps,因此在USB2.0增加了一種微幀,它只有原來(lái)幀的1/8,這使得在傳輸數(shù)據(jù)時(shí)使用更小的緩沖。在完成了系統(tǒng)的配置信息和連接之后,USB的主機(jī)就會(huì)對(duì)不同的端點(diǎn)和傳輸方式做一個(gè)統(tǒng)籌安排,用來(lái)適應(yīng)它的帶寬。對(duì)全速和低速的端點(diǎn),系統(tǒng)為等時(shí)和中斷方式的傳輸保留整個(gè)帶寬的90%,即占每個(gè)幀時(shí)間的90%,剩下的就安排給控制方式傳送數(shù)據(jù)。在USB2.0中,對(duì)于高速的端點(diǎn),則為等時(shí)和中斷方式的傳輸保留每個(gè)微幀的80%。
???? 以等時(shí)傳輸為例,在某個(gè)配置中作為一個(gè)等時(shí)傳輸管道的端點(diǎn),定義了它能傳輸?shù)臄?shù)據(jù)有效負(fù)載的長(zhǎng)度。USB系統(tǒng)軟件用這個(gè)長(zhǎng)度限制去保證足夠的總線時(shí)間使每幀的內(nèi)容能容納最多的數(shù)據(jù)有效負(fù)載。如果有足夠的總線時(shí)間,配置才會(huì)建立。每個(gè)等時(shí)管道的數(shù)據(jù)有效負(fù)載可以是1,2,4,...,512,1023字節(jié)。
???? 例如,當(dāng)數(shù)據(jù)包最大有效負(fù)載為512個(gè)字節(jié)時(shí),一個(gè)全速幀(1500字節(jié))最多可以傳輸2個(gè)這樣的包。除去協(xié)議開(kāi)銷的18?jìng)€(gè)字節(jié),剩余458?jìng)€(gè)字節(jié)可以用于其他事務(wù)的傳輸。因此每幀有效字節(jié)數(shù)為2個(gè)包的字節(jié)即1024字節(jié),因此最大帶寬為1.024Mbyte/s,每個(gè)包的有效字節(jié)占整個(gè)幀的35%。同樣可推算,數(shù)據(jù)有效負(fù)載長(zhǎng)度為64、128或256時(shí)其最大帶寬值最大,為1.28Mbyte/s。
???? 在USB2.0高速工作方式下,每個(gè)等時(shí)管道的數(shù)據(jù)有效負(fù)載可以是1,2,4,...,2048,3072字節(jié)。當(dāng)數(shù)據(jù)有效負(fù)載長(zhǎng)度為1024時(shí)其最大帶寬值最大,為5.7344Mbyte/s,每個(gè)包的有效字節(jié)占整個(gè)微幀的14%。
2 Windows USB驅(qū)動(dòng)程序接口
???? USB的驅(qū)動(dòng)程序和以往的直接跟硬件打交道的Win95的VxD(Virtual DeviceDriver)驅(qū)動(dòng)程序不同,它屬于WDM(Windows DriverModel)類型的,Win98、Win2000等操作系統(tǒng)均支持該類型的驅(qū)動(dòng)程序。WDM首先定義了一個(gè)基本的核心驅(qū)動(dòng)程序模型,處理所有類型的數(shù)據(jù),使驅(qū)動(dòng)程序模型的內(nèi)核實(shí)現(xiàn)更加的固定。WDM驅(qū)動(dòng)程序還是一種分層的程序結(jié)構(gòu),可以看做是WindowsNT驅(qū)動(dòng)程序的改進(jìn),WDM驅(qū)動(dòng)程序支持即插即用、電源管理和WMI(Windows ManagementInstrumentation)特性。Win98和Win2000提供了一系列的系統(tǒng)驅(qū)動(dòng)程序,它們具有為許多標(biāo)準(zhǔn)類型設(shè)備服務(wù)所需的所有基本功能。
???? USB的WDM驅(qū)動(dòng)程序接口框圖如圖4所示。
???? Windows提供了USB的系統(tǒng)類驅(qū)動(dòng)程序,它處理USB上的所有底層通信,這樣其他驅(qū)動(dòng)程序就有了一個(gè)定義好的接口可以使用。USBHub.sys是USB集線器的驅(qū)動(dòng)程序。USBD.sys是USB類驅(qū)動(dòng)程序,它使用圖4中UHCD.sys或OpenHCI.sys分別驅(qū)動(dòng)兩種類型的控制器 UHCI(USB Host Controller Driver),OHCI(Open Host ControllerInterface)。當(dāng)PCI枚舉器發(fā)現(xiàn)USB主機(jī)控制器后,就會(huì)裝入相關(guān)的驅(qū)動(dòng)程序。
評(píng)論
查看更多