《面向?qū)ο蟮臏y控系統(tǒng)軟件設(shè)計》課件第10章_第1頁
《面向?qū)ο蟮臏y控系統(tǒng)軟件設(shè)計》課件第10章_第2頁
《面向?qū)ο蟮臏y控系統(tǒng)軟件設(shè)計》課件第10章_第3頁
《面向?qū)ο蟮臏y控系統(tǒng)軟件設(shè)計》課件第10章_第4頁
《面向?qū)ο蟮臏y控系統(tǒng)軟件設(shè)計》課件第10章_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第10章USB總線接口的數(shù)據(jù)通信技術(shù)10.1通用串行總線(USB)技術(shù)概述10.2USB系統(tǒng)體系結(jié)構(gòu)10.3USB軟件通信技術(shù)

10.1通用串行總線(USB)技術(shù)概述

10.1.1USB的含義

當今的計算機外部設(shè)備都在追求高速度和高通用性。為了滿足用戶的需求,以Intel為首的七家公司(Intel、Compaq、Microsoft、IBM、DEC、NorthernTelecom以及NEC)于1994年11月推出了USB(UniversalSerialBus,通用串行總線)協(xié)議的第一個草案,專用于低、中速的計算機外設(shè)。近年來USB總線技術(shù)已經(jīng)成為了計算機領(lǐng)域發(fā)展最快的技術(shù)之一,并為越來越多的個人計算機界人士所接受。

USB為簡化PC與外設(shè)之間的互連提供了一種免費的標準化連接器,它支持各種PC與外設(shè)之間的連接,還可實現(xiàn)數(shù)字多媒體集成,是一種較快速的、雙向的、同步傳輸?shù)?、廉價的并可以進行熱插拔的串行接口。

在計算機工業(yè)中,USB被認為是一個具有中低速率的總線,它每秒可以處理12Mb的信息,而這一速度正是大多數(shù)商用計算機網(wǎng)絡(luò)的速度,但是在與工作速度為300Mb/s的光通道串行總線和專門用于處理音頻和視頻信號的IEEE1394等總線技術(shù)相比,USB的速度就不能稱為快了。所以,我們說USB是一種中低速的總線。

USB用來把串口、并口等不同的接口統(tǒng)一起來,使用一個4針插頭作為標準插頭。通過這個標準插頭,采用菊花鏈形式(星型結(jié)構(gòu))可以把所有的外設(shè)連接起來,并且不會損失帶寬。圖10-1給出了一個典型的USB設(shè)備網(wǎng)絡(luò)配置的示意圖。圖10-1典型的USB設(shè)備網(wǎng)絡(luò)配置

USB可把多達127個外設(shè)同時連到用戶的系統(tǒng)上,所有的外設(shè)通過協(xié)議來共享USB的帶寬,其12Mb/s的帶寬對于鍵盤、鼠標等低中速外設(shè)是完全足夠的。USB允許外設(shè)在主機和其他外設(shè)工作時進行連接、配置、使用及移除,即支持所謂的即插即用(Plug&Play)。同時,USB總線的應(yīng)用可以清除PC上過多的I/O端口,而以一個串行通道取代,使PC與外設(shè)之間的連接更容易。自從1996年2月USB規(guī)范版本1.0發(fā)布,短短幾年間,USB不光成為了微機主板上的標準端口,而且還成為了所有微機外設(shè)(包括鍵盤、鼠標、顯示器、打印機、數(shù)字相機、掃描儀和游戲柄等)與主機相連的標準協(xié)議之一。這種連接較以往普通并口(Parallelport)和串口(Serialport)的連接而言,主要的優(yōu)點是速度高、功耗低、支持即插即用和使用維護方便。10.1.2USB的優(yōu)勢

USB可以自動檢測和安裝外設(shè),實現(xiàn)真正的即插即用,支持熱插拔,即不需要關(guān)機斷電,也可以在正運行的電腦上插入或拔除一個USB設(shè)備。它將各種各樣的外設(shè)I/O端口合成一個,具有自動配置能力,用戶只要簡單地將外設(shè)插入到PC以外的總線中,PC就能自動識別和配置USB設(shè)備。USB比傳統(tǒng)的串口帶寬更大,增加外設(shè)時無需在PC內(nèi)添加接口卡,多個USB集線器可相互傳送數(shù)據(jù),使PC可以用全新的方式控制外設(shè)。USB總線結(jié)構(gòu)簡單,信號定義僅由2條電源線和2條信號線組成。隨著時間的推移,基于USB的外設(shè)將逐漸增多,現(xiàn)在滿足USB要求的外設(shè)有調(diào)制解調(diào)器、鍵盤、鼠標、光驅(qū)、游戲手柄、軟驅(qū)、掃描儀等,而非獨立性I/O連接的外設(shè)將逐漸減少。即主機控制式外設(shè)減少,智能控制式外設(shè)增多。USB總線標準由1.1版升級到2.0版后,傳輸率由12Mb/s增加到了240Mb/s,更換介質(zhì)后連接距離由原來的5米增加到近百米?;谶@點,USB也可應(yīng)用于ISDN以及基于視頻的產(chǎn)品中,如為數(shù)據(jù)手套的數(shù)字化儀提供數(shù)據(jù)接口。

USB的優(yōu)勢主要體現(xiàn)在以下幾個方面:

(1)真正的即插即用。

①自動地檢測與設(shè)置。當啟動計算機后需要再連入一個硬件外圍設(shè)備時,過去的辦法只能是將計算機關(guān)閉,然后打開機箱,插入板卡,連接線纜,再啟動計算機等一系列的操作步驟。然而現(xiàn)在有了USB接口,只需要將配有USB接口的外設(shè)插入相應(yīng)的計算機機箱上的接口,剩下的事情便完全由USB外設(shè)和主機完成。當然,這需要得到一定的操作系統(tǒng)的支持,在普遍的Windows用戶中,要注意的是必須在Windows98及其以上版本中才會支持USB接口。其中,WindowsNT是不支持的。②通用的接口。USB在誕生之初,便以盡可能方便用戶使用為目的,因此,其接口的通用性必然是其特點之一。同時,由于越來越多的用戶對USB的認可,許多計算機設(shè)備制造商都在其產(chǎn)品中加入了對USB接口的支持,因此,在市場上可以很方便地找到有USB接口的鍵盤、鼠標、光驅(qū)、硬盤、攝像頭等一系列的外圍設(shè)備。同時,這些設(shè)備接口的機械、電氣特性都是一致的,因此,在計算機上可以方便地連入這些設(shè)備。③系統(tǒng)資源的節(jié)省。正是由于不同的外設(shè)可以使用同一個USB接口,因此,操作系統(tǒng)不需為每種設(shè)備都配置不同的中斷和I/O口,從而最大限度地節(jié)省了計算機系統(tǒng)資源。同時,也是由于上述特點,用戶不必再為不同硬件使用系統(tǒng)的中斷和I/O口時產(chǎn)生的沖突而犯愁,也不必再手動地協(xié)調(diào)其分配了。

