USB的HID通信協(xié)議_第1頁(yè)
USB的HID通信協(xié)議_第2頁(yè)
USB的HID通信協(xié)議_第3頁(yè)
USB的HID通信協(xié)議_第4頁(yè)
USB的HID通信協(xié)議_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余4頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、USB 事務(wù)處理是主機(jī)和設(shè)備之間數(shù)據(jù)傳輸?shù)幕締挝?,由一系列具有特定格式的信息包組成。因此,要了解完整的 USB 通信協(xié)議,必須從 USB 的信息傳輸單元包及其數(shù)據(jù)域談起。通過由下而上,從簡(jiǎn)單至復(fù)雜的通信協(xié)議單位組成各種復(fù)雜的通信協(xié)議,進(jìn)而構(gòu)建出完整的通信協(xié)議。16.4.1 包包(Packet)是 USB 系統(tǒng)中信息傳輸?shù)幕締卧袛?shù)據(jù)都是經(jīng)過打包后在總線上傳輸?shù)?。首先了解一下包的組成。USB 包由五部分組成, 即同步 (SYNC) 字段、 包標(biāo)識(shí)符 (PID) 字段、 數(shù)據(jù)字段、 循環(huán)冗余校驗(yàn) (CRC)字段和包結(jié)尾(EOP)字段,包的基本格式如下:同步字段(SYNC)PID 字段數(shù)據(jù)字

2、段 CRC 字段包結(jié)尾字段(EOP)在 USB 的數(shù)據(jù)傳輸中,所有的傳輸包都起始于 SYNC,接著是 PID,后面是包中所包含的數(shù)據(jù)信息,接下來是用來檢測(cè)包中數(shù)據(jù)錯(cuò)誤的循環(huán)冗余校驗(yàn)信息,最后以包結(jié)尾作為結(jié)束標(biāo)志。下面我們將一一介紹每個(gè)字段。1 .同步(SYNC)字段SYNC 字段由 8 位組成,作為每個(gè)數(shù)據(jù)信息包的前導(dǎo)。顧名思義,它是用來產(chǎn)生同步作用的,目的是使 USB 設(shè)備與總線的包傳輸率同步,它的數(shù)值固定為 00000001。2 .包標(biāo)識(shí)符(PID)字段PID 字段是緊隨在 SYNC 字段后面,用來表示數(shù)據(jù)信息包的類型。在 USB 協(xié)議中,根據(jù)PID 的不同,USB 包有著不同的類型,分別

3、表示具有特定的意義。如下所示:PID0PID1PID2PID3包標(biāo)識(shí)符長(zhǎng)度為一個(gè)字節(jié)(8 個(gè)數(shù)據(jù)位),由 4 個(gè)位的包類型字段和 4 個(gè)位的校驗(yàn)字段構(gòu)成。PID 是USB 包類型的唯一標(biāo)志,USB 主機(jī)和 USB 設(shè)備在接收到包后,必須首先對(duì)包標(biāo)識(shí)符解碼得到包的類型,并判斷其意義從而做出下一個(gè)反應(yīng)。包標(biāo)識(shí)符中的校驗(yàn)字段是通過對(duì)類型字段的每個(gè)位求反碼產(chǎn)生的,它是用來對(duì)包類型字段進(jìn)行錯(cuò)誤檢測(cè)用的,旨在保證對(duì)包的標(biāo)識(shí)符譯碼的可靠性,如果 4 個(gè)檢驗(yàn)位不是它們各自的類型位的反碼,則說明標(biāo)識(shí)符中的信息有錯(cuò)誤。表 16-2 中列出了信息包的類型,包括令牌、數(shù)據(jù)、握手或特殊四種信息包類型。為簡(jiǎn)化對(duì) USB

