usb setup請求結構體分析

usb setup請求結構體分析

http://blog.csdn.net/luckywang1103/article/details/25243979


在USB通訊裏,從主控器發出來的第一個配置包就是設備描述符配置包,目的只有一個,就是獲取插入的USB屬性,以便加載合適的驅動程序。現在就來詳細地分析一下設備描述符包的定義。
在USB2.0的協議裏找到9.3 USB Device Requests裏就找到這個結構的定義,這裏我使用C的定義結構如下:
typedef struct _USB_SETUP_PACKET
{
 REQUEST_TYPE bmRequestType;
 BYTE         bRequest;
 WORD_BYTE    wValue;
 WORD_BYTE    wIndex;
 WORD         wLength;
USB_SETUP_PACKET;
 
bmRequestType是包含有下面幾方面的內容:
D7 D6 D5 D4 D3 D2 D1 D0
在這一個字節裏,又按位分爲:
D7位是表示後面傳送數據的方向位。
當D7等於0時,表示後面的數據從主控器發送到USB設備。在PC裏,就是從PC機發送到USB的設備。
當D7等於1時,表示後面的數據是從USB設備發送到主控器。在PC裏,就是從USB設備發送到USB設備。在上次裏,我收到並顯示出來的數據是80,就表示從USB設備裏發送數據給PC。在這裏再次給出上一次的包數據:
80 06 00 01 00 00 40 00
這裏的80,就是D7位爲1。
 
D6-D5位是請求主分類型
0 是表示標準的請求。
1 是表示類別的請求。
2 是表示廠商的請求。
3 是保留。
 
D4-D0位是表求接收這個包的接口。
0 是表示USB設備接收。
1 是表示接口接收。
2 是表示端點接收。
3 是表示其它接收,不知道的。
4-31是保留。
 
bRequest是本描述符的請求類型,也就是後面發送的數據是什麼樣的東西。由於USB裏有很多配置信息,比如獲取設備描述符,又有設置USB地址等等,就是通過這個字節來區分的。
從USB協議裏查找表9-4,就可看到如下的編碼:
GET_STATUS              0
CLEAR_FEATURE          1
Reserved for future use      2
SET_FEATURE             3
Reserved for future use      4
SET_ADDRESS             5
GET_DESCRIPTOR         6
SET_DESCRIPTOR          7
GET_CONFIGURATION      8
SET_CONFIGURATION      9
GET_INTERFACE           10
SET_INTERFACE            11
SYNCH_FRAME              12
在上面的數據包裏,看到它的內容是06,那麼它就是GET_DESCRIPTOR類型。也就是主控器想讀取USB設備的描述符,到這裏就已經分析出來的意思,就是主控器想讀取USB描述符,但還不知道是什麼描述符的內容。

wValue是根據不同的請求而設置不同的值。一般就是傳送參數給設備標明這是什麼請求。在上面GET_DESCRIPTOR獲取設備描述符裏,它的值是00 01。在GET_DESCRIPTOR裏這個字段的低字節表示描述符的索引高字節表示描述符的類型。高字節的類型如下:
DEVICE                   1
CONFIGURATION          2
STRING                   3
INTERFACE                4
ENDPOINT                5
DEVICE_QUALIFIER         6
OTHER_SPEED_CONFIGURATION             7
INTERFACE_POWER1                  8
wValue值在這裏的高字節是01,那麼它就是設備描述符了低字節是00,那麼它就是表示從偏移地址0開始讀取設備描述符由於在配置描述符裏有很多配置,所以低字節在那裏就可以用來識別獲取同樣類型的描述符不同的配置。
wIndex是根據不同的請求而設置不同的值。一般用來說明端點號或者說明接口標識。在獲取描述符裏,設置爲0,或者是語言ID。在這個發送的描述符裏,它是設置爲00 00
wLength是根據請求來決定下一階段發送數據的長度前面請求第一個字節裏,已經說明下一階段數據傳送的方向,這裏說明了傳送數據的長度。不管是發送數據,還是接收數據,都不要超過這個數據長度,否則主機會出問題,或者設備有問題。在這個獲取設備描述裏,它的長度是40 00,按小端格式去解釋,就是64個字節。

發佈了6 篇原創文章 · 獲贊 7 · 訪問量 163萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章