新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > USB協(xié)議深入分析 字符串描述符

USB協(xié)議深入分析 字符串描述符

作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
上一次說到把配置描述符返回給主控器那里了,現(xiàn)在接著下來,就會(huì)收到主控器發(fā)來字符串描述符。如果在設(shè)備描述符那里指定沒有字符串描述的話,在這里是不會(huì)收到字符串描述符的。由于我在設(shè)備描述符里指定有字符串描述符的偏移地址,因此,就收到主控器發(fā)出請(qǐng)求字符串描述符。收到的數(shù)據(jù)如下:
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é)表示描述符的類型,如下:
STRING3
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)如下:
typedefstruct_USB_STRING_DESCRIPTOR{
BYTEbLength;
BYTEbDescriptorType;
WORDbString;
}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í)。


關(guān)鍵詞: USB協(xié)議字符串描述

評(píng)論


技術(shù)專區(qū)

關(guān)閉