4、的認(rèn)識(shí),有關(guān)高速傳輸?shù)牟糠譀]有在表中列出。3 .數(shù)據(jù)字段在 USB 包中,數(shù)據(jù)字段是用來攜帶主機(jī)與設(shè)備之間要傳遞的信息,其內(nèi)容和長(zhǎng)度根據(jù)包標(biāo)識(shí)符、傳輸類型的不同而各不相同。并非所有的 USB 包都必須有數(shù)據(jù)字段,例如握手包、專用包和 SOF 令牌包就沒有數(shù)據(jù)字段。在 USB 包中,數(shù)據(jù)字段可以包含設(shè)備地址、端點(diǎn)號(hào)、幀序列號(hào)以及數(shù)據(jù)等內(nèi)容。在總線傳輸中,總是首先傳輸字節(jié)的最低位,最后傳輸字節(jié)的最高位。(1)設(shè)備地址(ADDR)數(shù)據(jù)域ADDR 數(shù)據(jù)域由 7 位組成,可用來尋址多達(dá) 127 個(gè)外圍設(shè)備。(2)端點(diǎn)(ENDP)數(shù)據(jù)域ENDP 數(shù)據(jù)域由 4 位組成。 通過這 4 個(gè)位最多可尋址出 32

5、個(gè)端點(diǎn)。 這個(gè) ENDP 數(shù)據(jù)域僅用在 IN、 OUT與 SETUP 令牌信息包中。對(duì)于慢速設(shè)備可支持端點(diǎn) 0 以及端點(diǎn) 1 作為中斷傳輸模式,而全速設(shè)備則可以擁有 16 個(gè)輸入端點(diǎn)(IN)與 16 個(gè)輸出端點(diǎn)(OUT)共 32 個(gè)端點(diǎn)。(3)幀序列號(hào)當(dāng) USB 令牌包的 PID 為 SOF 時(shí),其數(shù)據(jù)字段必須為 11 位的幀序列號(hào)。幀序列號(hào)由主機(jī)產(chǎn)生,且每個(gè)數(shù)據(jù)幀自動(dòng)加一,最大數(shù)值為 0 x7FF。當(dāng)幀序列號(hào)達(dá)到最大數(shù)時(shí)將自動(dòng)從 0 開始循環(huán)。(4)數(shù)據(jù)它僅存于 DATA 信息包內(nèi),根據(jù)不同的傳輸類型,擁有不同的字節(jié)大小,從 0 到 1023 字節(jié)(實(shí)時(shí)傳輸)。4 .循環(huán)冗余校驗(yàn)(CRC)字

6、段根據(jù)不同的信息包類型,CRC 數(shù)據(jù)域由不同數(shù)目的位所組成。其中重要的數(shù)據(jù)信息包采用CRC16 的數(shù)據(jù)域(16 個(gè)位),而其余的信息包類型則采用 CRC5 的數(shù)據(jù)域(5 個(gè)位)。其中的循環(huán)冗余碼校驗(yàn) CRC,是一種錯(cuò)誤檢測(cè)技術(shù)。由于數(shù)據(jù)在傳輸時(shí),有時(shí)候會(huì)發(fā)生錯(cuò)誤,因此 CRC可根據(jù)數(shù)據(jù)算出一個(gè)校驗(yàn)值,然后依此判斷數(shù)據(jù)的正確性。5 .包結(jié)尾(EOP)字段包的發(fā)送方在包的結(jié)尾發(fā)出包結(jié)尾信號(hào)。它表現(xiàn)為差分線路的兩根數(shù)據(jù)線保持 2 比特低位時(shí)間和 1 比特空閑位時(shí)間。USB 主機(jī)根據(jù) EOP 判斷數(shù)據(jù)包的結(jié)束。6 6.4.2 信息包格式根據(jù)信息包所實(shí)現(xiàn)的功能,其可以分為 3 種類型:令牌包、數(shù)據(jù)包和握

7、手包。其中,令牌包定義了數(shù)據(jù)傳輸?shù)念愋?,?shù)據(jù)包中含有需要傳輸?shù)臄?shù)據(jù),握手包指明了數(shù)據(jù)接收是否成功。1 .令牌(token)包在 USB 系統(tǒng)中, 只有主機(jī)才能發(fā)出令牌包。 令牌包定義了數(shù)據(jù)傳輸?shù)念愋停?它是事務(wù)處理的第一階段。令牌包格式如下:8 位 8 位 7 位 4 位 5 位SYNCPIDADDRENDPCRC5令牌包中較為重要的是 SETUP、IN 和 OUT 這三個(gè)令牌包。它們用來在根集線器和設(shè)備端點(diǎn)之間建立數(shù)據(jù)傳輸。一個(gè) IN 包用來建立一個(gè)從設(shè)備到根集線器的數(shù)據(jù)傳送,一個(gè) OUT包用來建立從根集線器到設(shè)備的數(shù)據(jù)傳輸。IN 包和 OUT 包可以對(duì)任何設(shè)備上的任何端點(diǎn)編址。一個(gè) SET

