下面关于描述符的各个段的说明本是作了一个表格,考过来格式有点变化,有心者参考标准的spec吧。
Offset Field Size Value Description
0 bLength 1 描述符长度 此描述符的字节数
1 bDecriptorType 1 常量 设备描述符的标识
2 bcdUSB 2 BCD码 USB设备说明版本号(BCD 码)
4 bDeviceClass 1 设备类 类码
如果该值为0表示有每个配置下每个接口指出它自己的类,并个接口各自独立工作。
如果值处于1~FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了这些接口集体的类定义。
如果此域设为FFH,则此设备的类由厂商定义。
5 bDeviceSubClass 1 设备子类 子类码
这些码值的具体含义根据bDeviceClass 域来看。
如bDeviceClass 域为零,此域也须为零。
如bDeviceClass 域为FFH,此域的所有值保留。
6 bDevicePortocol 1 协议 协议码
这些码的值视bDeviceClass 和
bDeviceSubClass 的值而定。
如果设备支持设备基础上的类相关的协议,此码标志了设备类说明上的值。
如果此域的值为零,则此设备不在设备基础上支持设备类相关的协议。然而,它可能在接口基础上支持设备类相关的协议。
如果此域的值为FFH,此设备使用厂商定义的协议。
7 bMaxPacketSize0 1 长度 端点0的最大包大小(仅8,16,32,64为合法值)
8 idVendor 1 ID 厂商标志(由USB标准付值)
10 idProduct 1 ID 产品标志(由厂商付值)
12 bcdDevice 2 BCD码 设备发行号(BCD 码)
14 iManufacturer 1 索引 描述厂商信息的字串的索引
15 iProduct 1 索引 描述产品信息的字串的索引。
16 iSerialNumber 1 索引 描述设备序列号信息的字串的索引。
17 bNumConfigurations 1 数字 可能的设置数
b)配置描述符
一个USB设备有一个或多个配置,每个配置做着不同的事情。每个配置有一个或多个接口。而每个接口又有1个或多个端点。在一个配置下,一个端点不能被几个接口使用,除非该端点被该接口的可选设置使用。在不同的配置中端点没有限制。对USB设备选完配置后,设备可支持对配置的有限调整,如果一个接口有备选设置,在配置好后可选择不同设置。
Offset Field Size Value Description
0 bLength 1 描述符长度 此描述符的字节数
1 bDecriptorType 1 常量 配置描述符的标识
2 WTotalLength 2 数目 此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述表)
4 bNumInterfaces 1 数目 该配置所支持的接口个数
5 bCongfigurationValue 1 数目 在SetConfiguration()请求中用作参数来选定此配置。
6 iConfiguration 1 索引 描述此配置的字串描述表索引
7 bmAttributes 1 位图 配置特性:
D7: 保留(设为一)
D6: 自给电源
D5: 远程唤醒
D4..0:保留(设为一)
一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量。并设置D6 为1 。运行时期的实际电源模式可由GetStatus(DEVICE) 请求得到
8 MaxPower 1 mA 在此配置下的总线电源耗费量。以 2mA 为一个单位。
c)接口描述符
接口描述符不能单独获取,只能在获取配置描述符时获得。如果一个配置支持不止一个接口,端节的描述符会跟在接口描述符后被返回,接口描述符跟在配置描述符的后面返回。接口描述不可直接用Set Description ( )和Get Descriptor ( )操作。
有时某个接口有可选设置,设备在进行了配置的情况下可以更改为接口的可选设置。SetInterface ( )与GetInterface ( )用来选择与返回选择了的接口设置。
如果一个设备的配置为一个接口,该接口有两个可选设置,当获取配置描述符时,返回配置描述符以后会紧跟着返回bInterfaceNumber与bAlternateSetting域皆为0的第一个设置的接口描述表及相关的端点描述符,然后是另一个设置接口描述符与端点描述符。第二个接口描述符的bInterfaceNumber域也应为0,但bAlternateSetting域应为1。因为是同一接口的不同设置,所以bInterfaceNumber是一样的。
每个接口代表着一种功能。你的手机是做U盘,还是做摄像头。这就是配置。当作为U盘时可能一个接口就够了。摄像头时可能需要几个接口,有音频还得有视频,而设置呢,比如音量可大可小,这应该就是设置吧。
接口描述符中的端点个数不包括端点0。
Offset Field Size Value Description
0 bLength 1 描述符长度 此描述符的字节数
1 bDecriptorType 1 常量 接口描述符的标识
2 bInterfaceNumber 1 数目 当前配置支持的接口数组索引,0开始。
3 bAlternateSetting 1 数目 可选设置的索引值
4 bNumEndpoints 1 数目 接口使用的端点数目。0代表只使用控制传输
5 bInterfaceClass 1 索引 类值零值为将来的标准保留。如果此域的值设为FFH,则此接口类由厂商说明。所有其它的值由USB 说明保留
6 bInterfaceSubClass 1 子类 子类码
这些值的定义视bInterfaceClass 域而
定。如果bInterfaceClass域的值为零则
此域的值必须为零。bInterfaceClass域
不为FFH则所有值由USB 所保留
7 bInterfaceProtocol 1 协议 协议码: bInterfaceClass 和
bInterfaceSubClass 域的值而定.如果
一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议
8 iInterface 1 索引 描述此接口的字符串描述表的索引值
d)端点描述符
每个接口有若干个端点。端点描述符信息中包含端点号、方向、端点类型等。
Offset Field Size Value Description
0 bLength 1 描述符长度 此描述符的字节数
1 bDecriptorType 1 常量 端点描述符的标识
2 bEndpointAddress 1 端点 此描述表所描述的端点的地址。此地址的编码如下:
Bit 3..0 :端点号.Bit 6..4 :保留,为零
Bit 7:方向,如果控制端点则略。(0:出端点1:入端点)
3 bmAttributes 1 位图 此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。
Bit 1..0 :传送类型(00=控制传送 01=同步传送10=批传送 11=中断传送)所有其它的位都保留
4 wMaxPacketSize 2 数字 当前配置下此端点能够接收或发送的最大数据包的大小。对与同步传送此值用于为每幀的数据净负荷预留时间。而通道可能在实际运行时不需要预留的带宽。实际带宽可由设备通过一种非USB定义的机制汇报给主机.对于中断传送,批传送,控制传送.端点可能发送较小的数据包。并且在结束传送后既有可能间隙时间来重启,也有可能不需要这段时间
6 bInterval 1 数字 轮寻数据传送端点的时间间隙。此域的值对于批传送的端点及控制传送的端点忽略。对于同步传送的端点此域必需为1。对于中断传送的端点此域值的范围为1到255
|