④簡易的電纜。USB使用4根電纜線完成數(shù)據(jù)傳輸,它們分別是電源線(+5V)、地線、兩條差分的數(shù)據(jù)線(D+、D-)。單獨的一條USB數(shù)據(jù)線可支持5m的傳輸距離。利用集線器,可將傳輸距離擴展至30m。⑤不需要單獨的電源。由于USB接口中攜帶了電源線和地線,因此,它可以直接從主機的接口或集線器上得到電源的供給。在中等電源供給的條件下,它完全可以滿足設(shè)備的需求。

(2)速度的提升。?在USB體系中,總共有3種數(shù)據(jù)傳輸速率:低速(LowSpeed)1.5Mb/s、全速(FullSpeed)12Mb/s、高速(HighSpeed)480Mb/s。像許多接口一樣,USB接口是向下兼容的,也就是說,最新的高速版本與USB1.1接口在機械、電氣等方面是兼容的。

(3)低功耗。USB設(shè)備的供電方式有兩種:自供電(Self-Powered)和總線供電(Bus-Powered)。所謂自供電,就是由設(shè)備自己提供電源,設(shè)備不需要從VBus上取得電流,這類設(shè)備的功率不受USB協(xié)議的限制,設(shè)計時只需要將VBus用電容連接到GND就可以了。總線供電設(shè)備完全從VBus上取得電流,它們的功率受USB協(xié)議的限制,一般不能超過500mA??偩€供電設(shè)備有兩種工作狀態(tài):一是正常工作(Normal)狀態(tài);一是掛起(Suspend)狀態(tài)。USB協(xié)議規(guī)定,如果總線供電設(shè)備在3ms內(nèi)沒有進行總線操作,即總線處于空閑態(tài),設(shè)備需要自動進入掛起狀態(tài)。掛起的設(shè)備從總線上吸收的電流必須小于500mA,而實際上協(xié)議規(guī)定的500mA包括了主機端15k?的電纜終端匹配電阻,其電流通常為220mA。所以,對于使用總線電源的設(shè)備而言,進入掛起狀態(tài)通常意味著設(shè)備的總電流功耗不能超過280mA。這個功耗值是非常低的。?總線供電設(shè)備在進入掛起狀態(tài)以后可以通過喚醒(Resume)操作恢復(fù)到正常工作狀態(tài)。喚醒操作既可以由主機發(fā)送喚醒或復(fù)位信號來觸發(fā),也可以由設(shè)備自行通過遠程喚醒操作來完成。所謂遠程喚醒,是指一個被掛起的USB設(shè)備發(fā)送信號給處于掛起狀態(tài)的主機使得主機醒來處理設(shè)備端的突發(fā)事件。10.1.3USB的用途

由前面的介紹可知,USB就是設(shè)備插架的一種規(guī)范。USB技術(shù)設(shè)計的主要目的是向廣大計算機用戶提供純粹的數(shù)字視頻和音頻信號,以實現(xiàn)通信服務(wù),所以USB的總線速度要足夠用來支持這些類型的設(shè)備。

USB把所有的輸入和輸出外設(shè)都置于機箱之外,而不使用任何擴展槽。

USB采用級聯(lián)方式,即每個USB設(shè)備用一個USB插頭連接到一個外設(shè)的USB插座上,而其本身又提供一個USB插座供下一個USB外設(shè)連接用。通過這種菊花鏈式的連接,一個USB控制器可以連接多達127個外設(shè),而每個外設(shè)間距離(線纜長度)可達5m。USB能智能識別USB鏈上外圍設(shè)備的插入或拆卸,為PC的外設(shè)擴充提供了一個很好的解決方案。有了USB技術(shù),外設(shè)的設(shè)計者就可以很自由地實現(xiàn)其方案,而無需將整個外設(shè)的功能分為設(shè)備和接口卡兩部分?,F(xiàn)在出現(xiàn)的USB音箱,就可以認為是一個USB聲卡和傳統(tǒng)音箱的結(jié)合體。同時計算機內(nèi)部總線也就不必處理在這些接口卡之間穿梭的信息流了。有了這種類型的配置,用戶可以獲得更好的整體系統(tǒng)性能。

可以說,USB技術(shù)的問世改變了傳統(tǒng)的PC機世界,簡化了不同外設(shè)與主機間的接口技術(shù)。

10.2USB系統(tǒng)體系結(jié)構(gòu)

一個USB系統(tǒng)主要被定義為三個部分:USB的互連、USB的設(shè)備和USB的主機。USB的互連是指USB設(shè)備與主機之間進行連接和通信的操作,主要包括以下幾個方面:

(1)總線的拓撲結(jié)構(gòu):USB設(shè)備與主機之間的各種連接方式。

(2)內(nèi)部層次關(guān)系:根據(jù)性能設(shè)置,USB的任務(wù)被分配到系統(tǒng)的每一個層次。

(3)數(shù)據(jù)流模式:描述了數(shù)據(jù)在系統(tǒng)中通過USB從產(chǎn)生方到使用方的流動方式。

(4)?USB的調(diào)度:USB提供了一個共享的連接,對可以使用的連接進行了調(diào)度,以支持同步數(shù)據(jù)傳輸,并且避免了優(yōu)先級判別的開銷。10.2.1總線布局技術(shù)

1.總線拓撲結(jié)構(gòu)

總線拓撲結(jié)構(gòu)包括四個重要的組成部分:

(1)主機和設(shè)備:USB系統(tǒng)的基礎(chǔ)組成部分。

(2)物理拓撲結(jié)構(gòu):描述USB系統(tǒng)中的各組成部分是如何連接起來的。

(3)邏輯拓撲結(jié)構(gòu):描述USB系統(tǒng)中各種組成部分的地位和作用,以及從主機和設(shè)備的角度觀察到的USB系統(tǒng)。

(4)客戶軟件層與應(yīng)用層的關(guān)系:描述從客戶軟件層看到的應(yīng)用層的情況,以及從應(yīng)用層看到的客戶軟件層的情況。

1)總線的物理拓撲結(jié)構(gòu)

USB連接了USB設(shè)備和USB主機,USB的物理連接是有層次性的星型結(jié)構(gòu)。每個網(wǎng)絡(luò)集線器是在星型的中心,每條線段是點點連接,如從主機到集線器或其功能部件,或從集線器到集線器或其功能部件。圖10-2給出了USB總線的物理拓撲結(jié)構(gòu)。圖10-2USB總線的物理拓撲結(jié)構(gòu)

USB系統(tǒng)的這個級聯(lián)星型拓撲結(jié)構(gòu)主要由三個基本部分組成:主機(Host)、集線器(Hub)和功能設(shè)備。