8、UP 包是一個(gè) OUT 包的特殊情形,它是高優(yōu)先級(jí)的”,也就是說設(shè)備必須接受它,即使設(shè)備正在進(jìn)行數(shù)據(jù)傳輸操作的過程中也要對(duì)其進(jìn)行響應(yīng)。SETUP 包總是指向端點(diǎn) 0 的。2 .數(shù)據(jù)(data)包一個(gè)數(shù)據(jù)信息包包含了 4 個(gè)數(shù)據(jù)域:SYNC、PID、DATA 與 CRC16。在這里要注意的是 DATA 數(shù)據(jù)域內(nèi)所放置的位值,需根據(jù) USB 設(shè)備的傳輸速度(慢速、高速與全速)以及傳輸類型(中斷傳輸、批量傳輸、等時(shí)傳輸)而定,且須以 8 字節(jié)為基本單位。也就是,若傳輸?shù)臄?shù)據(jù)不足 8 字節(jié),或傳輸?shù)阶詈笏S嗟囊膊蛔?8 字節(jié),仍須傳輸 8 字節(jié)的數(shù)據(jù)域。格式如下:8 位 8 位 01023 字節(jié) 1

9、6 位SYNCPIDDATACRC163 .握手(Handshake)包握手信息包是最簡(jiǎn)單的信息包類型。在這個(gè)握手信息包中僅包含一個(gè) PID 數(shù)據(jù)域而已,它的格式如下所列:8 位 8 位SYNCPID其中僅包含 SYNC 與 PID 兩個(gè)數(shù)據(jù)域。16.4.3 事務(wù)在 USB 上數(shù)據(jù)信息的一次接收或發(fā)送的處理過程稱為事務(wù)處理(Transaction)。事務(wù)處理的類型包括輸入(IN)事務(wù)處理、輸出(OUT)事務(wù)處理、設(shè)置(SETUP)事務(wù)處理和幀開始、幀結(jié)尾等類型。在輸出(OUT)事務(wù)處理和設(shè)置(SETUP)事務(wù)處理中,緊接著 SETUP 和 OUT 包后的是 DATA 包,DATA0 和 DAT

10、A1 包是交替地發(fā)送的,在 DATA 包后面,設(shè)備將回應(yīng)一個(gè)握手信號(hào),如果設(shè)備可以接收數(shù)據(jù),就回應(yīng) ACK 包,如果設(shè)備,卜 t,就回應(yīng) NAK 包,如果設(shè)備出錯(cuò),則回應(yīng) STALL 包;在 IN 事務(wù)中,IN 包后面是設(shè)備發(fā)來的 DATA 包或 NAK 包或 STALL包,若設(shè)備忙或出錯(cuò),就發(fā) NAK 包或 STALL 包給主機(jī),若設(shè)備數(shù)據(jù)準(zhǔn)備好發(fā)送,則發(fā) DATA 包,DATA0 和 DATA1 包也是交替地發(fā)送的,緊接著 DATA 包后面是主機(jī)發(fā)給設(shè)備的握手包,ACK 表示主機(jī)可以接收數(shù)據(jù),NAK 包代表主機(jī)忙,STALL 包代表主機(jī)出錯(cuò)。下面我們?cè)俜謩e介紹這些事務(wù)。1 .輸入(IN)事

11、務(wù)處理輸入事務(wù)處理表示 USB 主機(jī)從總線上的某個(gè) USB 設(shè)備接收一個(gè)數(shù)據(jù)包的過程,接下來分析輸入事務(wù)處理的各種典型情況:(1)正常的輸入事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCINADDRENDPCRC52 .設(shè)備-主機(jī)(數(shù)據(jù)信息包)SYNCDATA0DATACRC163 .主機(jī),設(shè)備(握手信息包)SYNCACK(2)設(shè)備忙時(shí)的輸入事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCINADDRENDPCRC52 .設(shè)備,主機(jī)(握手信息包)SYNCNAK(3)設(shè)備出錯(cuò)時(shí)的輸入事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCINADDRENDPCRC52 .設(shè)備,主機(jī)(握手信息包)SYNCST

