USB筆記一頓亂記_第1頁
USB筆記一頓亂記_第2頁
USB筆記一頓亂記_第3頁
USB筆記一頓亂記_第4頁
USB筆記一頓亂記_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、47/47USB筆記一頓亂記。x51自信是永不枯竭的源泉,自信是奔騰不息的波濤,自信是急流奮進的渠道,自信是真正的成功之母。US通信可以分為兩大類:一類用來設(shè)置USB設(shè)備的配置,另一類用來設(shè)置應(yīng)用程序的通信.USB傳輸有4種類型:1控制傳輸(control rnsfer)2.中斷傳輸(iterptransfer)3。批量傳輸(ulk trnsfe)。實時傳輸(shon transfr)傳輸由事務(wù)(transaction)組成,每一筆事務(wù)由信息包(packet)所組成,每一個信息包則包含傳輸?shù)男畔ⅰC恳粋€傳輸可能包含一筆或多筆事務(wù),控制傳輸永遠有多筆事務(wù),因為它有多個階段,每一個階段包含一筆或多

2、筆事務(wù)。由于所有的傳輸都使用同一個數(shù)據(jù)路徑,每一筆事務(wù)必須包含有設(shè)備的地址,才能識別是那一個設(shè)備的事務(wù)。每一筆事務(wù)的開始,是由主機發(fā)出一個區(qū)塊的信息開始.此區(qū)塊信息包含有接收設(shè)備的地址,以及一個在設(shè)備內(nèi)稱為端點(edpoint)的特定位置.主機也有接收與傳送數(shù)據(jù)的緩沖區(qū),不過主機并沒有端點,而是當作與設(shè)備端點通信的出發(fā)點(startng ot)設(shè)備端點:一個USB設(shè)備中的惟一可尋址部分,是主機與設(shè)備之間通信的來源或目的。一個設(shè)備端點只能在單方向傳輸數(shù)據(jù),不過控制端點(contro pint)是例外,它可以雙向傳輸數(shù)據(jù)。每一個設(shè)備端點的惟一地址,需要有一個端點號碼以及方向。端點號碼可以是0-1,

3、方向如果是輸入I,表示流向主機;方向如果是輸出OUT,則表示流出主機。如果作為控制傳輸?shù)亩它c,必須設(shè)置成雙向傳輸.所以一個控制端點會有一對輸入與輸出端點,來分享同一個端點號碼。每一個設(shè)備都必須將端點0(Endpoint 0)設(shè)置成一個控制端點。除此外,很少需要額外的控制端點.除了控制傳輸之外,其他傳輸都是單向傳輸“數(shù)據(jù)”,不過“狀態(tài)與“控制”信息,則可能反向進行。除了端點0之外,一個全速設(shè)備可以有30個額外的端點。端點號碼由1-1,每一個號碼同時支持輸入與輸出.一個低速設(shè)備則只能有兩個額外的端點,方向可以任意組合。事務(wù)的類型分類如下:事務(wù)類型 數(shù)據(jù)來源 使用此事務(wù)的傳輸類型 內(nèi)容 輸入 設(shè)備

4、所有傳輸類型 一般數(shù)據(jù) 輸出 主機 所有傳輸類型 一般數(shù)據(jù)設(shè)置(set)主機 控制傳輸 要求 任何的傳輸都可能使用輸入或輸出事務(wù),但是只有控制傳輸使用設(shè)置事務(wù).當設(shè)備收到包含設(shè)備地址的輸出或設(shè)置事務(wù)時,它將接收到的數(shù)據(jù)存儲在適合的端點位置,然后觸發(fā)一個中斷.設(shè)備的中斷服務(wù)程序會處理接收到的數(shù)據(jù),然后做適當?shù)奶幚?。當設(shè)備收到包含設(shè)備地址的輸入事務(wù)時,如果設(shè)備有準備傳送給主機的數(shù)據(jù),它會從指定的端點送出數(shù)據(jù),然后觸發(fā)一個中斷。設(shè)備的中斷程序會做適當?shù)奶幚恚缓笞鲞m當?shù)奶幚?在一個傳輸發(fā)生之前,主機與設(shè)備之間必須建立一個管道(pie)。UB的管道并不是一個實際的對象,它只是設(shè)備的端點與主機控制器的軟

5、件之間的連接。每一個設(shè)備都會有一個默認控制管道(Default onoPipe),此默認控制管道使用端點.端點的描述符,用來告訴主機如何與該端點通信。描述符包括端點的地址、使用的傳輸類型、數(shù)據(jù)信息包的最大大小、以及傳輸?shù)臅r距(intervl)等。在實時傳輸與中斷傳輸時,主機會在建立管道之前檢驗有無足夠的帶寬。如果有足夠的帶寬,主機會接受設(shè)置的要求,并且保證傳輸有足夠的時間。如果沒有足夠的帶寬,主機會拒絕設(shè)置的要求。并且要求軟件必須重新嘗試一次,可能是等待有足夠的帶寬,或是選擇較小帶寬的設(shè)置??刂苽鬏敚核荱SB規(guī)范中,惟一有定義函數(shù)的傳輸類型??刂苽鬏斪屩鳈C讀取設(shè)備的信息,設(shè)置設(shè)備的地址,以及

6、選擇設(shè)置配置。所有的USB設(shè)備都必須 支持控制傳輸.中斷傳輸:使用在設(shè)備必須定時接受主機或設(shè)備注意的場合。除了控制傳輸之外,中斷傳輸是低速設(shè)備惟一傳輸數(shù)據(jù)的方式.鼠標與鍵盤利用中斷傳輸,來傳送鼠標移動與按鍵的數(shù)據(jù)。設(shè)備并不一定要支持中斷傳輸,但是一個特定的設(shè)備類別可能需要它。批量傳輸使用在傳輸速率不是很重要的場合,例如傳送文件給打印機或是從掃描儀接收數(shù)據(jù)。如果總線被其他必須保證速率的傳輸所占據(jù)時,批量傳輸就必須等待。不過當總線閑置時,批量傳輸?shù)乃俾室彩呛芸斓?只有全速與高速的設(shè)備才支持批量傳輸。設(shè)備并不一定要支持批量傳輸,但是一個特定的設(shè)備類別可能需要它.實時傳輸:有保證的傳輸速率,但是沒有錯

7、誤的檢驗。使用實時傳輸?shù)脑O(shè)備包括音頻設(shè)備,來實時播放音頻。當收到錯誤的數(shù)據(jù)時,實時傳輸是惟一不會自動重新傳送的類型,所以必須能夠容忍偶爾發(fā)生的錯誤。只有全速與高速的設(shè)備支持實時傳輸.同樣并不一定所有的設(shè)備要支持實時傳輸.管道分為消息管道(mssage ip)和流管道(steam pipe)。消息管道是雙向的管道,流管道則是沒有方向的管道.控制傳輸是惟一使用雙向的消息管道的傳輸,其他的傳輸則是使用單方向的流管道。在消息管道中,每一個傳輸以一個包含要求的設(shè)置事務(wù)開始。要完成這個傳輸,主機與設(shè)備可能交換數(shù)據(jù)與狀態(tài)信息,或是設(shè)備只傳送狀態(tài)信息。如果設(shè)備支持某個要求,它會執(zhí)行該要求的動作。如果設(shè)備不支持

