USB標準設備請求的數據結構

         筆記,最近在看《圈圈教你玩USB》,做一些記錄。

         一串神祕的數字:80 06 00 01 00 00 12 00

昨天提到了USB上電枚舉過程的流程圖,在這個流程圖中,可以看到USB主機和USB設備在剛上電的時候進行了哪些操作,最終實現主機識別USB設備,設備穩定工作。

今天看下USB上電枚舉過程中的第一步,也是最重要的一步:標準設備請求。如圖所示,這是我的USB無線鼠標連接到電腦的時候,通過軟件BUS Hound抓取得到的數據流。

         現在我換成一個優盤,數據如下:

         你會發現,無論你接入什麼USB設備,USB主機(也就是電腦)發送給USB設備的第一串數字都是:80 06 00 01 00 00 12 00

         不同的USB主機,倒數第二個數字可能會有些不同。那麼,這幾個數字究竟是什麼意思?

         首先我們要明確一點:USB設備不會主動向USB主機發送數據,只能是USB主機發起請求,然後USB設備再發送。而這是USB設備上電後,兩者之間發生的第一次數據交互,所以它必然是從主機發送到設備的。

看下錶:

字節偏移量

名稱

大小

功能描述

0

bmRequest Type

1

每一位的功能:

D7:數據傳輸方向,0:主到從;1:從到主

D6~5:請求的類型

0:標準請求

1:類請求

2:廠商

3:保留

D4~0:請求的接收者

0:設備

1:接口

2:端點

3:其它

4~31:保留

1

bRequest

1

請求類型對應的代碼

2

wValue

2

根據請求類型決定

4

wIndex

2

根據請求類型決定

6

wLength

2

數據過程(如果有)需要傳輸的字節數

         請求類型有三種,這裏只說標準請求對應的代碼,具體如下:

bRequest

Value

 

bRequest

Value

GET_STATUS

0

 

GET_CONFIGURATION

8

CLEAR_FEATURE

1

 

SET_CONFIGURATION

9

SET_FEATURE

3

 

GET_INTERFACE

10

SET_ADDRESS

5

 

SET_INTERFACE

11

GET_DESCRIPTOR

6

 

SYNCH_FRAME

12

SET_DESCRIPTOR

7

 

 

 

 

         前面說了,這一步操作叫做:標準設備請求。主機向設備發出的,要求接下來進行的操作遵從如下內容:

         80 06 00 01 00 00 12 00

         數據傳輸方向:設備到主機,請求類型:標準請求,請求的接收者爲設備。

         因爲是標準請求,請求類型的代碼爲:0x06.對應:GET_DESCRIPTOR,也就是獲取描述符。

         接下來是wValue,有兩個字節:00 01。高字節(01)--描述符類型  低字節(00)--描述符索引。

         描述符類型及編號如下:

描述符類型

編號

設備描述符

1

配置描述符

2

字符串描述符

3

接口描述符

4

端點描述符

5

         所以主機請求的是設備描述符。

         然後是wIndex,00 00. 它只有在獲取字符串描述符的時候有用,表示字符串的語言Id號,其他情況下這個值都是0。

         最後是wLength,表示請求設備返回的數據的字節個數。實際返回的個數可以比這個少,但一定要返回。

         好了,這8個數字解釋完了~~~

單片機愛好者

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章