12、ALL3 .輸出(OUT)事務(wù)處理(1)正常的輸出事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCOUTADDRENDPCRC52 .主機(jī)-設(shè)備(數(shù)據(jù)信息包)SYNCDATA0DATACRC163 .設(shè)備,主機(jī)(握手信息包)SYNCACK(2)設(shè)備忙時(shí)的輸出事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCOUTADDRENDPCRC52 .主機(jī)-設(shè)備(數(shù)據(jù)信息包)SYNCDATA0DATACRC163 .設(shè)備-主機(jī)(握手信息包)SYNCNAK(3)設(shè)備出錯(cuò)時(shí)的輸出事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCOUTADDRENDPCRC52 .主機(jī)-設(shè)備(數(shù)據(jù)信息包)SYNCDATA0DATACR

13、C163 .設(shè)備-主機(jī)(握手信息包)SYNCSTALL4 .設(shè)置(SETUP)事務(wù)處理(1)正常的設(shè)置事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCSETUPADDRENDPCRC52 .主機(jī)-設(shè)備(數(shù)據(jù)信息包)SYNCDATA0DATACRC163 .設(shè)備-主機(jī)(握手信息包)SYNCACK(2)設(shè)備忙時(shí)的設(shè)置事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCSETUPADDRENDPCRC52 .主機(jī)-設(shè)備(數(shù)據(jù)信息包)SYNCDATA0DATACRC163 .設(shè)備-主機(jī)(握手信息包)SYNCNAK(3)設(shè)備出錯(cuò)時(shí)的設(shè)置事務(wù)處理1 .主機(jī)-設(shè)備(令牌信息包)SYNCSETUPADDRENDPCR

14、C52 .主機(jī)-設(shè)備(數(shù)據(jù)信息包)SYNCDATA0DATACRC163 .設(shè)備-主機(jī)(握手信息包)SYNCSTALL16.4.4USB 傳輸類型在 USB 的傳輸中,制定了 4 種傳輸類型:控制傳輸、中斷傳輸、批量傳輸以及實(shí)時(shí)傳輸。這里只詳細(xì)介紹控制傳輸,其他傳輸類型只作簡(jiǎn)要說明。1 .控制傳輸控制傳輸是 USB 傳輸中最重要的傳輸,唯有正確地執(zhí)行完控制傳輸,才能進(jìn)一步正確地執(zhí)行其他傳輸模式。由于每個(gè) USB 設(shè)備可能速度、傳輸?shù)陌拇笮〉刃畔⒂锌赡懿煌?,因此每個(gè) USB 設(shè)備內(nèi)部都記錄著該設(shè)備的一些信息 (也就是接下來將要介紹的設(shè)備描述符) , 當(dāng)在主機(jī)上檢測(cè)到 USB 設(shè)備時(shí),系統(tǒng)軟件必

15、須讀取設(shè)備描述符,以確定該設(shè)備的類型和操作特性,以及對(duì)該設(shè)備進(jìn)行相應(yīng)的配置,這些工作都是通過控制傳輸來完成。每個(gè) USB 設(shè)備都必須實(shí)現(xiàn)一個(gè)缺省的控制端點(diǎn),該端點(diǎn)總是 0 號(hào)端點(diǎn)??刂苽鬏旑愋头譃?23 個(gè)階段:設(shè)置階段、數(shù)據(jù)階段(無數(shù)據(jù)控制沒有此階段)以及狀態(tài)階段。根據(jù)數(shù)據(jù)階段的數(shù)據(jù)傳輸?shù)姆较颍刂苽鬏斢挚煞譃?3 種類型:控制讀?。ㄗx取USB 描述符)、控制寫入(配置 USB 設(shè)備)以及無數(shù)據(jù)控制。以下介紹各階段的工作。階段一:設(shè)置階段USB 設(shè)備在正常使用之前,必須先配置,本階段由主機(jī)將信息傳送給 USB 設(shè)備,定義對(duì)USB 設(shè)備的請(qǐng)求信息(如:讀設(shè)備描述符)。主機(jī)一般會(huì)從 USB 設(shè)備