8、該要求,它會反映一個碼來表示不支持。USB規(guī)范并沒有定義流管道的數(shù)據(jù)格式,設(shè)備只是接收傳來的數(shù)據(jù),主機的軟件或是設(shè)備的固件再做適當?shù)奶幚?。傳輸?shù)某跏蓟涸谠O(shè)備與其驅(qū)動程序之間要開始通信之前,傳輸必須先初始化.應(yīng)用程序使用idos提供的標準的A,來使用句柄(andle)打開一個設(shè)備的通信。應(yīng)用程序使用該句柄以及AP,來調(diào)用設(shè)備的驅(qū)動程序并且開始傳輸。應(yīng)用程序可以要求設(shè)備傳送數(shù)據(jù)過來,或是將數(shù)據(jù)傳送給設(shè)備。每一個傳輸包含一筆或多筆事務(wù)(transacton),而每一筆事務(wù)包含一個、兩個或是三個信息包(acket)。每一個信息包包含:一個信息包標識符(packtentfir,PI),CR校驗位,以及

9、額外的信息。每一筆事務(wù)包含一個令牌(oken)信息包,并且可能包含一個數(shù)據(jù)(data)與或聯(lián)絡(luò)(handhke)信息包(這時候的信息包也可以稱為相位).一個完整的傳輸,可能需要多個幀才能完成,但是一個事務(wù)是單一的通信,必須完全不能被中斷。在總線上的其他通信,不可以插入一筆事務(wù)之內(nèi)。如果是少量數(shù)據(jù)的傳輸,可能需要一筆事務(wù)。如果數(shù)據(jù)量很大,該傳輸可能分成多筆事務(wù),將數(shù)據(jù)分配在每一筆事務(wù)內(nèi)。事務(wù)的相位:每一筆事務(wù)可以有三個相位(phse),或是少于三個。這三個相位依序產(chǎn)生,分別是令牌(tokn)、數(shù)據(jù)(ata)、聯(lián)絡(luò)(hndshake)信息包。每一個相位包含一個或兩個“事務(wù)信息包”,每一個事務(wù)信息包

10、是一個區(qū)塊的固定格式的信息。每一個事務(wù)信息包的信息是以一個信息包標識符(Pke ,PD)開頭,用來作為識別之用.依據(jù)事務(wù)各類的不同,ID后面可能接著端點地址、數(shù)據(jù)、狀態(tài)信息,或是一個幀號碼以及錯誤檢驗位.在事務(wù)的令牌相位(tokn ha)中,主機傳送一個通信要求給一個令牌信息包。PD指示此事務(wù)的類型,例如輸入、輸出、Setp、或是SO(幀開始)。幀開始是一個時間參考值,主機在全速時以一毫秒的時距送出,在高速時以125us的時距送出。幀開始還包含一個幀號碼(ramenme),此號碼會加一,當達到最大值時即恢復(fù)初值.幀號碼表示幀的計數(shù),所以在一個幀的個微幀會使用相同的號碼.端點可能會與幀開始同步,

11、或是使用幀計數(shù)來當作時間的參考值。幀開始的令牌同時還會避免讓設(shè)備在沒有傳輸時進入低耗電的掛起狀態(tài).低速的設(shè)備看不到幀開始(OF)信息包,低速設(shè)備的集線器使用一個較簡單的信息包結(jié)尾(do-ake,EOP)信號,每一個幀送出一次.與全速設(shè)備一樣,O信號會避免低速設(shè)備,進入低耗電的掛起狀態(tài)。在事務(wù)的數(shù)據(jù)相位(aaph)中,主機或設(shè)備可以在一個數(shù)據(jù)信息包內(nèi),傳輸任何形式的信息。PI指示此事務(wù)的數(shù)據(jù)交替(data ogle)值.當此事務(wù)有多個數(shù)據(jù)信息包時,數(shù)據(jù)交替值用來指示數(shù)據(jù)的位置。在事務(wù)的聯(lián)絡(luò)相位(ndake phase)中,主機或設(shè)備在一個聯(lián)絡(luò)信息包內(nèi),傳送設(shè)備或聯(lián)絡(luò)信息。ID用來儲存狀態(tài)碼(CK

12、,NA,STALL,或NYET)在特殊信息包類型的種PI中,一種只能在低速的設(shè)備使用,一種只能在高速的設(shè)備使用。其他的兩種則是使用在低或全速設(shè)備的UB20集線器,在高速時與主機的通信.使用在低速設(shè)備的特殊P是PRE,RE包含一個前置碼,來告訴主機下一個信息包是低速,而且集線器應(yīng)該啟用與任何連接的低速設(shè)備的通信。在低速與全速的總線中,PR PID放在傳送到低速設(shè)備的令牌、數(shù)據(jù)、以及聯(lián)絡(luò)信息包之前。高速的總線將R編入SLIT信息包內(nèi),所以它們不是分開傳送。設(shè)備送出的低速信息包不需要一個REPID,使用在高速設(shè)備的PD只有ING。主機在使用多個數(shù)據(jù)信息包的批量或控制傳輸送出數(shù)據(jù)之前,會先送出PIG來

13、確認高速設(shè)備的端點是否忙中。設(shè)備則響應(yīng)一個狀態(tài)碼。IT D識別一個令牌信息包,是否是分割事務(wù)的一部分。US2的主機與集線器,會以高速來送出低速與全速的事務(wù),以節(jié)省總線的時間。信息包的串行化:每一筆事務(wù)都有一個令牌信息包,主機永遠是令牌信息包的來源。主機使用信息包類型,接收設(shè)備與端點,以及事務(wù)數(shù)據(jù)的方向來設(shè)置一筆事務(wù)。在全速總線的低速事務(wù)中,令牌信息包之前會有一個PRE信息包。如果是分割事務(wù),令牌信息包之前會一個LIT信息包。在令牌信息包之后可能會有數(shù)據(jù)信息包,視傳輸?shù)念愋鸵约霸O(shè)備有無數(shù)據(jù)要傳送而定.在令牌信息包中指定的方向,決定數(shù)據(jù)信息包是由主機或是設(shè)備傳。除了實時傳輸之外,所有傳輸類型在收到

14、數(shù)據(jù)信息包后都會傳回一個聯(lián)絡(luò)信息包。聯(lián)絡(luò)信息包包含一個狀態(tài)碼,來指示事務(wù)是是否成功。如果沒有收到預(yù)期的聯(lián)絡(luò)信息包,表示錯誤情況更為嚴重。時間的限制:傳輸與端點的最大信息包大小,限制了一筆事務(wù)能夠容納的數(shù)據(jù)量。一個有多筆事務(wù)的傳輸可能需要多個幀,而且?guī)槐剡B續(xù).例如一個51字節(jié)的批量傳輸,在一個事務(wù)中的最大字節(jié)數(shù)目是4,所以整個傳輸至少需要筆事務(wù)。分割事務(wù):當USB2。0的集線器與USB2.0的主機通信時,如果中間沒有插入SB1.x的集線器,它們是以高速來通信。如果有低/全速的設(shè)備連接到US2.的集線器,集線器會自動轉(zhuǎn)換需要的速度。高速傳輸比全速快了40倍,比低速快了30倍。當集線器交換低全速的

15、設(shè)備通信時,它會使用分割事務(wù)。如US20主機-USB2.的集線器-低/全速的設(shè)備,順序如下:主機初始化并且完成與集線器的開始分割事務(wù)集線器初始化并且完成與設(shè)備的事務(wù)主機初始化并且完成與集線器的完成分割事務(wù)除了實時事務(wù)之外,一筆低/全速的事務(wù)通常需要兩種分割事務(wù): 一個或多個開始分割事務(wù)(startslit transction,SPLIT)來傳送信息給設(shè)備,以及一個或多個完成分割事務(wù)(cmpetsp tnsaction,CSPIT)讓設(shè)備接收信息。實時事務(wù)不使用完成分割事務(wù),因為沒有信息需要傳回。分割事務(wù)讓總線更有效率,因為它減少了總線等待低/全速設(shè)備的響應(yīng)時間.中斷與實時傳輸有時間的限制,而