(1)主機也稱為根、根結(jié)或根Hub。它位于主板上或作為適配卡安裝在計算機上。主機包含有主控制器和根集線器(RootHub),控制著USB總線上的數(shù)據(jù)和信息的流動。在任何USB系統(tǒng)中,只有一個主機。USB和主機系統(tǒng)的接口稱做主機控制器。主機控制器可由硬件、固件和軟件綜合實現(xiàn)。根集線器是由主機系統(tǒng)整合的,用以提供更多的連接點。即每個USB系統(tǒng)只能有一個根集線器,它連接在主控制器上。

(2)集線器是USB結(jié)構(gòu)中的特定成分。它提供端口(Port)或連接點將設(shè)備連接到USB總線上,同時檢測連接在總線上的設(shè)備,并為這些設(shè)備提供電源管理,負責總線的故障檢測和恢復(fù)。集線器可為總線提供能源,亦可為自身提供能源(從外部得到電源)。自身提供能源的設(shè)備可插入到總線提供能源的集線器中,但總線提供能源的設(shè)備不能插入到自身提供能源的集線器或支持超過四個的下游端口中,如總線提供能源的設(shè)備的需要超過100mA電源時,不能同總線提供電源的集線器連接。

(3)功能設(shè)備通過端口與總線連接。USB同時可做Hub使用。

USB的設(shè)備有網(wǎng)絡(luò)集線器和功能設(shè)備。網(wǎng)絡(luò)集線器向USB提供了更多的連接點。功能設(shè)備為系統(tǒng)提供具體功能,如ISDN的連接、數(shù)字的游戲桿或揚聲器。

2)總線的邏輯拓撲結(jié)構(gòu)

在物理結(jié)構(gòu)上,設(shè)備通過集線器連到主機上。但在邏輯上,主機直接與各個邏輯設(shè)備通信,就好像它們是直接被連到主機上一樣。邏輯結(jié)構(gòu)如圖10-3所示,與之對應(yīng)的物理結(jié)構(gòu)如圖10-2所示。在圖10-3中,為了簡化起見,未畫出集線器。雖然USB系統(tǒng)中的工作都是從邏輯角度來看待的,但主機必須能夠隨時了解物理結(jié)構(gòu)。例如,當一個集線器被移出時,通過它與主機相連的設(shè)備也相應(yīng)一起移去,這是由其物理結(jié)構(gòu)決定的。圖10-3USB總線的邏輯拓撲結(jié)構(gòu)在運行中,客戶軟件必須獨立于USB上的其他設(shè)備。這樣,設(shè)備和客戶軟件的設(shè)計者就可以只關(guān)心該設(shè)備與主機硬件、客戶軟件和主機軟件的相互作用的細節(jié)問題。圖10-4說明了在圖10-3的邏輯結(jié)構(gòu)下,一個設(shè)備設(shè)計者看到的客戶軟件與相關(guān)應(yīng)用的關(guān)系的視圖。圖10-4客戶軟件和應(yīng)用間的關(guān)系

2.物理接口

1)電氣特性

USB傳送信號和電源是通過一根四線的電纜進行的,圖10-5中VBus和GND兩根線用于提供設(shè)備工作所需的電源,D+和D-兩條用于傳輸數(shù)據(jù)。信號線的特性阻抗為90?,而信號是利用差模方式送入信號線的。利用這種差模傳輸方式,接收端的靈敏度不低于200mV。圖10-5USB的電纜

USB的信號傳輸支持兩種數(shù)據(jù)傳輸率:12Mb/s的USB高速信號的比特率和1.5Mb/s的USB低速信號的比特率。低速模式需要更少的EMI保護。兩種模式可在用同一USB總線傳輸?shù)那闆r下自動地動態(tài)切換。因為過多的低速模式的使用將降低總線的利用率,所以1.5Mb/s低速率方式只支持數(shù)量有限的低帶寬的設(shè)備(如鼠標)。

USB電纜中包括VBus、GND兩條線向設(shè)備提供電源。VBus在源端的標稱值為+5V。USB對電纜長度的要求很寬,最長可為幾米。為了保證足夠的輸入電壓和終端阻抗,重要的終端設(shè)備應(yīng)位于電纜的尾部。在每個端口都可檢測終端是否連接或分離,并區(qū)分是高速還是低速設(shè)備。

2)機械特性

對于所有的USB設(shè)備而言,都有一個“上行”連接?!吧闲小?Upstream)連接器和“下行”(Downstream)連接器是不能簡單互換的,這樣可避免集線器間的非法的環(huán)路連接。一條電纜擁有四根導(dǎo)線:一對具有標準規(guī)格的雙絞信號線和一對在允許的規(guī)格范圍內(nèi)的電源線。每個連接器(無論A系列還是B系列)都具有四個接觸點,并且具有屏蔽的外殼、規(guī)定的堅固性和易于插拔的特性。

3.總線協(xié)議

USB總線屬于一種輪詢方式的總線,主機控制端口初始化所有的數(shù)據(jù)傳輸。每一次總線執(zhí)行動作最多傳送三個數(shù)據(jù)包。按照傳輸前制定好的原則,在每次傳送開始時,主機控制器發(fā)送一個描述傳輸動作的種類、方向、USB設(shè)備地址和端點(Endpoint)號的USB數(shù)據(jù)包,這個數(shù)據(jù)包通常稱為標志包(TokenPacket)。USB設(shè)備從解碼后的數(shù)據(jù)包的適當位置取出屬于自己的數(shù)據(jù)。數(shù)據(jù)傳輸方向不是從主機到設(shè)備就是從設(shè)備到主機。在傳輸開始時,由標志包來標志數(shù)據(jù)的傳輸方向,然后發(fā)送端開始發(fā)送包含信息的數(shù)據(jù)包或表明沒有數(shù)據(jù)傳送。接收端也要相應(yīng)發(fā)送一個握手的數(shù)據(jù)包表明是否傳送成功。

USB總線上的這種在主機和設(shè)備端點之間的數(shù)據(jù)傳輸模型稱之為“管道”,它共有兩種管道類型:流管道和消息管道。流管道中的數(shù)據(jù)不像消息管道中的數(shù)據(jù),它沒有USB所定義的幀結(jié)構(gòu),而且管道與數(shù)據(jù)帶寬、傳送服務(wù)類型和端口特性(如方向和緩沖區(qū)大小)有關(guān)。只要某一USB設(shè)備設(shè)置完成配置后即存在管道0。這是USB中一個特殊的管道——缺省控制管道,它屬于消息管道,當設(shè)備一啟動即存在,從而為設(shè)置設(shè)備、查詢狀況和輸入控制信息提供一個入口。事務(wù)預(yù)處理允許對一些數(shù)據(jù)流的管道進行控制,從而在硬件級上防止了對緩沖區(qū)的高估或低估。通過發(fā)送不確認握手信號可阻塞數(shù)據(jù)的傳輸速度。當不確認信號發(fā)出后,若總線有空閑,數(shù)據(jù)傳輸將再做一次。這種流控制機制允許靈活地安排任務(wù),可使不同性質(zhì)的流管道同時正常工作,以傳送不同大小的數(shù)據(jù)包。