16、獲取配置信息后再確定此設(shè)備有哪些功能。作為配置的一部分,主機(jī)會(huì)設(shè)置設(shè)備的配置值。我們統(tǒng)稱這一階段為設(shè)置階段。數(shù)據(jù)信息包(該信息包里的數(shù)據(jù)即為設(shè)備請(qǐng)求,本章將后續(xù)介紹)以及 ACK 握手信息包。它的作用是執(zhí)行一個(gè)設(shè)置的數(shù)據(jù)交換,并定義此控制傳輸?shù)膬?nèi)容。階段二:數(shù)據(jù)傳輸階段數(shù)據(jù)傳輸階段是用來傳輸主機(jī)與設(shè)備之間的數(shù)據(jù)。回C:DoajmentsandSettingsAdmim5trator柒口第4嚀USBir:j成!iT辦區(qū)-與:11?4,fllesU216896734jpg控制讀取是將數(shù)據(jù)從設(shè)備讀到主機(jī)上,讀取的數(shù)據(jù) USB 設(shè)備描述符。t過程如圖 16-8 所示。對(duì)每一個(gè)數(shù)據(jù)信息包而言,首先,主機(jī)

17、會(huì)發(fā)送一個(gè) IN 令牌信息包,表示要讀數(shù)據(jù)進(jìn)來。然后,設(shè)備將數(shù)據(jù)通過 DATA1 數(shù)據(jù)信息包回傳給主機(jī)。最后,主機(jī)將以下列的方式加以響應(yīng):當(dāng)數(shù)據(jù)已經(jīng)正確接收時(shí),主機(jī)送出 ACK 令牌信息包;當(dāng)主機(jī)正在忙碌時(shí),發(fā)出NAK 握手信息包;當(dāng)發(fā)生了錯(cuò)誤時(shí),主機(jī)發(fā)出 STALL 握手信息包。控制寫入則是將數(shù)據(jù)從主機(jī)傳到設(shè)備上,所傳的數(shù)據(jù)即為對(duì) USB 設(shè)備的配置信息,該過程如圖 16-9 所示。對(duì)每一個(gè)數(shù)據(jù)信息包而言,主機(jī)將會(huì)送出一個(gè) OUT 令牌信息包,表示數(shù)據(jù)要送出去。緊接著,主機(jī)將數(shù)據(jù)通過 DATA0 數(shù)據(jù)信息包傳遞至設(shè)備。最后,設(shè)備將以下列方式加以響應(yīng):當(dāng)數(shù)據(jù)已經(jīng)正確接收時(shí),設(shè)備送出 ACK 令

18、牌信息包;當(dāng)設(shè)備正在忙碌時(shí),設(shè)備發(fā)出 NAK 握手信息包;當(dāng)發(fā)生了錯(cuò)誤時(shí),設(shè)備發(fā)出 STALL 握手信息包。階段三:狀態(tài)階段狀態(tài)階段用來表示整個(gè)傳輸?shù)倪^程已經(jīng)完全結(jié)束了。請(qǐng)注意,狀態(tài)階段傳輸?shù)姆较虮仨毰c數(shù)據(jù)階段的方向相反。即原來是 IN 令牌信息包,這個(gè)階段應(yīng)為 OUT 令牌信息包;反之,原來是 OUT 令牌信息包,這個(gè)階段應(yīng)為 IN 令牌信息包。對(duì)于控制讀取而言,主機(jī)會(huì)送出OUT 令牌信息包,其后再跟著 0 長(zhǎng)度的 DATA1 信息包。而此時(shí),設(shè)備也會(huì)做出相對(duì)應(yīng)的動(dòng)作,送 ACK 握手信息包、NAK 握手信息包或 STALL 握手信息包。相對(duì)地對(duì)于控制寫入傳輸,主機(jī)會(huì)送出 IN 令牌信息包,

19、然后設(shè)備送出表示完成狀態(tài)階段的 0 長(zhǎng)度的 DATA1 信息包,主機(jī)再做出相應(yīng)的動(dòng)作:送 ACK 握手信息包、NAK 握手信息包或 STALL 握手信息包。2 .實(shí)時(shí)傳輸實(shí)時(shí)傳輸適用于必須以固定速率抵達(dá)或在指定時(shí)刻抵達(dá),可以容忍偶爾錯(cuò)誤的數(shù)據(jù)上。實(shí)時(shí)傳輸一般用于麥克風(fēng)、喇叭等設(shè)備。實(shí)時(shí)傳輸只需令牌與數(shù)據(jù)兩個(gè)信息包階段,沒有握手包,故數(shù)據(jù)傳錯(cuò)時(shí)不會(huì)重傳。3 .批量傳輸用于傳輸大量數(shù)據(jù),要求傳輸不能出錯(cuò),但對(duì)時(shí)間沒有要求,適用于打印機(jī)、存儲(chǔ)設(shè)備設(shè)置階段由設(shè)置事務(wù)完成,也就是該階段包含了SETUP 令牌信息包、緊隨其后的 DATA0中斷傳輸方式總是用于對(duì)設(shè)備的查詢,以確定是否有數(shù)據(jù)需要傳輸。因此中斷