16、批量與控制傳輸則沒有。以批量與控制傳輸?shù)姆指钍聞?wù)為例,在開始分割事務(wù)的階段【主機初始化并且完成與集線器的開始分割事務(wù)】:()20主機送出開始分割令牌信息包(art-slit ten pacet,SSPLIT),后接通常的低或全速的令牌信息包,以及任何數(shù)據(jù)信息包。(2)設(shè)備的2。0集線器傳回AC或NAK。()此時主機可以自由使用總線來做其他的事務(wù),設(shè)備還不知道事務(wù)的內(nèi)容。()當集線器傳回ACK后,它必須完成與設(shè)備的事務(wù).以及繼續(xù)處理主機或其他連續(xù)設(shè)備,所傳來的任何其他事務(wù)。在完成事務(wù)的階段【集線器初始化并且完成與設(shè)備的事務(wù)】:(1)集線器將從主機收到的信息包,轉(zhuǎn)換成適合的速度,然后傳送給設(shè)備。(

17、2)集線器儲存設(shè)備的響應(yīng).依據(jù)事務(wù)的不同,設(shè)備可能傳回數(shù)據(jù)信息包、一個聯(lián)絡(luò)信息包、或是不傳回。(3)傳送到設(shè)備時,事務(wù)以預(yù)期的低或全速完成。(4)設(shè)備不知道這是一個分割事務(wù)。(5)主機還沒收到設(shè)備的響應(yīng).(6)當集線器完成與設(shè)備的事務(wù)后,主機可以初始化其他集線器也必須處理的總線交通。這兩個函數(shù)由集線器的不同硬件模塊來處理。()除了實時輸出事務(wù)以外的所有事務(wù),如果主機認為有足夠的時間完成與設(shè)備的事務(wù),它會開始與集線器的完成分割事務(wù)。在完成分割事務(wù)的階段【主機初始化并且完成與集線器的完成分割事務(wù)】:()2。主機送出一個完成分割令牌信息包(omplespli toknpacet,CSPLIT),后接

18、通常的低或全速的令牌信息包,來要求集線器從設(shè)備傳來的數(shù)據(jù)或狀態(tài)信息。(2)集線器傳回主機要求的數(shù)據(jù)或狀態(tài)碼,來完成此事務(wù)。(3)主機不會傳回CK()如果集線器沒有信息包要傳回,它傳回一個NYET狀態(tài)碼,主機會稍后再讀取.(5)設(shè)備沒有完成分割事務(wù)的設(shè)置,因為它之前已經(jīng)與集線器完成事務(wù)。中斷與實時傳輸?shù)姆指钍聞?wù),其過程與批量和控制傳輸?shù)姆指钍聞?wù)類似,但是有比較嚴格的時間限制.因為中斷與實時傳輸?shù)姆指钍聞?wù),是為了讓主機盡快地接收到設(shè)備準備的數(shù)據(jù),以及傳輸數(shù)據(jù)到設(shè)備。為了讓傳輸盡快完成,有大信息包的實時事務(wù)會使用多個開始與完成分割事務(wù),然后在每一筆分割事務(wù)中傳輸部分的數(shù)據(jù)。與批量和控制傳輸不同的是,

19、中斷與實時傳輸?shù)拈_始分割事務(wù)沒有聯(lián)絡(luò)相位。只有開始分割令牌,后接一個輸入、輸出或設(shè)置令牌.如果是輸出或設(shè)置事務(wù),后面還會有數(shù)據(jù)。在中斷事務(wù)中集線器會將開始分割,編排在預(yù)期開始與設(shè)備事務(wù)之前的微幀。例如一個幀中的微幀,以號碼依序編號為0到Y(jié)。如果開始分割是Y,集線器與設(shè)備的事務(wù)最早會在Y1開始.設(shè)備傳回到主機的數(shù)據(jù)或聯(lián)絡(luò)響應(yīng),最早會在Y2開始.當設(shè)備的事務(wù)真的發(fā)生時,前一個事務(wù)的結(jié)果與補充的位會有影響。所以主機將完成分割事務(wù),編排在Y,Y,與Y4。如果集線器在完成分割時還沒有信息傳回,它會傳回一個NYET狀態(tài)碼,然后主機再試一次。聯(lián)絡(luò)信號 :USB使用狀態(tài)與控制或聯(lián)絡(luò)信息來管理數(shù)據(jù)的流動.如果接

20、口使用硬件的聯(lián)絡(luò),特定的信號線會攜帶聯(lián)絡(luò)的信息,如果接口使用軟件的聯(lián)絡(luò),攜帶數(shù)據(jù)的信號線同時也攜帶聯(lián)絡(luò)碼。B使用軟件的聯(lián)絡(luò).除了實時傳輸外,事務(wù)是否成功是以一個狀態(tài)碼來指示。在控制傳輸中,狀態(tài)階段(Satus Sg)會激活一個設(shè)備,來報告整個傳輸是否成功。大部分的聯(lián)絡(luò)信號是在聯(lián)絡(luò)信息包中傳輸,有些則是使用數(shù)據(jù)信息包。S定義的聯(lián)絡(luò)信號狀態(tài)碼是ACK、NA、STALL、NET、E。AK:ACK(aknowedge)狀態(tài)碼表示主機或是設(shè)備已經(jīng)成功地接收到數(shù)據(jù)。設(shè)備必須在設(shè)置事務(wù)的聯(lián)絡(luò)信息包中傳回K,同時也可以在輸出事務(wù)的聯(lián)絡(luò)信息包中傳回AK。主機則是在輸入事務(wù)的聯(lián)絡(luò)信息包中傳回ACK。NK:NAK(

21、negiv aknowledge)狀態(tài)碼表示設(shè)備在忙中。如果主機在設(shè)備忙時傳送數(shù)據(jù)給設(shè)備,設(shè)備會在聯(lián)絡(luò)信息包傳回NAK。如果主機在設(shè)備沒數(shù)據(jù)傳送時要求數(shù)據(jù),設(shè)備會在數(shù)據(jù)信息包中傳回NK.NK代表暫時的狀態(tài),主機會稍后重新嘗試。主機不會送出NAK狀態(tài)碼.實時的端點不支持NA,因為它沒有聯(lián)絡(luò)信息包來傳回NA.如果主機或設(shè)備漏了實時數(shù)據(jù),該數(shù)據(jù)就此消失.STAL:它有種意義:(1)不支持的控制要求()控制要求失敗(3)端點失敗當設(shè)備接收到端點不支持的控制傳輸要求時,設(shè)備會傳回一個STAL給主機.如果設(shè)備支持該控制傳輸要求,但是無法響應(yīng)要求,它也會傳回一個TLL給主機。例如主機送出一個Set_onfi

22、gurain要求,來要求設(shè)備配置為2.但是設(shè)備只支持配置1,這時設(shè)備會傳回一個S.要清除STLL狀態(tài),主機必須送出另一個設(shè)置信息包,來開始一個新的控制傳輸。當端點的暫停(Halt)特性設(shè)置時,設(shè)備也會傳回STALL。因為端點的暫停特性,表示端點無法傳送或接收數(shù)據(jù)。批量與中斷端點必須支持功能的STAL(funcionalTAL)??刂贫它c也可以支持功能的TALL,不過UB不建議您這樣做,實時端點不支持AL,因為它沒有聯(lián)絡(luò)信息包來傳回STALL。當主機收到一個功能的STAL時,它會丟棄所有給設(shè)備的要求.在送出成功的要求來清除設(shè)備的暫停特性之前,主機不會恢復(fù)通信。NYET:NY表示not yet。只

