USB協(xié)議深入分析 字符串描述符
80 06 00 03 00 00 FF 00
bmRequestType是80,表示方向USB設備發(fā)送給主控器,接收設備是USB設備。
bRequest是06,表示這是獲取描述符。GET_DESCRIPTOR 6
wValue是00 03。低字節(jié)表示偏移地址00,高字節(jié)表示描述符的類型,如下:
STRING 3
wIndex是00 00。
wLength是FF 00。它表示返回描述符的長度。這里是256個字節(jié)。
因此,這個獲取字符串描述符,就是從字符串描述內(nèi)存里,0偏移地址開始的位置讀取第一個字符串描述符返回給主控器。接著就返回下面的數(shù)據(jù)給主控器:
04 03 09 04
上面的數(shù)據(jù)是按字符串描述符來組織的,它的結構,我定義結構如下:
typedef struct _USB_STRING_DESCRIPTOR {
} USB_STRING_DESCRIPTOR;
bLength是所有數(shù)據(jù)的長度。在這里是4。
bDescriptorType是描述類型,這里字符串描述符,所以它是3。
bString是可變的字符數(shù)組。不超過254個應都可以的,并且它是使用UNICODE編碼的字符串。在這里是09 04,這是美國英語的標識,0x0409。如果想輸入中文的標識,只要改為0x0804就可以了。
通過這個字符串描述符,主控器就知道字符串描述符是使用什么語言說明的了,這樣就可以支持全世界的語言標識。
評論