表1 标准描述符类型
描述符类型 |
说明 |
是否需要 |
Device |
设备 |
是 |
Device_qualifier |
|
只有同时支持全速与高速的设备才需要,其它设备不允许 |
Configuration |
配置 |
是 |
Other_speed_configuration |
|
只有同时支持全速与高速的设备才需要,其它设备不允许 |
Interface |
接口 |
是 |
Endpoint |
端点 |
否,如果设备只使用端点0 |
String |
字符串 |
否,选择性的描述文字 |
Interface_power |
|
否。支持接口层级的电源管理 |
表2 描述符的数值
类型 |
数值(十六进制) |
描述符 |
标准 (standard) |
01 |
device |
02 |
configuration |
|
03 |
String |
|
04 |
Interface |
|
05 |
Endpoint |
|
06 |
Device_qualifier |
|
07 |
Other_speed_configuration |
|
08 |
Interface_power |
|
类别 (class) |
21 |
HID |
29 |
Hub |
|
HID类别特定 |
22 |
Report |
23 |
physical |
每一个描述符包含有数个字段,大部分的字段使用前置名称(prefix),来指出该字段的格式与内容。例如:
b表示该字段为一个字节的长度;
w表示两个字节的长度;
bm表示位映射,即字节中的每一位都对应不同的含义;
bcd表示BCD码;
i表示索引或是指针(index);
id表示标志符(identifier)。
n
表3 设备描述符
位移 十进制 |
字段 |
大小 (字节) |
数值 |
说明 |
0 |
bLength |
1 |
数字 |
描述符大小(字节) |
1 |
bDescriptorType |
1 |
常数 |
常数Device(01h) |
2 |
bcdUSB |
2 |
BCD |
USB规范版本号码 |
4 |
bDeviceClass |
1 |
类别 |
类别码 |
5 |
bDeviceSubclass |
1 |
子类别 |
子类别码 |
6 |
bDeviceProtocol |
1 |
协议 |
协议码 |
7 |
bMaxPacketSize(0) |
1 |
数字 |
端点0的最大信息包大小 |
8 |
idVendor |
2 |
ID |
厂商ID |
10 |
idProduct |
2 |
ID |
产品ID |
12 |
bcdDevice |
2 |
BCD |
设备版本号码 |
14 |
iManufacturer |
1 |
索引值 |
制造者的字符串描述符的索引值 |
15 |
iProduct |
1 |
索引值 |
产品的字符串描述符的索引值 |
16 |
iSerialNumber |
1 |
索引值 |
序号的字符串描述符的索引值 |
17 |
bNumConfigurations |
1 |
数字 |
可能配置的数目 |
n
表4 device_qualifier描述符
位移 十进制 |
字段 |
大小 (字节) |
数值 |
说明 |
0 |
bLength |
1 |
数字 |
描述符大小(字节) |
1 |
bDescriptorType |
1 |
常数 |
常数Device_qualifier(06h) |
2 |
bcdUSB |
2 |
BCD |
USB规范版本号码 |
4 |
bDeviceClass |
1 |
类别 |
类别码 |
5 |
bDeviceSubclass |
1 |
子类别 |
子类别码 |
6 |
bDeviceProtocol |
1 |
协议 |
协议码 |
7 |
bMaxPacketSize(0) |
1 |
数字 |
端点0的最大信息包大小 |
8 |
bNumConfigurations |
1 |
数字 |
可能配置的数目 |
9 |
Reserved |
1 |
0 |
保留 |
n
配置描述符有8个字段,如表5所示,在许多设置配置中,有些字段并不使用。
表5 配置描述符
位移 十进制 |
字段 |
大小 (字节) |
数值 |
说明 |
0 |
bLength |
1 |
数字 |
描述符大小(字节) |
1 |
bDescriptorType |
1 |
常数 |
常数configuration(02h) |
2 |
wTotalLength |
2 |
数字 |
此配置传回的所有数据大小(字节) |
4 |
bNumInterfaces |
1 |
数字 |
此配置支持的接口数目 |
5 |
bConfigurationValue |
1 |
数字 |
Set_configuration与get_configuration要求的标识符 |
6 |
iConfigurtion |
1 |
索引值 |
此配置的字符串描述符的索引值 |
7 |
bmAuributes |
1 |
位图 |
自身电源/总线电源以及远程唤醒设置 |
8 |
MaxPower |
1 |
mA |
需要总线电源,标识法为(最大mA/2) |
2
2
2
n
同时支持全速与高速的设备,必须有一个Other_speed_configuration描述符。此描述符的结构与配置描述符相同,唯一的差别是other_speed_configuration描述符描述的是当设备是在非作用中速度时的配置,Other_speed_configuration描述符与设备配置描述符相同。
表6 other_speed_configuration描述符
位移 十进制 |
字段 |
大小 (字节) |
数值 |
说明 |
0 |
bLength |
1 |
数字 |
描述符大小(字节) |
1 |
bDescriptorType |
1 |
常数 |
常数other_speed_configuration(07h) |
2 |
wTotalLength |
2 |
数字 |
此配置传回的所有数据大小(字节) |
4 |
bNumInterfaces |
1 |
数字 |
此配置支持的接口数目 |
5 |
bConfigurationValue |
1 |
数字 |
Set_configuration与get_configuration要求的标识符 |
6 |
iConfigurtion |
1 |
索引值 |
此配置的字符串描述符的索引值 |
7 |
bmAuributes |
1 |
位图 |
自身电源/总线电源以及远程唤醒设置 |
8 |
MaxPower |
1 |
mA |
需要总线电源,标识法为(最大mA/2) |
n
每一个设置配置必须支持一个接口,对许多设备来说,一个接口就已经足够,不过一个设置配置,可以同时又多个作用中的接口。每一个接口有它自己的接口描述符,此接口所支持的所有端点又各有一个附属描述符。
如果一个设备拥有同时多个作用中接口的设置配置,它就是一个复合设备,主机会为每一个接口,加载一个驱动程序。
表7 接口描述符
位移 十进制 |
字段 |
大小 (字节) |
数值 |
说明 |
0 |
bLength |
1 |
数字 |
描述符大小(字节) |
1 |
bDescriptorType |
1 |
常数 |
常数interface(04h) |
2 |
bInterfaceNumber |
1 |
数字 |
识别此接口的数字 |
3 |
bAlternateSetting |
1 |
数字 |
用来选择一个替代设置的数值 |
4 |
bNumEndpoints |
1 |
数字 |
除了端点0外,支持的端点数量 |
5 |
bInterfaceClass |
1 |
类别 |
类别码 |
6 |
bInterfaceSubclass |
1 |
子类别 |
子类别码 |
7 |
bInterfaceProtocol |
1 |
协议 |
协议码 |
8 |
iInterface |
1 |
索引值 |
此接口的字符串描述符的索引值 |
n
表8 端点描述符
位移 十进制 |
字段 |
大小 (字节) |
数值 |
说明 |
0 |
bLength |
1 |
数字 |
描述符大小(字节) |
1 |
bDescriptorType |
1 |
常数 |
常数endpoint(05h) |
2 |
bEndpointAddress |
1 |
端点 |
端点数目与方向 |
3 |
bmAttributes |
1 |
数字 |
支持的传输类型 |
4 |
wMaxPacketSize |
2 |
数字 |
支持的最大信息包大小 |
6 |
bInterval |
1 |
数字 |
最大延迟/轮询时距/NAK速率 |
2
2
n
字符串描述符包含描述的文字,USB规范定义了制造者、产品、序号、配置以及接口的字符串描述符,字符串描述符是选择性的,设备可以支持额外的字符串描述符。
表9 字符串描述符
位移 十进制 |
字段 |
大小 (字节) |
数值 |
说明 |
0 |
bLength |
1 |
N+2 |
描述符大小(字节) |
1 |
bDescriptorType |
1 |
常数 |
常数STRING(03h) |
2 |
bString |
不定 |
数字 |
如果是字符串描述符0,此字段是一个1个或更多语言标识符码的数组。如果是其他的字符串描述符,此字段是一个Unicode字符串 |