23、有高速設(shè)備才使用NET。高速的批量與控制傳輸有一個增強的協(xié)議,讓主機可以在送出數(shù)據(jù)前先知道設(shè)備是否已經(jīng)準備好接收。在低速與全速時,當主機要在控制、批量與中斷傳輸中送出數(shù)據(jù)時,它會送出令牌與數(shù)據(jù)信息包。然后從事務(wù)的聯(lián)絡(luò)信息包中,收到設(shè)備的響應(yīng)。如果設(shè)備還沒有準備好,它會傳回一個AK讓主機稍后再重新嘗試。如果數(shù)據(jù)信息包很大,而且設(shè)備常常還沒準備好,這種模式的傳輸會浪費許多的總線時間.多數(shù)據(jù)信息包的高速批量與控制事務(wù),有更好的處理方式.在收到一個數(shù)據(jù)信息包后,設(shè)備的端點可以傳回一個YT聯(lián)絡(luò)信號.這個NYET表示數(shù)據(jù)可以接受,但是端點還沒有準備好接收另一個數(shù)據(jù)信息包。當主機認為設(shè)備可能準備好時,它會送

24、出一個ING令牌信息包。設(shè)備則是傳回一個ACK來表示O,或是傳回NAK或TALL來表示不OK。只傳送一個PING信息包,比傳送整個數(shù)據(jù)信息包來的有效率。即使端點對PIN或輸出響應(yīng)ACK狀態(tài)碼,它仍然可以在收到后來的數(shù)據(jù)信息包時傳回NAK,不過此種情況比較罕見.此時主機必須再使用另一個PNG,來重試一次。2。0的集線器也可能在完成分割事務(wù)時使用ET,主機與低全速的設(shè)備則不會送出T??刂苽鬏?shù)臓顟B(tài):AC、NK、SAL除了用在表示事務(wù)的狀態(tài)外,也可以用來表示控制傳輸?shù)某晒εc否。在主機到設(shè)備的數(shù)據(jù)階段(aa stage)中,控制傳輸?shù)耐瓿膳c否由一個零長度數(shù)據(jù)信息包的額外狀態(tài)碼來表示.如果是控制寫入(o

25、ntrolWit)的傳輸,設(shè)備在數(shù)據(jù)階段(Daasage)接收數(shù)據(jù)。傳輸?shù)臓顟B(tài)在狀態(tài)階段(Sttsstge)的數(shù)據(jù)信息包內(nèi)傳回.一個零長度數(shù)據(jù)信息包表示傳輸成功,否則設(shè)備會傳回NA或ALL.此時主機在狀態(tài)階段的聯(lián)絡(luò)信息包內(nèi)傳回一個AC,表示它已經(jīng)收到響應(yīng)。如果是控制讀取(contoRead)的傳輸,主機在數(shù)據(jù)階段接收數(shù)據(jù)。設(shè)備在狀態(tài)階段的聯(lián)絡(luò)信息包內(nèi)傳回傳輸?shù)臓顟B(tài)。主機通常會等待接收所有在數(shù)據(jù)階段的信息包,然后在狀態(tài)階段發(fā)出一個零長度的數(shù)據(jù)信息包.設(shè)備使用ACK、NAK或STLL來響應(yīng)。如果主機在送出所有數(shù)據(jù)信息包前開始狀態(tài)階段,設(shè)備必須放棄數(shù)據(jù)階段并且傳回一個狀態(tài)碼。數(shù)據(jù)的檢驗:USB的信息

26、包包含了錯誤檢驗的位,讓接收端識別接收的數(shù)據(jù)與傳送的數(shù)據(jù)是否符合。如果是需要多筆事務(wù)的傳輸,一個數(shù)據(jù)交替數(shù)值(datatoggl )會保持發(fā)送端與接收端同步,來保證沒有事務(wù)會遺失掉。(1)錯誤檢驗位(2)數(shù)據(jù)交替位在需要多筆事務(wù)的傳輸中,數(shù)據(jù)交替位(dat-toggl bit)通過讓發(fā)送端與接收端同步,來保證沒有事務(wù)遺失。數(shù)據(jù)交替位是包含在輸入與輸出事務(wù)的令牌信息包的PID字段中,AT0是001的碼,DAA1是1011的碼,所以位表示數(shù)據(jù)交替的狀態(tài)。在控制器芯片中,一個緩存器位通常用來指示數(shù)據(jù)交替的狀態(tài)。此位的另一個名稱是DATA0/,或是DATA1/0(!)。發(fā)送端與接收端都會追蹤數(shù)據(jù)交替的

27、狀態(tài).在配置設(shè)備時,兩者的位都設(shè)置成DAT0。當接收到端檢測到一筆進來的數(shù)據(jù)事務(wù)時,它會將收到的數(shù)據(jù)交替位與它自己的數(shù)據(jù)交替狀態(tài)做比較。如果該位符合,接收端會交替它的位,然后傳回一個CK聯(lián)絡(luò)信息包給發(fā)送端。此AK信號讓發(fā)送端交替它的位??刂苽鬏斢袃蓚€功能:(1)攜帶SB規(guī)范定義的要求,讓主機了解設(shè)備的功能與設(shè)置配置(2)攜帶群組或廠商定義的要求每一個設(shè)備必須在端點(EndPont0)的默認管道,支持控制傳輸。控制傳輸使用兩個或三個階段的結(jié)構(gòu),包括設(shè)置、數(shù)據(jù)(選擇性的)與狀態(tài)。每一個階段可以包含一筆或多筆事務(wù)。每一個控制傳輸都必須有設(shè)置與狀態(tài)階段,數(shù)據(jù)階段則是選擇性的。由于控制傳輸是雙向的傳輸,

28、所以控制傳輸?shù)南⒐艿?同時使用端點的輸入與輸出地址 。在控制寫入(control write)的傳輸中,在數(shù)據(jù)階段的數(shù)據(jù)是由主機流向設(shè)備。在控制讀取(conrol ead)的傳輸中,在數(shù)據(jù)階段的數(shù)據(jù)是由設(shè)備流向主機.在設(shè)置階段,主機送出要求來開始設(shè)置事務(wù).令牌信息包包含有一個P,來指示這是一個控制傳輸。數(shù)據(jù)信息包包含有要求的信息,例如要求號碼,此傳輸有無數(shù)據(jù)階段,以及數(shù)據(jù)傳輸?shù)姆较虻?USB規(guī)范定義了11個標準的要求.有些要求設(shè)備必須響應(yīng),例如設(shè)備的地址。另外的要求,設(shè)備可以傳回一個狀態(tài)碼來表示是否支持。設(shè)備也可能支持群組或是廠商定義的要求.如果數(shù)據(jù)階段存在的話,此階段會包含有一筆或多筆輸入