20、傳輸?shù)姆较蚩偸菑?USB設(shè)備到主機(jī)。16.4.5 設(shè)備列舉1 .描述符USB 描述符就好像是 USB 外圍設(shè)備的身份證”一樣,詳細(xì)地記錄著外圍設(shè)備相關(guān)的一切信息。為了描述不同的數(shù)據(jù),就需以不同類型的 USB 描述符來加以描述,它共有以下幾種類型:設(shè)備描述符、配置描述符、接口描述符和端點(diǎn)描述符,這幾個(gè)描述符是必須具有的,下面將結(jié)合實(shí)例詳細(xì)介紹;其他的描述符,例如,字符串描述符、數(shù)種不同的群組描述符以及報(bào)告描述符則可以根據(jù)不同的設(shè)備進(jìn)行選擇。(1)設(shè)備描述符設(shè)備描述符具有 18 字節(jié)的長(zhǎng)度, 并且是主機(jī)向設(shè)備請(qǐng)求的第一個(gè)描述符。 以下列出設(shè)備描述符的范例、數(shù)值以及各個(gè)字段的意義:DeviceDes

21、c:;表示設(shè)備描述符.byte$12;bLength 域,表示該描述符的字節(jié)長(zhǎng)度為 18 個(gè)字節(jié).byte$01;bDescriptorType 域描述符類型,1 代表設(shè)備.byte$10,$01;bcdUSB 域表示符合 USB1.10 規(guī)范,$210 代表 2.10 規(guī)范.byte$00;bDeviceClass 域,群組碼,0 表示每個(gè)接口都有自身的群信息,域,設(shè)備次群組(如果群組碼為 0,設(shè)備次群組必須為 0)域,設(shè)備協(xié)議(0 表示無群組特定協(xié)議)域,端點(diǎn) 0 的最大信息包大小(只能為 8、16、32 或 64)域,制造商 ID(2 字節(jié))域,產(chǎn)品 ID(2 字節(jié))域,以 BCD 表示

22、設(shè)備發(fā)行序號(hào).byte$01;1Manufacturer 域,制造商的字符串描述符索引(1 字節(jié)),本實(shí)例中指;String1Desc 處的字符串描述符.byte$02;iProduct 域,產(chǎn)品的字符串描述符索引(1 字節(jié)),本實(shí)例中指;String2Desc 處的字符串描述符.byte$00;iSerialNumber 域,設(shè)備序號(hào)的字符串描述符索引(1 字節(jié)),;本實(shí)例中指 String0Desc 處的字符串描述符.byte$01;bNumConfigurations 域,配置數(shù)目為 1(2)配置描述符配置描述符具有 9 字節(jié)的長(zhǎng)度,針對(duì)設(shè)備給予配置的信息。以下列出配置描述符的范例、數(shù)值

23、以及各個(gè)字段的意義:ConfigDesc:;表示配置描述符.byte$09;bLength 域,表示該描述符的字節(jié)長(zhǎng)度為 9 個(gè)字節(jié)(1 字節(jié)).byte$02;bDescriptorType 域,描述符類型,2 代表配置(1 字節(jié)).byte$20,$00;wTotalLength 域,描述符的總長(zhǎng)度為 32 個(gè)字節(jié),(包括配置描述符;9 字節(jié),接口描述符 9 字節(jié),兩個(gè)端點(diǎn)描述符各 7 字節(jié)).byte$01;bNumlnterfaces 域,該配置支持的接口數(shù)目(1 字節(jié)).byte$01;bConfigurationValue 域,配置值,作為 SetConfiguration 請(qǐng)求的

