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