29、或輸出事務(wù).依照要求的種類,數(shù)據(jù)事務(wù)的來源可能是主機或是外圍設(shè)置。在數(shù)據(jù)階段的所有數(shù)據(jù)信息包,必須是相同方向。高速的控制寫入傳輸,在數(shù)據(jù)階段有一個以上的數(shù)據(jù)信息包。如果設(shè)備在收到一個數(shù)據(jù)信息包后傳回NYET,主機會在送出下一個信息包前使用ING協(xié)議。在狀態(tài)階段,包含有一筆輸入或輸出事務(wù),設(shè)備會報告上一個階段是否成功。在狀態(tài)階段的數(shù)據(jù)信息包來源,是上一筆數(shù)據(jù)事務(wù)的數(shù)據(jù)接收者.如果沒有數(shù)據(jù)階段,送出狀態(tài)階段的數(shù)據(jù)信息包的是設(shè)備。設(shè)備在狀態(tài)階段送出的數(shù)據(jù)或聯(lián)絡(luò)信息包,包含有一個狀態(tài)碼來指示設(shè)置與數(shù)據(jù)階段的傳輸是否成功。如果主機在高速總線上,執(zhí)行低/全速設(shè)備的控制傳輸.主機會使用分割事務(wù),來執(zhí)行所傳輸

30、事務(wù)。信息包大?。涸跀?shù)據(jù)階段的數(shù)據(jù)信息包大小,視設(shè)備的速度而定。如果是低速的設(shè)備,數(shù)據(jù)信息包大小最大是8字節(jié)。如果是全速的設(shè)備,數(shù)據(jù)信息包大小最大可以是、1、2或64字節(jié).如果是高速的設(shè)備,數(shù)據(jù)信息包的大小必須是4字節(jié)。此大小只包含數(shù)據(jù)信息包的傳輸信息,而不包含I與RC位。除了最后一個數(shù)據(jù)信息包,所有數(shù)據(jù)信息包都必須是最大信息包大小。主機在檢測時從描述符中,讀取最大信息包的大小.對默認控制管道而言,大小為設(shè)備描述符的大小。對其他控制端點而言,大小為端點描述符的大小。在有些控制讀取傳輸中,設(shè)備傳回的數(shù)據(jù)量可能不同。如果設(shè)備傳回的數(shù)據(jù)量比要求的字節(jié)少,在響應(yīng)下一個輸入令牌信息包時,設(shè)備應(yīng)該傳回一個

31、零字節(jié)的數(shù)據(jù)信息包,來指示已經(jīng)沒有數(shù)據(jù)可傳回.傳輸速度:主機控制器保留了部分帶寬給控制傳輸用,如果是低/全速比值是%,如果是高速此值是20。如果控制傳輸不需要用到這么多,批量傳輸可以使用剩下來的的部分。如果總線有不使用的帶寬,控制傳輸可以使用多于保留的值。主機會盡量將能使用的時間,分配給所有的傳輸。一個幀或微幀可以包含多筆事務(wù),一筆事務(wù)也可以分配在不同的幀或微幀中.USB并沒有規(guī)定控制傳輸只能使用在設(shè)備配置上,換句話說控制傳輸也可以用來傳輸其他的數(shù)據(jù).控制傳輸使用數(shù)據(jù)交替位,來保證沒有數(shù)據(jù)遺失掉。在一個控制讀取傳輸?shù)臄?shù)據(jù)階段,主機在收到一個設(shè)備傳來的數(shù)據(jù)信息包后,通常會傳回一個ACK,然后送出

32、一個輸出令牌信息包,來開始狀態(tài)階段。批量傳輸:批量傳輸(blk transfer)適合使用在時間不重要的傳輸.批量傳輸可以傳輸大量的數(shù)據(jù)而不會阻塞總線,因為它會讓其他傳輸類型先執(zhí)行,等待有可以傳輸?shù)臅r間。使用批量傳輸?shù)陌◤闹鳈C傳送數(shù)據(jù)到打印機,從掃描儀傳送數(shù)據(jù)給主機,以及讀/寫磁盤等。在一個閑置的總線中,批量傳輸是最快的傳輸類型.只有全速與高速設(shè)備,才可以使用批量傳輸。批量傳輸包含一個或多個輸入或輸出事務(wù)。批量傳輸是單方向的的傳輸,所有的事務(wù)必須全部是輸入事務(wù),或是全部是輸出事務(wù)。要做雙向的傳輸,必須有另一個分開的管道。當所要求的數(shù)據(jù)量已經(jīng)傳輸完,或者當一個信息包含有少于最大數(shù)據(jù)(包含一個零

33、長度信息包)時,批量傳輸即結(jié)束。一個全速的批量傳輸,最大的信息包大小可以是8、16、32或6字節(jié)。高速的批量傳輸,最大的信息包大小必須是52字節(jié)。在檢測設(shè)備的過程中,主機從設(shè)備的描述符中讀取每一個批量管道的最大信息包大小。數(shù)據(jù)傳輸?shù)牧靠梢孕∮凇⒌扔诨虼笥谧畲笮畔拇笮 H绻麛?shù)據(jù)沒有辦法放在一個信息包內(nèi),主機會使用多筆事務(wù)來完成傳輸。中斷傳輸:中斷傳輸(inrup trnser)使用在必須在指定時間內(nèi)傳輸完的數(shù)據(jù)上。一般的應(yīng)用包括鍵盤、鼠標、游戲桿以及集線器的狀態(tài)報表國.低速的設(shè)備只支持控制與中斷傳輸,有可能將中斷傳輸應(yīng)用在一般數(shù)據(jù)的傳輸上。idos包含有啟用設(shè)備中斷傳輸?shù)尿?qū)動程序。只要設(shè)備符

34、合HI(hmainerface de,人機接口設(shè)備)規(guī)范,應(yīng)用程序就可以執(zhí)行設(shè)備的中斷傳輸。在低速與全速時,中斷端點能夠得到的帶寬是有限的。高速的限制較寬,它讓中斷端點以全速的40倍來傳輸。中斷傳輸與其他USB傳輸一樣,只發(fā)生在主機輪詢設(shè)備的時候,并不是由設(shè)備觸發(fā)的硬件中斷。低速、中速與高速設(shè)備都支持中斷傳輸.設(shè)備并不一定都需要支持中斷傳輸,但是一個設(shè)備類別可能需要。例如類別的設(shè)備,支持中斷輸入傳輸來傳送數(shù)據(jù)給主機。一個中斷傳輸包含有一筆或多筆輸入事務(wù),或是一筆或多筆輸出事務(wù)。中斷傳輸?shù)慕Y(jié)構(gòu)與批量傳輸相同。惟一的差別是在日程(sheu)上。中斷傳輸是單向的傳輸,所有的事務(wù)必須全部是輸入事務(wù),或

35、是全部是輸出事務(wù).要做雙向的中斷傳輸,必須有另一條管道。當所要求的數(shù)據(jù)已經(jīng)全部傳完,或是數(shù)據(jù)信息包(包含零長度數(shù)據(jù)信息包)包含的數(shù)據(jù)小于最大數(shù)據(jù)時,中斷傳輸即告結(jié)束。在高速總線上與低或全速設(shè)備做中斷傳輸時,主機使用侵割事務(wù)來傳輸所有的事務(wù)。與高速批量輸出傳輸不同的是,高速中斷輸出傳輸在有多筆事務(wù)的傳輸上不使用PIN協(xié)議。低速的設(shè)備,最大的信息包大小可以是1-字節(jié).全速的設(shè)備,最大的信息包大小可以是16字節(jié).高速的設(shè)備,最大的信息包大小可以是1-1024字節(jié)。如果在一筆事務(wù)內(nèi)無法傳輸完全部的數(shù)據(jù),主機會使用多筆事務(wù)來完成傳輸。傳輸速度:中斷傳輸會保證最大延遲(aximu lenc),也就是事務(wù)之