4.系統(tǒng)設(shè)置

USB設(shè)備可以隨時安裝和拆卸,因此,系統(tǒng)軟件在物理總線布局上必須支持這種動態(tài)變化。

1)?USB設(shè)備的安裝

所有的USB設(shè)備都是通過端口接在USB上,網(wǎng)絡(luò)集線器知道這些指定的USB設(shè)備。集線器有一個狀態(tài)指示器指明在其某個端口上,USB設(shè)備是否被安裝或拆除了,主機將所有的集線器排成隊列以取回其狀態(tài)指示。在USB設(shè)備安裝后,主機通過設(shè)備控制通道激活該端口并以預(yù)設(shè)的地址值給USB設(shè)備。主機對每個設(shè)備指定唯一的USB地址,并檢測這種新裝的USB設(shè)備是集線器還是功能部件。主機為USB設(shè)備建立了控制通道,可使用指定的USB地址和零號端口。

如果安裝的USB設(shè)備是集線器,并且USB設(shè)備連在其端口上,則上述過程對每個USB設(shè)備都要重新進行一次安裝。

如果安裝的設(shè)備是功能部件,那么主機中關(guān)于該設(shè)備的軟件將因設(shè)備的連接而被引發(fā)。

2)?USB設(shè)備的拆卸

當USB設(shè)備從集線器的端口拆除后,集線器關(guān)閉該端口,并且向主機報告該設(shè)備已不存在。USB的系統(tǒng)軟件將準確進行處理。如果去除USB設(shè)備上的集線器,USB的系統(tǒng)軟件將對集線器反連在其上的所有設(shè)備進行處理。

3)總線標號

總線標號就是對連接在總線上的設(shè)備指定唯一的地址的一種動作,因為USB允許USB設(shè)備在任何時刻從USB上安裝或拆卸,所以總線標號是USB系統(tǒng)軟件始終要做的動作,而且總線標號還包括對拆除設(shè)備的檢測和處理。10.2.2USB設(shè)備

USB設(shè)備分為集線器、分配器或文本設(shè)備等種類。集線器類指的是一種專門設(shè)計用來提供額外的USB連接點的設(shè)備。USB設(shè)備必須攜帶用于自我識別和與通常的配置操作的有關(guān)信息,而且在任何時候都要表現(xiàn)出與定義的USB設(shè)備狀態(tài)相符的操作。

1.設(shè)備特性

當設(shè)備被連接、編號后,該設(shè)備就擁有一個唯一的USB地址。設(shè)備就是通過該USB地址被操作的,每一個USB設(shè)備還要支持一個或多個端點,用以實現(xiàn)和主機之間的通信。而且所有的USB設(shè)備都必須支持一個特殊的端點——端點0,該端點是USB控制管道在USB設(shè)備一側(cè)的接入點。與端點0相對應(yīng)的是用來完整描述該USB設(shè)備的信息。這些信息包括如下幾類:

(1)標準信息。這類信息是對所有USB設(shè)備都通用的定義,包括一些如廠商識別、設(shè)備類型、電源管理等內(nèi)容,還包括對設(shè)備、配置、接口及端點的描述等與該設(shè)備的配置有關(guān)的信息。

(2)類型信息。此類信息給出了不同USB的設(shè)備類的定義,該信息的定義將根據(jù)USB設(shè)備的類型而有所不同。

(3)?USB設(shè)備供應(yīng)商信息。USB設(shè)備的供應(yīng)商可自由地提供各種有關(guān)信息,但是,本規(guī)范并未對其格式做出規(guī)定。

此外,每個USB設(shè)備均提供了USB的控制和狀態(tài)信息。所有的USB設(shè)備都支持通過其USB控制管道的通用訪問模式。

2.設(shè)備描述

設(shè)備主要分為集線器和功能設(shè)備兩種。只有集線器可以提供更多的USB連接點,而功能設(shè)備為主機提供了具體的功能。

1)集線器

在即插即用的USB結(jié)構(gòu)體系中,集線器是一種關(guān)鍵元件。圖10-6所示是一種典型的集線器。從用戶的觀點出發(fā),集線器極大地簡化了USB的互連復(fù)雜性,而且以很低的費用和高易用性提供了設(shè)備的穩(wěn)定性。圖10-6典型集線器顧名思義,集線器就是電線集中器。它可讓不同性質(zhì)的設(shè)備連接在USB上,接入點在這里稱做端口。每個集線器都可將一個接入點轉(zhuǎn)化成多個接入點。這種體系結(jié)構(gòu)支持多個集線器的連接。圖10-7給出了在臺式計算機環(huán)境下的典型USB集線器體系結(jié)構(gòu)。

每個集線器的上行端口用以連接集線器和主機,另外的下行端口都可以用來連接集線器或功能設(shè)備。集線器可以發(fā)現(xiàn)下行端口上的設(shè)備插入和移出操作,并為下行設(shè)備分配電源。每一個下行端口都可以分別將其配置成高速或低速。集線器可以將低速端口與全速率信號隔離開來。一個集線器包括集線器控制器(Controller)和集線器中繼器(Repeater)。中繼器是一個位于上行和下行端口之間的、由協(xié)議控制的開關(guān)。它也具有復(fù)位和掛起/重新開始信令的硬件支持??刂破鳛楹椭鳈C之間的通信提供了接口寄存器。專用的集線器狀態(tài)和控制命令允許主機配置一個集線器,并監(jiān)視和控制其端口。圖10-7臺式機環(huán)境下的典型USB集線器體系結(jié)構(gòu)

2)功能設(shè)備

一個功能設(shè)備是指一個可以從USB總線上接收或發(fā)送數(shù)據(jù)或控制信息的USB設(shè)備。一個功能設(shè)備由一個獨立的外圍設(shè)備實現(xiàn),它通過一根電纜接入到集線器上的某一端口。但是,一個物理組件也可以僅用一根USB電纜來連接多個功能設(shè)備和一個嵌入的集線器。這稱為多功能設(shè)備。一個多功能設(shè)備對主機而言是一個永遠都接著一個或多個USB設(shè)備的集線器。

每一個功能設(shè)備都包含了用來描述其能力和所需資源的配置信息。在使用一個功能設(shè)備之前,必須由主機來對其進行配置。這種配置操作包括分配USB帶寬和為該功能設(shè)備選擇特定的配置選項。

下面給出一些功能設(shè)備的例子:

(1)定位設(shè)備,如鼠標、圖形輸入板或光筆。

(2)人工輸入設(shè)備(HID),如鍵盤。

