表1 標(biāo)準(zhǔn)描述符類(lèi)型
描述符類(lèi)型 |
說(shuō)明 |
是否需要 |
Device |
設(shè)備 |
是 |
Device_qualifier |
|
只有同時(shí)支持全速與高速的設(shè)備才需要,其它設(shè)備不允許 |
Configuration |
配置 |
是 |
Other_speed_configuration |
|
只有同時(shí)支持全速與高速的設(shè)備才需要,其它設(shè)備不允許 |
Interface |
接口 |
是 |
Endpoint |
端點(diǎn) |
否,如果設(shè)備只使用端點(diǎn)0 |
String |
字符串 |
否,選擇性的描述文字 |
Interface_power |
|
否。支持接口層級(jí)的電源管理 |
表2 描述符的數(shù)值
類(lèi)型 |
數(shù)值(十六進(jìn)制) |
描述符 |
標(biāo)準(zhǔn) (standard) |
01 |
device |
02 |
configuration |
|
03 |
String |
|
04 |
Interface |
|
05 |
Endpoint |
|
06 |
Device_qualifier |
|
07 |
Other_speed_configuration |
|
08 |
Interface_power |
|
類(lèi)別 (class) |
21 |
HID |
29 |
Hub |
|
HID類(lèi)別特定 |
22 |
Report |
23 |
physical |
每一個(gè)描述符包含有數(shù)個(gè)字段,大部分的字段使用前置名稱(prefix),來(lái)指出該字段的格式與內(nèi)容。例如:
b表示該字段為一個(gè)字節(jié)的長(zhǎng)度;
w表示兩個(gè)字節(jié)的長(zhǎng)度;
bm表示位映射,即字節(jié)中的每一位都對(duì)應(yīng)不同的含義;
bcd表示BCD碼;
i表示索引或是指針(index);
id表示標(biāo)志符(identifier)。
n
表3 設(shè)備描述符
位移 十進(jìn)制 |
字段 |
大小 (字節(jié)) |
數(shù)值 |
說(shuō)明 |
0 |
bLength |
1 |
數(shù)字 |
描述符大。ㄗ止(jié)) |
1 |
bDescriptorType |
1 |
常數(shù) |
常數(shù)Device(01h) |
2 |
bcdUSB |
2 |
BCD |
USB規(guī)范版本號(hào)碼 |
4 |
bDeviceClass |
1 |
類(lèi)別 |
類(lèi)別碼 |
5 |
bDeviceSubclass |
1 |
子類(lèi)別 |
子類(lèi)別碼 |
6 |
bDeviceProtocol |
1 |
協(xié)議 |
協(xié)議碼 |
7 |
bMaxPacketSize(0) |
1 |
數(shù)字 |
端點(diǎn)0的最大信息包大小 |
8 |
idVendor |
2 |
ID |
廠商ID |
10 |
idProduct |
2 |
ID |
產(chǎn)品ID |
12 |
bcdDevice |
2 |
BCD |
設(shè)備版本號(hào)碼 |
14 |
iManufacturer |
1 |
索引值 |
制造者的字符串描述符的索引值 |
15 |
iProduct |
1 |
索引值 |
產(chǎn)品的字符串描述符的索引值 |
16 |
iSerialNumber |
1 |
索引值 |
序號(hào)的字符串描述符的索引值 |
17 |
bNumConfigurations |
1 |
數(shù)字 |
可能配置的數(shù)目 |
n
表4 device_qualifier描述符
位移 十進(jìn)制 |
字段 |
大小 (字節(jié)) |
數(shù)值 |
說(shuō)明 |
0 |
bLength |
1 |
數(shù)字 |
描述符大。ㄗ止(jié)) |
1 |
bDescriptorType |
1 |
常數(shù) |
常數(shù)Device_qualifier(06h) |
2 |
bcdUSB |
2 |
BCD |
USB規(guī)范版本號(hào)碼 |
4 |
bDeviceClass |
1 |
類(lèi)別 |
類(lèi)別碼 |
5 |
bDeviceSubclass |
1 |
子類(lèi)別 |
子類(lèi)別碼 |
6 |
bDeviceProtocol |
1 |
協(xié)議 |
協(xié)議碼 |
7 |
bMaxPacketSize(0) |
1 |
數(shù)字 |
端點(diǎn)0的最大信息包大小 |
8 |
bNumConfigurations |
1 |
數(shù)字 |
可能配置的數(shù)目 |
9 |
Reserved |
1 |
0 |
保留 |
n
配置描述符有8個(gè)字段,如表5所示,在許多設(shè)置配置中,有些字段并不使用。
表5 配置描述符
位移 十進(jìn)制 |
字段 |
大小 (字節(jié)) |
數(shù)值 |
說(shuō)明 |
0 |
bLength |
1 |
數(shù)字 |
描述符大。ㄗ止(jié)) |
1 |
bDescriptorType |
1 |
常數(shù) |
常數(shù)configuration(02h) |
2 |
wTotalLength |
2 |
數(shù)字 |
此配置傳回的所有數(shù)據(jù)大小(字節(jié)) |
4 |
bNumInterfaces |
1 |
數(shù)字 |
此配置支持的接口數(shù)目 |
5 |
bConfigurationValue |
1 |
數(shù)字 |
Set_configuration與get_configuration要求的標(biāo)識(shí)符 |
6 |
iConfigurtion |
1 |
索引值 |
此配置的字符串描述符的索引值 |
7 |
bmAuributes |
1 |
位圖 |
自身電源/總線電源以及遠(yuǎn)程喚醒設(shè)置 |
8 |
MaxPower |
1 |
mA |
需要總線電源,標(biāo)識(shí)法為(最大mA/2) |
2
2
2
n
同時(shí)支持全速與高速的設(shè)備,必須有一個(gè)Other_speed_configuration描述符。此描述符的結(jié)構(gòu)與配置描述符相同,唯一的差別是other_speed_configuration描述符描述的是當(dāng)設(shè)備是在非作用中速度時(shí)的配置,Other_speed_configuration描述符與設(shè)備配置描述符相同。
表6 other_speed_configuration描述符
位移 十進(jìn)制 |
字段 |
大小 (字節(jié)) |
數(shù)值 |
說(shuō)明 |
0 |
bLength |
1 |
數(shù)字 |
描述符大。ㄗ止(jié)) |
1 |
bDescriptorType |
1 |
常數(shù) |
常數(shù)other_speed_configuration(07h) |
2 |
wTotalLength |
2 |
數(shù)字 |
此配置傳回的所有數(shù)據(jù)大。ㄗ止(jié)) |
4 |
bNumInterfaces |
1 |
數(shù)字 |
此配置支持的接口數(shù)目 |
5 |
bConfigurationValue |
1 |
數(shù)字 |
Set_configuration與get_configuration要求的標(biāo)識(shí)符 |
6 |
iConfigurtion |
1 |
索引值 |
此配置的字符串描述符的索引值 |
7 |
bmAuributes |
1 |
位圖 |
自身電源/總線電源以及遠(yuǎn)程喚醒設(shè)置 |
8 |
MaxPower |
1 |
mA |
需要總線電源,標(biāo)識(shí)法為(最大mA/2) |
n
每一個(gè)設(shè)置配置必須支持一個(gè)接口,對(duì)許多設(shè)備來(lái)說(shuō),一個(gè)接口就已經(jīng)足夠,不過(guò)一個(gè)設(shè)置配置,可以同時(shí)又多個(gè)作用中的接口。每一個(gè)接口有它自己的接口描述符,此接口所支持的所有端點(diǎn)又各有一個(gè)附屬描述符。
如果一個(gè)設(shè)備擁有同時(shí)多個(gè)作用中接口的設(shè)置配置,它就是一個(gè)復(fù)合設(shè)備,主機(jī)會(huì)為每一個(gè)接口,加載一個(gè)驅(qū)動(dòng)程序。
表7 接口描述符
位移 十進(jìn)制 |
字段 |
大小 (字節(jié)) |
數(shù)值 |
說(shuō)明 |
0 |
bLength |
1 |
數(shù)字 |
描述符大。ㄗ止(jié)) |
1 |
bDescriptorType |
1 |
常數(shù) |
常數(shù)interface(04h) |
2 |
bInterfaceNumber |
1 |
數(shù)字 |
識(shí)別此接口的數(shù)字 |
3 |
bAlternateSetting |
1 |
數(shù)字 |
用來(lái)選擇一個(gè)替代設(shè)置的數(shù)值 |
4 |
bNumEndpoints |
1 |
數(shù)字 |
除了端點(diǎn)0外,支持的端點(diǎn)數(shù)量 |
5 |
bInterfaceClass |
1 |
類(lèi)別 |
類(lèi)別碼 |
6 |
bInterfaceSubclass |
1 |
子類(lèi)別 |
子類(lèi)別碼 |
7 |
bInterfaceProtocol |
1 |
協(xié)議 |
協(xié)議碼 |
8 |
iInterface |
1 |
索引值 |
此接口的字符串描述符的索引值 |
n
表8 端點(diǎn)描述符
位移 十進(jìn)制 |
字段 |
大小 (字節(jié)) |
數(shù)值 |
說(shuō)明 |
0 |
bLength |
1 |
數(shù)字 |
描述符大小(字節(jié)) |
1 |
bDescriptorType |
1 |
常數(shù) |
常數(shù)endpoint(05h) |
2 |
bEndpointAddress |
1 |
端點(diǎn) |
端點(diǎn)數(shù)目與方向 |
3 |
bmAttributes |
1 |
數(shù)字 |
支持的傳輸類(lèi)型 |
4 |
wMaxPacketSize |
2 |
數(shù)字 |
支持的最大信息包大小 |
6 |
bInterval |
1 |
數(shù)字 |
最大延遲/輪詢時(shí)距/NAK速率 |
2
2
n
字符串描述符包含描述的文字,USB規(guī)范定義了制造者、產(chǎn)品、序號(hào)、配置以及接口的字符串描述符,字符串描述符是選擇性的,設(shè)備可以支持額外的字符串描述符。
表9 字符串描述符
位移 十進(jìn)制 |
字段 |
大小 (字節(jié)) |
數(shù)值 |
說(shuō)明 |
0 |
bLength |
1 |
N+2 |
描述符大。ㄗ止(jié)) |
1 |
bDescriptorType |
1 |
常數(shù) |
常數(shù)STRING(03h) |
2 |
bString |
不定 |
數(shù)字 |
如果是字符串描述符0,此字段是一個(gè)1個(gè)或更多語(yǔ)言標(biāo)識(shí)符碼的數(shù)組。如果是其他的字符串描述符,此字段是一個(gè)Unicode字符串 |