36、間的時間。中斷傳輸沒有保證的傳輸速率,而是保證事務(wù)之間的時間不會超過最大延遲值。最大延遲是由儲存在設(shè)備內(nèi)的端點描述符指定.如果是低速的設(shè)備,最大延遲可以在12ms之間。如果是全速的設(shè)備,最大延遲可以在1255ms之間。如果是高速的設(shè)備,最大延遲可以在125u-4s之間(以微幀的寬度125us為單位)因為主機可以使用大于要求速率的速度來傳輸數(shù)據(jù),所以中斷傳輸無法保證一個正確的傳送速率,惟一的例外是最大延遲等于最大可能速率的時候。實時傳輸:實時傳輸(ishronostansfe)適用在以固定速率或特定時間內(nèi)傳輸,可以容忍錯誤的串流數(shù)據(jù)上.在全速時每個幀可傳輸?shù)臄?shù)據(jù),實時傳輸比中斷傳輸多。實時傳輸?shù)?/p>

37、應(yīng)用包括實時的語音與音樂,不過使用固定速率的數(shù)據(jù)并不一定需要實時傳輸。例如主機可以使用批量傳輸,來傳送一個音樂文件給設(shè)備。設(shè)備在收到該音樂文件后,再以適當?shù)乃俾蕘聿シ拧崟r傳輸是保證大量數(shù)據(jù)可以盡快地通過總線的方式,數(shù)據(jù)不一定要以固定速率來傳輸。與批量傳輸不同的是,一旦實時傳輸開始,主機保證可以在預(yù)期的時間內(nèi)完成。只有全速與高速設(shè)備,可以做實時傳輸,設(shè)備并不一定要支持實時傳輸,不過設(shè)備群組可能需要它。所謂實時表示在每一個幀或微幀內(nèi),必須傳輸一個固定數(shù)目的字節(jié)數(shù)據(jù)。除了實時傳輸之外,其他的傳輸類型都不能夠保證每個幀內(nèi)會有指定數(shù)目的字節(jié)數(shù)據(jù)。一個全速的實時傳輸,在每個幀內(nèi)包含有一筆輸入或輸出事務(wù)。

38、高速的實時傳輸比較有彈性,最多可以在每個微幀內(nèi)包含有3筆事務(wù),最少可以在每32768個微幀內(nèi)包含有1筆事務(wù).檢測設(shè)備:在應(yīng)用程序能夠與設(shè)備通信之前,主機必須先了解該設(shè)備的設(shè)置與能力,并且指定給該設(shè)備一個驅(qū)動程序。檢測設(shè)備(emeton)就是主機與設(shè)備最初的數(shù)據(jù)交換過程,讓主機知道設(shè)備的設(shè)置與功能。檢測設(shè)備的過程包括:()指定設(shè)備的地址 (2)從設(shè)備內(nèi)讀取數(shù)據(jù)結(jié)構(gòu)()指定與加載一個設(shè)備驅(qū)動程序(4)從接收的數(shù)據(jù)選項中選擇一個適當?shù)脑O(shè)置在檢測設(shè)備的過程后,設(shè)備已經(jīng)設(shè)置好并且可以開始傳輸.檢測設(shè)備的過程:集線器的一個重要工作,就是檢測設(shè)備是否連接還是移除。每一個集線器都有一個中斷輸入管道(nterr

39、upt IN ipe),將這些連接狀況報告給主機。當系統(tǒng)開機的時候 ,主機會以輪詢其根集線器來得知有哪些設(shè)備是連接的,其中也包括額外的集線器與設(shè)備。在開機后主機會繼續(xù)定時地輪詢,來看看有哪些設(shè)備是新連接,哪些則已經(jīng)移除。為了要了解一個新設(shè)備,主機會送出一連串的要求給設(shè)備的集線器,讓集線器建立主機與設(shè)備之間的通信管道。接著主機送出包含標準B要求的控制傳輸,給設(shè)備的端點0(Edpon0)。所有的USB設(shè)備都必須支持控制傳輸,標準USB要求,以及端點0。設(shè)備必須響應(yīng)要求的信息,并且采取適當?shù)膭幼?。從用戶的觀點來看,檢測設(shè)備的過程應(yīng)該是自動執(zhí)行,除非是ido聲明發(fā)現(xiàn)了新的設(shè)備,或是在設(shè)置時發(fā)生了錯誤.

40、通常在設(shè)備的第一次設(shè)置時,用戶必須提供包含設(shè)備的if文件與驅(qū)動程序的磁盤。在檢測設(shè)備的過程完成后,Ww會將檢測到的新設(shè)備加入到控制面板的設(shè)備管理器名冊內(nèi)。檢測的步驟:在檢測設(shè)備的過程中,設(shè)備會經(jīng)過USB規(guī)范定義的4個狀態(tài):(1) 開機(Powered)(2) 默認(Defat)(3) 地址(Adress)(4) 配置(Cofigued)USB規(guī)范共定義了個設(shè)備狀態(tài),另外兩個是:()連接(Atched)() 掛起(spend)下面是Winows檢測設(shè)備的過程中所發(fā)生的事件,這些事件并不一定是依照順序發(fā)生:(1)用戶將設(shè)備插入一個USB連接端口,或是在系統(tǒng)開機前設(shè)備已經(jīng)插入一個連接端口.此連接端口

41、可能是在根集線器上,或是在下游的其他集線器上。連接端口的電源 由集線器提供,此時設(shè)備處于開機狀態(tài)(Powee tate).(2)集線器檢測設(shè)備。集線器監(jiān)視著連接端口上每一條信號線的電壓。集線器在其兩條信號線(D+與D)上,各有1的下拉電阻, 全速的設(shè)備在D+線上有15的上拉電阻器,低速的設(shè)備則是在D線上有1.5的上拉電阻器。高速的設(shè)備是以全速來連接。 當設(shè)備插入一個連接端口后,設(shè)備的上拉電阻讓信號線電壓上升,來告訴集線器有設(shè)備已經(jīng)連接上。在檢測設(shè)備的時候,集線器繼續(xù)提供電源給設(shè)備。但是尚未開始 UB的傳輸,因為設(shè)備還沒準備好接收.(3)主機識別新設(shè)備.每一個集線器會使用中斷管道,來報告給主機集

42、線器上所發(fā)現(xiàn)的事件。當主機知道一個事件后,它會重新發(fā)送一個Get_Port_Satus要求給集線器 以獲得更多的信息。GtPo_Status要求屬于標準的集線器類別(hubcass)要求,集線器傳回的信息告訴主機此設(shè)備是否是新連接的。(4)集線器檢測設(shè)備是否是低速或全速。在集線器重置(est)設(shè)置之前,集線器會檢驗兩條信號線上的電壓,來決定設(shè)備是屬于低速還是全速。集線器靠著閑置(idle) 時哪一條線有較高的電壓,來決定設(shè)備的速度。USB1。允許集線器在復(fù)位后才檢測設(shè)備的速度。USB.則需要在設(shè)備復(fù)位前知道其速度,如此才能在復(fù)位期間檢查設(shè) 備是否有高速的能力。()集線器重置設(shè)備。當主機了解一個

43、新設(shè)備后,主機控制器會傳送給集線器一個St_Port_Fture要求,來要求集線器重置連接端口。集線器將設(shè)備的UB數(shù)據(jù)線設(shè)置 在重置狀態(tài)下至少0毫秒。重置是一個特狀況,發(fā)生在D+與D都是在邏輯低的時候.在正常時,這兩條線有相反的邏輯狀態(tài).集線器只傳送重置信號給新設(shè)備,其 他總線上的集線器與設(shè)備都不會看到此重置信號。(6) 主機識別一個全速設(shè)備是否支持高速。要知道一個設(shè)備是否支持高速,需要使用兩個特殊的信號狀態(tài)。在Cip 狀態(tài)時只有D線會被驅(qū)動,在p K狀態(tài)時只有 D-線會被驅(qū)動。在重置期間,支持高速的設(shè)備會送出一個ChirK。高速的集線器檢測到該chip后,會反映一串的交替hirp K與J。當