(3)輸出設(shè)備,如打印機。

(4)電話適配器,如ISDN。

(5)軟盤驅(qū)動器,如USBZIP。

(6)視頻輸入設(shè)備,如USB數(shù)字相機。10.2.3USB主機

USB主機包括硬件和軟件兩部分。

USB主機通過主控制器與USB設(shè)備交互。主機主要負責以下操作:

(1)檢測USB設(shè)備的插入和移出。

(2)在USB主機和USB設(shè)備之間管理數(shù)據(jù)流。

(3)搜集狀態(tài)信息和活動統(tǒng)計信息。

(4)為接入的USB設(shè)備提供數(shù)額受限的功率。位于USB主機中的USB系統(tǒng)軟件用來管理USB設(shè)備和基于主機的設(shè)備軟件之間的交互。USB系統(tǒng)軟件和設(shè)備軟件之間的交互有五個方面,即設(shè)備枚舉和配置、同步數(shù)據(jù)傳輸、異步數(shù)據(jù)傳輸、電源管理以及設(shè)備和總線管理信息。

只要條件允許,USB軟件就會使用主機系統(tǒng)接口來管理上述的交互操作。例如,如果主機系統(tǒng)使用高級電源管理(APM)來進行電源管理,USB系統(tǒng)軟件就會與APM消息廣播設(shè)備相連,以便截獲掛起和重新開始指示。

USB體系結(jié)構(gòu)包含了在主控制器驅(qū)動程序和USB驅(qū)動程序之間的可擴充性,因此,實現(xiàn)由多個主控制器和相應(yīng)的主控制器驅(qū)動程序組成的應(yīng)用是可能的。10.2.4數(shù)據(jù)流類型

USB協(xié)議支持以單向或雙向的方式,在USB主機和一個USB設(shè)備之間交換功能數(shù)據(jù)和控制信息。USB的數(shù)據(jù)傳輸是在主機軟件和一個USB設(shè)備上的特定端點之間進行的。一個給定的USB設(shè)備支持多個數(shù)據(jù)傳輸端點。USB主機將分別地處理一個USB設(shè)備的任一端點和其他端點上的通信。這種USB主機軟件和一個USB設(shè)備端點之間的聯(lián)系稱為管道。比如,一個給定的USB設(shè)備可以有一個端點用來支持一個接收數(shù)據(jù)的管道,同時由另外一個端點支持一個發(fā)送數(shù)據(jù)的管道。在USB技術(shù)的體系結(jié)構(gòu)中有四種基本的數(shù)據(jù)傳輸類型:

(1)控制信息傳輸。這種數(shù)據(jù)傳送類型用于在設(shè)備接入時對其進行配置,也可用于其他目的。

(2)批量數(shù)據(jù)傳輸。在數(shù)據(jù)相對比較多和突發(fā)數(shù)據(jù)量較大時可使用批量數(shù)據(jù)傳輸,它在傳輸限制方面具有很寬的動態(tài)自由度。

(3)中斷數(shù)據(jù)傳輸。這種方式與人類的反應(yīng)特點很相似。

(4)同步或流實時數(shù)據(jù)傳輸。這種方式占用預(yù)先商量好的帶寬,并且有預(yù)先商量好的發(fā)送時延。

任一給定的管道都必須能夠支持上述的一種傳輸方式。

1.控制信息傳輸

控制數(shù)據(jù)用于在USB接入總線時對其進行配置。其他的驅(qū)動軟件可以根據(jù)具體的應(yīng)用來選擇使用控制傳輸。這種數(shù)據(jù)傳輸不會丟失數(shù)據(jù)。

2.批量數(shù)據(jù)傳輸

典型的批量數(shù)據(jù)包括像使用打印機或掃描儀時所出現(xiàn)的大數(shù)據(jù)量的數(shù)據(jù)。這種批量數(shù)據(jù)是連續(xù)的。通過在硬件中實現(xiàn)差錯檢測功能,并且有選擇地進行一定的硬件重試操作,可以在硬件層次上保證數(shù)據(jù)的可靠交換。而且,批量數(shù)據(jù)可以占有總線上所有可用的和其他傳輸類型未使用的帶寬。

3.中斷數(shù)據(jù)傳輸

由設(shè)備自發(fā)產(chǎn)生的數(shù)據(jù)傳輸是中斷數(shù)據(jù)傳輸。這類數(shù)據(jù)傳輸可以由USB設(shè)備在任意時刻發(fā)起,而且USB總線以不低于設(shè)備說明的速率進行傳輸。

典型的中斷數(shù)據(jù)包括事件指示、特性等。它們由一個或數(shù)個字節(jié)組成,例如來自一個指定設(shè)備的同步信號。盡管USB協(xié)議并不需一個明確的時鐘速率,但數(shù)據(jù)交互會有USB協(xié)議必須支持的反映時間的限制。

4.同步傳輸

同步數(shù)據(jù)在產(chǎn)生、傳送和處理過程中是連續(xù)的和實時的。在穩(wěn)定的同步數(shù)據(jù)發(fā)送和接收速率中包含了相應(yīng)的時鐘信息。為了保持定時關(guān)系,同步數(shù)據(jù)必須按照接收的速率進行傳輸。除了傳輸速率,同步數(shù)據(jù)對傳送時延非常敏感。對同步管道而言,所需的帶寬與相應(yīng)功能設(shè)備的抽樣特性有關(guān)。而時延要求則與每一端點的緩沖能力有關(guān)。

同步數(shù)據(jù)的典型例子是聲音信號。如果這些數(shù)據(jù)流的傳送速率不能保持一致,則由于緩沖區(qū)或幀結(jié)構(gòu)溢出或欠載工作,數(shù)據(jù)流會出現(xiàn)假信號。即使數(shù)據(jù)以適當?shù)乃俾蔬M行傳輸,傳送時延也會損害一些具有實時性的要求,例如電話會議。實時地傳送同步數(shù)據(jù)肯定會發(fā)生潛在的瞬時數(shù)據(jù)流丟失現(xiàn)象。換句話說,在傳輸中任何電氣方面出現(xiàn)的錯誤都不可能用像重試這樣的硬件機制來加以糾正。在實際中,USB(在多數(shù)情況下)的誤比特率很小,可以不予考慮。協(xié)議中允許在整個USB帶寬中分出一部分專門用于USB同步的數(shù)據(jù)流,從而保證了這些數(shù)據(jù)可以按所需的速率進行傳輸。USB同樣可以支持要求時延很小的同步數(shù)據(jù)傳輸。

USB協(xié)議規(guī)范中對每一種傳輸類型如何訪問總線都作出了相應(yīng)的規(guī)定。

10.3USB軟件通信技術(shù)

10.3.1USB設(shè)備的標準描述符