24、配置值;不同的接口操作相互獨(dú)立.byte$00;bDeviceSubClass.byte$00;bDeviceProtocol.byte$08;bMaxPacketSize0.byte$70,$0C;idVendor.byte$00,$00;idProduct.byte$00,$01;bcdDevice2 字節(jié)).byte$00;iConfiguration 域,配置的字符串描述符的索引(1 字節(jié)),byte$C0;bmAttributes 域,配置的屬性(自供電,不具有遠(yuǎn)程喚醒的特征),byte$00;MaxPower 域,表示當(dāng) USB 設(shè)備操作時(shí),它從總線上;獲得的最大電源(以 2mA

25、為單位)(3)接口描述符接口描述符具有 9 字節(jié)的長(zhǎng)度,用來描述每一個(gè)設(shè)備的接口特性。以下列出接口描述符的范例、數(shù)值以及各個(gè)字段的意義:InterfaceDesc:;表示接口描述符,byte$09;bLength 域,表示該描述符的字節(jié)長(zhǎng)度為 9 個(gè)字節(jié),byte$04;bDescriptorType 域,描述符類型,4 代表接口,byte$00;blnterfaceNumber 域,接口數(shù)目以 0 為基值(表示一個(gè)接口),byte$00;bAlternateSetting 域,交互設(shè)置值為 0(因?yàn)橹挥幸粋€(gè)接口),byte$02;bNumEndpoints 域,端點(diǎn)數(shù)目設(shè)置為 2,byte

26、肝 F;blnterfaceClass 域,接口群組,$FF 表示是供應(yīng)商說明書,byte$01;blnterfaceSubClass 域,接口次群組,byte$FF;blnterfaceProtocol 域,接口協(xié)議,$FF 表示該接口使用的;是供應(yīng)商說明的協(xié)議,byte$00;ilnterface 域,接口的字符串描述符的索引,本實(shí)例沒有(4)端點(diǎn)描述符端點(diǎn)描述符具有 7 字節(jié)長(zhǎng)度,用來描述端點(diǎn)的屬性以及各個(gè)端點(diǎn)的位置。該實(shí)例中有兩個(gè)端點(diǎn),我們首先介紹端點(diǎn) 1 描述符:EndpointIDesc:;表示端點(diǎn) 1 描述符,byte$07;bLength 域,表示該描述符的字節(jié)長(zhǎng)度為 7 個(gè)字

27、節(jié),byte$05;bDescriptorType 域,描述符類型,5 代表端點(diǎn),byte$81;bEndpointAddress 域,端點(diǎn)地址(0 x81=lN,0 x02=OUT),;本實(shí)例端點(diǎn)編號(hào)為 1 且為 lN 端點(diǎn),byte$03;bmAttributes 域,傳輸類型的屬性設(shè)置為中斷傳輸;(0=控制,1=實(shí)時(shí),2=批量,3=中斷),byte$08,$00;wMaxPacketSize 域,最大信息包的大小設(shè)置為 8 個(gè)字節(jié),byte$0A;blnterval 域,輪詢間隔,以 ms 為單位,在此設(shè)置為 10ms接下來介紹端點(diǎn) 2 描述符:Endpoint2Desc:;表示端點(diǎn) 2

28、 描述符,byte$07;bLength 域,表示該描述符的字節(jié)長(zhǎng)度為 7 個(gè)字節(jié),byte$05;bDescriptorType 域,描述符類型,5 代表端點(diǎn),byte$02;bEndpointAddress 域,端點(diǎn)地址0 x81=lN,0 x02=OUT),;本實(shí)例端點(diǎn)編號(hào)為 2 且為 OUT 端點(diǎn),byte$03;bmAttributes 域,傳輸類型的屬性設(shè)置為中斷傳輸;(0=控制,1=實(shí)時(shí),2=批量,3=中斷),byte$08,$00;wMaxPacketSize 域,最大信息包的大小設(shè)置為 8 個(gè)字節(jié),byte$0A;blnterval 域,輪詢間隔,以 ms 為單位,在此設(shè)置為