44、設(shè)備檢測到KJKJKJ的樣式后 它會移除它的全速上升,然后再高速執(zhí)行所有的通信。如果集線器沒有對設(shè)備的ChpK做出響應(yīng),設(shè)備知道它必須繼續(xù)使用全速通信.高速的設(shè)備必須能夠在全 速時,響應(yīng)檢測設(shè)備的要求.(7)集線器建立設(shè)備與總線間的信號路徑。主機送出一個Gt_Porttatu要求,來證明設(shè)備已經(jīng)離開重置狀態(tài)?;貍鲾?shù)據(jù)中的一個位,用來指示設(shè)備是否仍然處于重置 狀態(tài)。如果有必要,主機會重復(fù)傳送要求直到設(shè)備已經(jīng)離開重置狀態(tài)。當集線器移除重置信號后,設(shè)備處于默認狀態(tài)(efautstate)。設(shè)備的SB緩存器是在它們的 重置狀態(tài),而設(shè)備已經(jīng)準備好響應(yīng)端點的默認管道上的控制傳輸?,F(xiàn)在設(shè)備可以使用默認地址0

45、h,來與主機開始通信 。(8)主機送出一個Gt_ecriptor要求,來了解默認管道的最大信息包大小(maximm pet sz).主機送出此要求給設(shè)備的地址0,端點0由于主機在同一時間內(nèi)只檢 測一個設(shè)備,所以即使有數(shù)個設(shè)備都連接到主機上,只有一個設(shè)備會反映地址0的通信。 設(shè)備描述符的第8個字節(jié),包含有端點支持的最大信息包大小。 Windows主機會要求64個字節(jié),不過在收到一個信息包后,不管此信息包是否有6個字節(jié),Wno主機都會開始傳輸?shù)臓顟B(tài)階段.在完成狀態(tài)階段后,Winds主機 會要求集線器重置設(shè)備(步驟5) B規(guī)范并沒有要求此重置動作,因為設(shè)備應(yīng)該有能力在任何時間處理主機的放棄控制傳輸行

46、為,然后響應(yīng)下一個設(shè)置信息包。不過重置是一個較謹慎的操作,來保 證在重置終止時,設(shè)備會片在一個預(yù)知的狀態(tài)上.(9)主機指定一個地址。主機控制器送出一個Set_dress要求,來指定設(shè)備一個惟一地址.設(shè)備在讀取該要求后傳回一個確認信號,然后儲存該新地址。設(shè)備現(xiàn)在處 于地址狀態(tài)(dessSate),所有的通信都會使用此新地址。此新地址會持續(xù)有效到設(shè)備移除,或是重置,或是系統(tǒng)關(guān)機時。在下一次檢測設(shè)備時,設(shè)備有可能指 定不同的地址。(10)主機了解設(shè)備的能力.主機送出一個Get_Desriptor要求到新地址上,來讀取設(shè)備的描述符(evc descror)。描述符是一個數(shù)據(jù)結(jié)構(gòu),包含有端點0的最大信

47、息包大小,設(shè)備支持的配置數(shù)目,以及設(shè)備的其他基本信息。 主機通過要求一個或多個指定在設(shè)備描述符內(nèi)的配置描述符,來了解更多設(shè)備的信息。通常設(shè)備對配置描述符(configuration dipt)的要求,會反映此描述 符及其所有的附屬描述符. Widws主機開始只要求配置描述符的9個字節(jié),在這些字節(jié)內(nèi)包含有配置描述符及其所有的附屬描述符的總長度。然后no使用所得到的總長度,最多到FF字節(jié) 繼續(xù)再要求配置描述符。這個動作會讓設(shè)備開始傳送配置描述符,后接每一個配置的接口描述符(intredecripr)。如果描述符的總長度超過FF字節(jié), Wnows會在第次要求時取得完整的描述符。(11)主機指定以及加

48、載一個設(shè)備驅(qū)動程序(復(fù)合設(shè)備除外).在主機從設(shè)備的描述符了解設(shè)備的所有能力后,它會尋找一個最適合的驅(qū)動程序來管理主機與設(shè)備的通信。 在選擇驅(qū)動程序的時候,Wdows會試圖將系統(tǒng)的。i文件內(nèi)的信息,與從設(shè)備內(nèi)讀出的廠商和產(chǎn)品ID與版本號碼做比較,如果不符合的話,inows會與任何從設(shè) 備內(nèi)讀出的類(class)、子類(sblass)與協(xié)議(prtocl)比較。當操作系統(tǒng)指定以及加載設(shè)備的驅(qū)動程序后,驅(qū)動程序通常會要求設(shè)備重新傳送描述符,或是其他 類相關(guān)的描述符。 此步驟的例外是復(fù)合設(shè)備。復(fù)合設(shè)備有多個接口,每一個接口需要一個驅(qū)動程序。 主機只能在這些接口啟用后,也就是設(shè)置設(shè)備的配置后,才能指定驅(qū)

49、動程序。(2)主機的驅(qū)動程序選擇一個設(shè)置配置。在從設(shè)備的描述符了解設(shè)備后,驅(qū)動程序會送出一個Set_Cnfigration要求以及配置號碼,來要求一個設(shè)置配置。許多設(shè)備 都只支持一個設(shè)置配置,設(shè)備在讀取要求后設(shè)置其配置.現(xiàn)在設(shè)備是處在設(shè)置配置狀態(tài)(Conigu stae),而且設(shè)備的接口是啟用的,已經(jīng)準備好可以使用。 其他兩個狀態(tài): 連接(ttahe)與掛起(Suspnd),可以存在于任何時間。連接狀態(tài):如果集線器不提供電源(VBUS)給連接端口,設(shè)備是處于連接狀態(tài)(Attached sate)。這種情況可能發(fā)生在集線器檢測到過電流,或是主機要求集線器移除給 連接端口的電源.當VBUS上沒有電

50、源時,主機與設(shè)備無法通信,如同設(shè)備根本沒有連接一樣。掛起狀態(tài):掛起狀態(tài)表示設(shè)備在總線上,至少有ms沒有任何動作,包括幀開端的標記(StartofFramekrs)。此時設(shè)備必須消耗最小的總線電力。不論有配置或沒有配置的設(shè)備,都必須支持掛起狀態(tài).描述符:描述符(desciptor)是一個數(shù)據(jù)結(jié)構(gòu),使主機了解設(shè)備的格式化信息。在檢測設(shè)備的期間,主機使用控制傳輸來要求設(shè)備傳回描述符。在檢測設(shè)備的過程中,要求的描述符首先是整個設(shè)備,然后是每一個設(shè)置配置,每一個設(shè)置配置的接口,最后是每一個接口的端點。標準描述符類型:描述符類型 是否需要evie(設(shè)備) 是device_quaifir 只有同時支持全速與