USB設(shè)備利用描述符來報告其屬性。一個描述符是具有一個確定格式的數(shù)據(jù)結(jié)構(gòu)。每個描述符都以一個一字節(jié)寬并包含了該描述符中的所有字節(jié)數(shù)的域為開始,再跟上一個說明描述符類型的一字節(jié)寬的域。

使用描述符可以對單獨的配置的屬性進行簡潔地存儲,這是因為每個配置都可以重用來自于那些具有相同特征的其他配置的描述符或部分描述符。在這種方式下,描述符與一個關(guān)系數(shù)據(jù)庫中的單獨的數(shù)據(jù)記錄相類似。每個描述符包括一個表明其描述符類型的值。表10-1列出了USB和HID規(guī)范定義的值。每個描述符有一個值來指定這個描述符包含的信息的類型。第7位總是0;第6位和第5位確定了描述符類型:00h=標準,01h=類,02h=銷售商,03h=保留;第4位到第0位確定了這個描述符。表10-1USB和HID規(guī)范定義的值每個描述符由一系列字段組成。這些字段名字大部分使用前綴來指明該字段中的內(nèi)容:b=B(8位),w=字(16位),bm=位圖,bcd=二進制編碼的十進制,i=指針,id=標識符。

在適當?shù)牡胤?,描述符包括了字符串描述符引用,它提供了可顯示的信息,以一種人們可以讀懂的形式來描述一個描述符。是否包括字符串描述符是可選的,但是,描述符的引用字段是必備的。如果一個設(shè)備不支持字符串描述符,則字符串引用字段必須復(fù)位為0,以指出沒有字符串描述符可用。如果一個描述符長度字段內(nèi)的返回值小于本規(guī)范定義的值,該描述符就是不正確的,并且應(yīng)該由主機來丟棄。如果一個描述符長度字段內(nèi)的返回值大于本規(guī)范定義的值,主機就會忽略多余的字節(jié),但是下一個描述符卻是利用返回的長度而不是所期望的長度來進行定位的。

類型和供應(yīng)商專用描述符可以用兩種方式之一返回。與標準描述符有關(guān)的類型和供應(yīng)商專用描述符,是在一個與標準的描述符相同的數(shù)據(jù)緩沖區(qū)之內(nèi),緊跟著相應(yīng)的標準描述符而返回的。例如,如果某一個類型或供應(yīng)商描述符同一個接口描述有關(guān),有關(guān)的類型或供應(yīng)商專用描述符會放在緩沖區(qū)內(nèi)的接口描述符和接口端點描述符之間,作為對一個Get_Con-figuration_Descriptor請求的響應(yīng)而返回。一個標準描述符的長度不會增加用來容納設(shè)備類型或某個供應(yīng)商描述符的擴展。類型或供應(yīng)商專用描述符遵循和標準描述符一樣的格式,像某個描述符的前兩個字節(jié)一樣,其前兩個字節(jié)也分別用作長度和類型字段。

與一個標準描述符無關(guān)的類型或供應(yīng)商專用描述符,可以利用類型供應(yīng)商特定的請求而返回。

1.設(shè)備描述符

設(shè)備描述符中包括有關(guān)于這個設(shè)備的基本信息。它是在設(shè)備連接時主機讀取的第一個描述符,這個描述符包括主機為了從設(shè)備得到其他信息所需要的信息。

該描述符有14個字段共17B。表10-2按它們出現(xiàn)在這個描述符中的順序列出了這些字段,這個描述符包括如下信息:描述符本身、它的配置和它的類。該描述符是根據(jù)其功能給信息分組的。表10-2設(shè)?備?描?述?符

2.配置描述符

在接收了設(shè)備描述符后,就能夠逐級得到設(shè)備的配置、接口和終端描述符了。

每個設(shè)備至少有一個描述設(shè)備特征和能力的配置。通常一個配置就足夠了,但一個多用途或模式的設(shè)備可以有多個配置,每個配置依次有一個配置描述符。配置描述符包含了關(guān)于設(shè)備的電能使用和支持的接口號的信息。主機用Set_Configuration請求選擇一個配置,并用Get_Configuration請求來讀入當前的配置。

配置描述符有8個字段。表10-3按它們出現(xiàn)在這個描述符中的順序列出了這些字段。配置描述符包括如下信息:描述符本身、配置和在該配置下設(shè)備的電能使用情況。對很多配置,一些字段是用不到的。該描述符是根據(jù)其功能給信息分組的。表10-3配?置?描?述?符該描述符描述了配置所能支持的接口數(shù)。每一個接口都可以獨立地工作。例如,一個ISDN設(shè)備可以配置成具有兩個接口,且每個接口都提供64KB/s的雙向信道,該信道在主機上擁有分離的數(shù)據(jù)源或接收器。另外一種配置可能是把這個ISDN設(shè)備配置為單個接口,將兩個信道合為一個128KB/s的雙向信道。

當主機請求配置描述符時,所有相關(guān)的接口和端點描述符都會被返回。

一個USB設(shè)備具有一個或多個配置描述符。每一個配置都有一個或多個接口,并且每個接口都有一個以上的端點。在單個配置中,一個端點不會在接口之間共享,除非該端點被同一個接口的可替換的設(shè)置所使用。端點可以在那些沒有這一限制的具有不同配置的一部分的接口之間共享。

一旦完成了配置,設(shè)備還可以支持對配置所進行的有限的調(diào)整。如果某個接口有可替換的設(shè)置,在配置之后就會選擇這個可替換的設(shè)置。在一個接口中,一個同步端點所允許的最大分組尺寸也可以被調(diào)整。

3.接口描述符

接口這個詞可以從整體描述USB,但從設(shè)備和它的描述符方面來說,接口(Interface)表示一組被一個設(shè)備的特征或功能而使用的終端。一個配置的接口描述符包含了關(guān)于這個終端的信息。每個配置必須支持一個接口,并且對很多設(shè)備來說,一個就足夠了。當使用一個設(shè)備有多種方法時,一個設(shè)備可以在一個配置中定義多個接口而不是使用多個配置。這些接口可以指定每個使用不同的終端或者可以指定每個輪流使用相同的終端。主機用一個Set_Interface請求來申請一個新的接口,并用一個Ger_Interface請求來讀取當前的接口。改變接口比改變配置容易,改變配置要影響這個設(shè)備。

一個接口描述符有9個字段。表10-4按它們在描述符中出現(xiàn)的順序列出了這些字段。該描述符是根據(jù)其功能給信息分組的。表10-4接?口?描?述?符一個接口可以包括可交接的設(shè)置,這樣可以允許端點和/或其特性在設(shè)備被配置之后發(fā)生改變。對于一個接口來說,缺省設(shè)置總是可交替的設(shè)置0。Set_Interface用于選擇一個可交替的設(shè)置或返回到缺省設(shè)置。Get_Interface請求返回所選擇的可交替的設(shè)置。