29、 10ms2 .USB 設(shè)備請(qǐng)求在 USB 接口的通信協(xié)議中,由于主機(jī)是取得絕對(duì)的主控權(quán),因此,主機(jī)與設(shè)備之間就必須遵循某種已溝通的特定命令格式,以達(dá)到通信的目的。而這個(gè)命令格式就是 USB 規(guī)范書中所制定的設(shè)備請(qǐng)求”。這個(gè)設(shè)備請(qǐng)求的設(shè)置、清除與取得都須通過控制傳輸?shù)臄?shù)據(jù)交換來完成。表 16-3 中列出了標(biāo)準(zhǔn)設(shè)備請(qǐng)求的數(shù)據(jù)格式內(nèi)容。pelC:DocumentEand5ettingsAdmlnEtr?tqrft)-iUSB的通信協(xié)議一與并2168568Z9.jpg表 16-3 各字段含義解釋如下。bmRequestType 域決定了特定請(qǐng)求的特征,該域的 D7 表示在控制傳輸?shù)臄?shù)據(jù)階段,數(shù)據(jù)傳輸

30、的方向。如果 wLength 的值為 0,表示沒有數(shù)據(jù)階段,該位可以忽略;D6:5表示了該請(qǐng)求所屬的類型,USB 標(biāo)準(zhǔn)中定義了所有的 USB 設(shè)備必須支持的一系列的標(biāo)準(zhǔn)請(qǐng)求,此外,群組和供應(yīng)商也可以定義一些其他的請(qǐng)求;D4:0表示接收端,請(qǐng)求可以針對(duì)設(shè)備、接口或設(shè)備的一個(gè)端點(diǎn),當(dāng)針對(duì)一個(gè)接口或端點(diǎn)時(shí),wIndex域決定了是哪個(gè)接口或端點(diǎn)。bRequest 域表示特定請(qǐng)求,如果 bmRequestType 域的類型字段為 0,可以根據(jù) USB 指定的一系列的標(biāo)準(zhǔn)請(qǐng)求,結(jié)合該域的值,知道這是什么請(qǐng)求。將在下面介紹這些請(qǐng)求。wValue 域的值根據(jù)請(qǐng)求的不同而不同,用來傳遞一個(gè)參數(shù)給設(shè)備。wInde

31、x 域的值根據(jù)請(qǐng)求的不同而不同,用來指定一個(gè)接口或端點(diǎn)。wLength 域表示控制傳輸?shù)臄?shù)據(jù)階段中傳輸數(shù)據(jù)的字節(jié)大小,數(shù)據(jù)傳輸?shù)姆较蛴?bmRequestType域中的 D7 位決定,如果該域的值為 0,表示沒有數(shù)據(jù)階段。下面結(jié)合實(shí)例分別介紹幾個(gè)主要的設(shè)備請(qǐng)求。(1)清除特性(ClearFeature)該請(qǐng)求是用來取消一個(gè)特性,其格式如下:bmRequestTypebRequestwValuewIndexwLengthData00000000B(設(shè)備)00000001B(接口)00000010B(端點(diǎn))CLEAR_FEATURE(01H)特性選擇 0接口端點(diǎn) 0 無該請(qǐng)求中的 wValue 表

32、示特性選擇器,它對(duì)應(yīng)的值為:0=端點(diǎn),1=設(shè)備。當(dāng)某個(gè)特性不允許取消,或該特性根本不存在,或者是指向一個(gè)根本不存在的接口或端點(diǎn)時(shí),該請(qǐng)求將會(huì)導(dǎo)致設(shè)備請(qǐng)求失敗。如果端點(diǎn)被固件設(shè)為停止?fàn)顟B(tài),主機(jī)軟件(總線驅(qū)動(dòng)程序)也可以發(fā)送一個(gè)值為 0 的 CLEAR_FEATURE 命令清除該端點(diǎn)的停止?fàn)顟B(tài),本實(shí)例中就是這樣使用該請(qǐng)求的。(2)取得描述符(GetDescriptor)該請(qǐng)求可以取得 USB 設(shè)備中存在的特定的描述符,其格式如下:bmRequestTypebRequestwValuewIndexwLengthData10000000BGET_DESCRIPTOR(06H)描述符類型與描述符指針 0 或語(yǔ)言 ID 描述符的長(zhǎng)度各個(gè)描述符該請(qǐng)求中的 wValue 的高字節(jié)表示要取得描述符類型,低字節(jié)表示描述符的索引值,描述的類型有:1 表示設(shè)備描述符,2 表示配置描述符,3 表示字符串描述符,4 表示接口描述符,5

溫馨提示

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

評(píng)論

0/150

提交評(píng)論