51、高速的設(shè)備才需要,其他設(shè)備不允許configratn(配置) 是oter_sped_cofigurati 只有同時支持全速與高速的設(shè)備才需要,其他設(shè)備不允許interfa(接口) 是endpint(端點) 否,如果設(shè)備只使用端點0string(字符串) 否,選擇性的描述文字itre_poer 否,支持接口層級的電源管理較高階的描述符會通知主機、任何其他的低階描述符.每一個設(shè)備只能有一個設(shè)備描述符(dvice desiptr),設(shè)備描述符包含整個設(shè)備的信息,以及設(shè)備支持的配置號碼。每一個設(shè)備也會有一個或多個配置描述符(coiuration decritor),來包含設(shè)備的電源管理使用,以及設(shè)置配

52、置所支持的接口號碼。每一個接口描述符(inerfacdscrto)有零個或多個端點描述符(endont decritpor),來包含與端點通信所需的信息。沒有端點描述符的接口,仍然可以使用通信用的控制端點。當設(shè)備收到一個配置描述符的要求后,它應(yīng)該傳回該配置描述符以及所有該配置的接口、端點以及其他附屬描述符,來達到所要求的字節(jié)數(shù)目.同時支持全速與高速的設(shè)備,另外還支持兩個額外的描述符:devce_ualifier 與 ohersped_ofiurati。這兩個額外的描述符與其他附屬描述符,包含了使用非目前選擇的速度時的設(shè)備行為.字符串描述符(stringdsrtor)用來存儲廠商或設(shè)備名稱等文字

53、,其他的描述符可以存儲這些字符串描述符的索引值。主機可以使用Gt_Desrptr要求,來讀取這些字符串描述符。US2.0規(guī)范新增了一個intrfacepwer描述符,這個功能使得除了設(shè)備層級外,接口層級也能夠啟用電源管理。除了標準描述符外,設(shè)備也可以包含類別(cla)或廠商(vndor)特定的描述符。這些特定的描述符,提供設(shè)備更詳細的信息。例如一個接口描述符可以指定該接口,是否屬于D類別并且支持H類別描述符。每一個描述符都包含有一個數(shù)值,來識別其描述符的類型。下面列出SB與HID規(guī)范所定義的數(shù)值,此數(shù)值的位7永遠是,位6與位5用來識別描述符的類型:0h是標準01是類別2是廠商03是保留位4到位

54、0用來識別描述符-描述符的數(shù)值 (DescriptorType)-類型 數(shù)值(十六進制) 描述符標準(anrd) 01 device 02 confurain sring 4 nteface 05 ndpont 0 device_qaliier 07 other_peed_coniraon 08 nerface_poe類別(as) 1 D 29 hubHI類別特定 22 report 23 pical廠商定義的描述符 F -每一個描述符包含有數(shù)個字段.大部分的字段名稱使用前置名稱(prei),來指出該字段數(shù)據(jù)的格式與內(nèi)容。例如代表byte(位),w代表word(16位),bm代表t ap,c代

55、表biarcodeddecial,i代表idx,id代表ientifer.設(shè)備類代碼DeviceClss查下表:-設(shè)備的類別(bDecCls)-值(十進制) 值(十六進制) 說明 0 0 x00 接口描述符中提供類的值 2 0 x2 通信類 9 0 x9 集線器類 220 0 xC 用于診斷用途的設(shè)備類 224 0E0 無線通信設(shè)備類 255 0 xFF 廠商定義的設(shè)備類-設(shè)備描述符:設(shè)備描述符(dec dscriptr)是在設(shè)備連接時,主機第一讀取的描述符,包含了主機需要從設(shè)備讀取的基本信息。設(shè)備描述符有14個字段。依照功能來分類,設(shè)備描述的字段包含了描述符本身、設(shè)備、配置以及類別4大類。-

56、設(shè)備描述符表-位移(十進制) 字段 大小(字節(jié)) 數(shù)據(jù) 說明 0 bLength 數(shù)字 描述符大小(字節(jié)) bescriporype 1 常數(shù) 常數(shù) 2 dUSB 2 BCD S4 bDeceClss 類別 類別碼5 bDicbclass 1 子類別 子類別碼 6 bDeviceProtol 1 協(xié)議 協(xié)議碼 7 bMaxPackeSize(0) 1 數(shù)字 端點0的最大信息包大小 idVedr 2 ID 廠商 10 idProduct 2 ID 產(chǎn)品ID 12 bcdeice CD 設(shè)備版本號碼4 Manufacrr 1 索引值 制造者的字符串描述符的索引值15 iroc 1 索引值 產(chǎn)品的字

57、符串描述符的索引值 16 iSeralNumbe 索引值 序號的字符串描述符的索引值 bNuonfigurtns 1 數(shù)字 可能配置的數(shù)目- 第1種:描述符-bLent,bciptorTyp第2種:設(shè)備-cdUSB,idVeno,idPouct,bcdDvic,Maufcturer,Prodct,iSerimber第種:配置-NumCigurin,bMaxakeSi()第4種:類別bDeiceCas,bDevieSubclas,bDeviceProtc解釋:Length :描述符的大小,以字節(jié)為單位。DecritTyp:常數(shù)DVIE(h)cdS:設(shè)備符合的USB規(guī)范版本號碼。此號碼為BCD(b

58、inarcod dml)格式,前面的字節(jié)是版本的整數(shù)部分,下個位是版本的第一個小數(shù)點數(shù)字。 最后個位是版本的第二個小數(shù)點數(shù)字。例如版本1.是010h,版本11是0110,版本20是0200idVndor: US mpementers Frm的成員,以及其他付費取得惟一廠商ID的權(quán)利的制造者。每一個商業(yè)化產(chǎn)品,都必須有一個設(shè)備描述符。主機必須擁有一個包含 idenor的。inf文件,Wdos使用此數(shù)值來決定要加載的驅(qū)動程序。iddt:制造者指定一個產(chǎn)品D,來識別此設(shè)備。設(shè)備描述符與。inf文件都可以包含此數(shù)值,windows使用此數(shù)值來決定要加載的驅(qū)動程序。每一個產(chǎn)品I特定于一個 廠商ID,所以

59、不同家的廠商可以使用相同的產(chǎn)品D而不會有沖突。bcdDevice:設(shè)備的版本號碼,此號碼為CD格式,由制造者指定,這個數(shù)值是選擇性的,也可以用來決定要加載的驅(qū)動程序。iManufacturer:指向描述制造者的字符串的索引值,此字段是選擇性的,如果未使用則為零。Prdct:指向描述產(chǎn)品的字符串的索引值,此字段選擇性,如果未使用則為零 。iSerialNumbe:指向包含設(shè)備序列號的字符串的索引值,此字段是選擇性的,如果未使用則為零.序列號使用在總線上有一個以上相同的設(shè)備時,主機用來識別哪一臺 是哪一臺。如果有一個外圍設(shè)備有相同的廠商與產(chǎn)品D,主機也可以使用序號來識別它是以前使用過的,或者是新安

60、裝的。如果一個設(shè)備有相同的序列 號,但是插入PC上不同的連接端口,dows就不需要重新加載此設(shè)備的驅(qū)動程序。umCnfiurtio:設(shè)備支持的設(shè)置配置的數(shù)目.bMaxPacketize0:端點0的最大信息包大小,主機使用此值來提出要求。低速設(shè)備的最大信息包大小必須是8個字節(jié),全速設(shè)備可以是8,16,32,或64個字節(jié),高速設(shè)備 必須是4個字節(jié)。eviclass:對于屬于類的設(shè)備,此值為該類的名稱。數(shù)值1到F保留為USB定義的類,例如集線器,打印機,以及通信設(shè)備等。數(shù)值Fh由廠商指定,屬于廠商特定的 類。有些設(shè)備,例如ID,類是指定在接口描述符內(nèi)。這些設(shè)備的bDviceSublass必須是一個定

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論