交替的設(shè)置允許設(shè)備配置的一部分發(fā)生變化,而同時其他接口可以繼續(xù)工作。如果一個配置具有交替的設(shè)置可用于一個或多個接口,那么每個設(shè)置都包括了一個分離的描述符和其相應(yīng)的端點。如果一個設(shè)備配置用兩個交替的設(shè)置來支持單個接口,那么配置描述符后會跟上一個bInterfaceNumber和bAlternateSetting域復(fù)位為0的接口描述符,然后是用于該設(shè)置的端點描述符,再跟上另外一個接口描述符及其相應(yīng)的端點描述符。第二個接口描述符內(nèi)的bInterfaceNumber域也應(yīng)該置為0,但是第二個接口描述符內(nèi)的bAlternateSetting域應(yīng)該置為1。

如果一個接口只使用端點0,那么接口描述符后就不會跟有端點描述符,并且該接口將標識一個請求接口,它使用同端點0相連的缺省管道。在這種情況下,bNumEndPoint也會被置為0。一個接口描述符決不會在端點號內(nèi)包含端點0。

4.終端描述符

除了端點0,每個在一個接口描述符中指定的終端都有一個終端描述符。終端0不需要一個描述符,因為設(shè)備描述符包含了它的最大包的大小和其他一切規(guī)范定義的消息。表10-5按它們在描述符中出現(xiàn)的順序列出了終端描述符的6個字段。該描述符是根據(jù)其功能給信息分組的。表10-5終?端?描?述?符

5.字符串描述符

一個字符串描述符包含了描述文本。USB規(guī)范中用制造商、產(chǎn)品類型、序列號、配置和接口定義了字符串描述符。一個設(shè)備也可以支持其他的字符串描述符。字符串描述符是可選擇的。表10-6顯示了這些描述符的字段和用途。字符串描述符有3個或更多個字段。表10-6字符串描述符如果一個設(shè)備不支持字符串描述符,在設(shè)備、配置和接口描述符內(nèi)的所有字符串描述符引用都必須復(fù)位0。

字符串描述符使用的是UnicodeStandard標準所定義的Unicode編碼方式(統(tǒng)一的字符編碼標準,采用雙字節(jié)對字符進行編碼)。一個USB設(shè)備內(nèi)的字符串可以支持多種語言。當請求一個字符串描述符時,請求者使用由Microsoft為Windows所定義的一個16比特的語言ID(LANGID)來說明所需要的語言。對于所有的語言,字符串索引0都將返回該設(shè)備所支持的一列兩字節(jié)的LANGID代碼。一個USB設(shè)備可以省略所有的字符串描述符。

UNICODE字符串描述符不以NULL為終止。字符串長度是通過從該描述符內(nèi)的第一個字節(jié)的數(shù)值中減去二得到的。10.3.2基于VisualBasic的USB設(shè)備顯示程序設(shè)計

由于USB支持I/O設(shè)備的動態(tài)連接和分離,定位某一設(shè)備的地址會根據(jù)它和其他已經(jīng)連接的設(shè)備的連接順序而發(fā)生變化,因此,我們不能依靠一個靜態(tài)地址來定位一個I/O設(shè)備,而是必須通過操作系統(tǒng)去訪問它的系統(tǒng)表。我們必須首先找到即插即用I/O子系統(tǒng)的根,然后尋找USB主控制器。USB主控制器有一個預(yù)定的名字“HCDx”,其中“x”是一個對應(yīng)于唯一的主控制器的數(shù)字。操作系統(tǒng)能支持多個USB主控制器,其中每一個主控制器都可以在它的12Mb/s的共享總線上支持達到26個設(shè)備。使用幾個高帶寬I/O設(shè)備的系統(tǒng)可以有多個主控制器,但這些也必須通過詢問,在找到一個USB主控制器時,它的相應(yīng)的根集線器也就被標定了。這時就要詢問這個集線器的端口是否連接了一個設(shè)備或其他集線器。如果發(fā)現(xiàn)有其他集線器,就要查詢這個集線器上的端口,所有的集線器都要查詢到USB規(guī)范規(guī)定的最大深度的級別。

1.人機接口設(shè)計

任何VisualBasic程序的第一部分總是程序的用戶視圖設(shè)計或人機接口。本例選用兩個窗體,第一個用來顯示接入的USB設(shè)備的拓撲結(jié)構(gòu),第二個顯示選定設(shè)備的描述符。圖10-8顯示打開的窗體,其中有4個按鈕,標號為主控制器0到主控制器3,還有一個狀態(tài)行和一個顯示區(qū)域。圖10-8USB設(shè)備主控制器顯示界面圖10-9是第二個窗體,它所有的設(shè)備都有一個設(shè)備描述符、至少一個配置和一個接口描述符。一個設(shè)備可以有一個或多個終端描述符,也可以有一個或多個類描述符(例如集線器、人機接口設(shè)備、通信設(shè)備)。這種人機接口的設(shè)計可以同時顯示每個描述符類型中的一個描述符。如果在這個設(shè)備上發(fā)現(xiàn)有多個描述符,在每個描述符類型的上方有一個選擇方框,則可以從中選擇一個。選擇方框還可以顯示每個描述符參數(shù)的名稱。最后一個選擇方框會顯示送到這個設(shè)備上的字符串描述符。圖10-9描述符顯示界面

2.程序初始化

在程序被加載時,VisualBasic發(fā)送一個“窗體裝入”事件給程序。如果存在一個名為Form_Load的子程序,它就會被執(zhí)行。本例就使用這個子程序?qū)ふ胰鐖D10-8所示的USB主控制器。本例最多可以尋找4個控制器,如果要求更多,則可以添加更多的“主控制器”按鈕。這些按鈕用一個數(shù)組[HCD(3)]表明,因此不需要為這些附加的按鈕建立新的軟件。如果找到了一個主控制器,程序就會使相應(yīng)的按鈕從背景色改變?yōu)榫G色并且使這個按鈕有效。有一個主控制器的系統(tǒng)標識符會存儲在按鈕的TAG字段中,以備以后使用。如果找不到一個主控制器,程序就會使相應(yīng)的按鈕的背景色改變?yōu)槌壬?,并且使按鈕無效。因此這個Form_Load子程序可以用來顯示有多少個主控制器,并且有一個提示,使用戶可以選擇其中之一來研究。

下面是Form_Load事件的代碼。PrivateSubForm_Load()

ForControllerIndex&=0To3

HostControllerName$="\\.\HCD"&ControllerIndex&

HostControllerHandle&=CreateFile(HostControllerName$,&H40000000,2,0,3,0,0)

IfHostControllerHandle&>0Then

HCD(ControllerIndex&).Tag=HostControllerHandle&

HCD(ControllerIndex&).BackColor=RGB(0,256,0)'Green=Go

HCD(ControllerIndex&).Enabled=TrueElse

HCD(ControllerIndex&).BackColor=RGB(256,128,0)'Amber=Wait

HCD(ControllerIndex&).Enabled=False

EndIf

NextControllerIndex&

StatusBox.Text="SelectaHostController"

EndSub

3.主控制器的選擇

單擊一個主控制器按鈕就會開始USB設(shè)備數(shù)據(jù)采集的過程。這就要做許多操作系統(tǒng)調(diào)用,而設(shè)計中把其中的每一個都納入到一個獨立的子程序。在每次調(diào)用以后,獨立的子程序都要做錯誤檢查,只有當沒有錯誤時,子程序才作返回。

一個Windows系統(tǒng)由許多節(jié)點組成,這些節(jié)點可以是USB設(shè)備、SCSI設(shè)備、硬盤控制器、PCI總線接口或其他設(shè)備。操作系統(tǒng)要根據(jù)I/O設(shè)備節(jié)點的詳細信息和節(jié)點的連接信息來了解所有的I/O設(shè)備。Windows為它支持的所有的I/O設(shè)備保留了符號化的名字。

(1)確定根集線器節(jié)點。有了一個主控制器的操作系統(tǒng)句柄(在Form_Load中獲得,并且存儲在按鈕的TAG字段中),我們就能用DeviceIOControl系統(tǒng)調(diào)用來得到根集線器的名字。操作系統(tǒng)要想得到這個名字,首先系統(tǒng)調(diào)用返回名字LENGTH,然后再以UNICODE格式(字符編碼格式)返回名字。接著GetNameOf$子程序再把UNICODE格式改變成VisualBasic字符串格式。

下面是關(guān)于GetNameOf$子程序的代碼。FunctionGetNameOf$(DeviceName$,DeviceHandle&,API_ID&)

DimNameBufferAsUNameType

‘?獲取根集線器名字字符串的長度

Status&=DeviceIoControl(DeviceHandle&,API_ID&,0,0,NameBuffer.Length,260,BytesReturned&,0)

IfStatus&=0ThenErrorExit(“CouldnotgetLENGTHof”&DeviceName$&“Name”)

IfNameBuffer.Length>256ThenErrorExit(Name$&"Name>256Characters")‘?以UNICODE格式(字符編碼格式)返回名字

Status&=DeviceIoControl(DeviceHandle&,API_ID&,

NameBuffer.Length,NameBuffer.Length,NameBuffer.Length,

NameBuffer.Length,BytesReturned&,0)

IfStatus&=0ThenErrorExit(“CouldnotgetTEXTof”&DeviceName$&“Name”)

temp$=“”

i=0'?把UNICODE格式改變成VB字符串格式DoWhileNameBuffer.UnicodeName(i)<>0

temp$=temp$&Chr(NameBuffer.UnicodeName(i))

i=i+2

Loop

GetNameOf$=temp$'StrConv(NameBuffer.Length,vbFromUnicode)

EndFunction可以用一個CreateFile系統(tǒng)調(diào)用做一個根集線器的連接。這個操作系統(tǒng)調(diào)用返回一個句柄,使我們能用它來檢索這個節(jié)點的信息。我們可以使用一個DeviceIOControl系統(tǒng)調(diào)用取得這個信息。RootHubNode.NodeDescriptor.PortCount對于遍歷一個設(shè)備的樹結(jié)構(gòu)是很重要的,因為它給定了與其他節(jié)點的連接個數(shù)。下面是關(guān)于根集線器描述符各字段的類型成員定義的代碼。PublicTypeHubDescriptor

LengthAsByte

HubTypeAsByte

PortCountAsByte

Characteristics(1)AsByte

PowerOn2GoodAsByte

MaxCurrentAsByte

PowerMask(63)AsByte

EndType

(2)探測根集線器連接。既然已經(jīng)確定了一組根集線器的端口,就可以向操作系統(tǒng)請求NodeConnectionInformation來確定有什么設(shè)備連接到集線器的每個端口。一個DeviceIOControl系統(tǒng)調(diào)用被用來檢索這個信息。遍歷設(shè)備的樹結(jié)構(gòu)的相關(guān)信息是USBDeciveInfo.ConnectionStatus和USBDeciveInfo.DevicelsHub??梢杂眠@些信息來確定是否還要在另一個集線器的一些端口上進行重復(fù)操作。下面是設(shè)備描述和端口連接信息中所需的類型成員定義的代碼。PublicTypeDeviceDescriptor

LengthAsByte

DescriptorTypeAsByte

USBSpec(1)AsByte

ClassAsByte

SubClassAsByte

ProtocolAsByte

MaxEP0SizeAsByteVendorID(1)AsByte

ProductID(1)AsByte

DeviceRevision(1)AsByte

ManufacturerStringIndexAsByte

ProductStringIndexAsByte

SerialNumberStringIndexAsByte

ConfigurationCountAsByte

EndTypePublicTypeNodeConnectionInformation

ConnectionIndexAsLong

ThisDeviceAsDeviceDescriptor

CurrentConfigurationAsByte

LowSpeedAsByte

DeviceIsHubAsByte

DeviceAddress(1)AsByte

NumberOfOpenEndPoints(3)AsByte

ThisConnectionStatus(3)AsByte

MyEndPoints(29)AsEndPointDescriptor

EndType4.描述符的顯示

(1)收集設(shè)備描述符信息。先要建立請求數(shù)據(jù)包,并且將其傳送到USB設(shè)備。發(fā)送任何類型的請求都用同樣的過程:對一個數(shù)據(jù)包作預(yù)先格式化,再作一個DeviceIOControl系統(tǒng)調(diào)用。為了取得一個配置描述符,要執(zhí)行兩個調(diào)用:首先取得只有18字節(jié)的配置描述符,然后使用TotalLength參數(shù)讀取全部描述符。如果選定的設(shè)備有多個配置,就要取得每個配置的數(shù)據(jù)。下面是實現(xiàn)這個數(shù)據(jù)收集的子程序。PrivateSubCollectDescriptors(Selected&)

Fori&=1To18

DescriptorData(i&)=DeviceData(Selected&).

ConnectionData.ThisDevice.Contents(i&-1)

Nexti&

Nexti&=18

DimConfigurationAsByte

DimStringIndexAsByte

Handle&=DeviceData(Selected&).DeviceHandle

ConnectionIndex&=

DeviceData(Selected&).

ConnectionData.ConnectionIndex

ConfigurationCount=DeviceData(Selected).

ConnectionData.ThisDevice.Contents(17)

ForConfiguration=1ToConfigurationCount

TotalLength&=GetConfigurationDescriptor(Handle&,ConnectionIndex&,Configuration-1)

Fori&=1ToTotalLength&

DescriptorData(Nexti&+i&)=

PCHostRequest.

ConfigurationDescriptor(i&-1)

Nexti&

Nexti&=Nexti&+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論