USB 通迅配置是通过描述符 完成的,下面对 USB 标准描述符 进行说明。
一、 USB 标准描述符
1 、标准设备描述符
偏移量 | 域 | 大小 | 值 | 描述 |
0 | bLength | 1 | 数字 | 描述符的大小= 12H |
1 | bD ecriptorType | 1 | 常量 | 设备描述符类型= 01H |
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 | 2 | ID | 厂商标志(由 USB 标准付值) |
10 | idProduct | 2 | ID | 产品标志(由厂商付值) |
12 | bcdDevice | 2 | BCD 码 | 设备发行号( BCD 码) |
14 | iManufacturer | 1 | 索引 | 描述厂商信息的字串的索 引。 |
15 | iProduct | 1 | 索引 | 描述产品信息的字串的索 引。 |
16 | iSerialNumber | 1 | 索引 | 描述设备序列号信息的字串 的索引。 |
17 | bNumConfigurations | 1 | 数字 | 可能的设置数 |
2 、 标准配置描述符
偏移量 | 域 | 大小 | 值 | 描述 |
0 | bLength | 1 | 数字 | 描述符的大 小= 09H |
1 | bDescriptorType | 1 | 常量 | 配置描述符 类型= 02H |
2 | wTotalLength | 2 | 数字 | 此配置信息 的总长(包括配置,接口,端点和设备类及厂商定义的描述符) |
4 | bNumInterfaces | 1 | 数字 | 此配置所支 持的接口个数 |
5 | bCongfigurationValue | 1 | 数字 | 在 SetConfiguration ()请求中用作参数来选定此配置。 |
6 | iConfiguration | 1 | 索引 | 描述此配置 的字串描述符索引 |
7 | bmAttributes | 1 | 位图 | 配置特性: D7 : 保留(设为一) D6 : 自给电源 D5 : 远程唤醒 D4..0 : 保留(设为一) 一个既用总 线电源又有自给电源的设备会在 MaxPower 域指出需要从总线取的电量。并设置 D6 为一。运行时期的实际电源模式可由 GetStatus(DEVICE) 请求得到。 |
8 | MaxPower | 1 | mA | 在此配置下 的总线电源耗费量。以 2mA 为一个单位。 |
3 、 标准接口描述符
偏移量 | 域 | 大小 | 值 | 说明 |
0 | bLength | 1 | 数字 | 描述符的大 小= 09H |
1 | bDescriptorType | 1 | 常量 | 接口描述符 类型= 04H |
2 | bInterfaceNumber | 1 | 数字 | 接口号,当 前配置支持的接口数组索引(从零开始) |
3 | bAlternateSetting | 1 | 数字 | 可选设置的 索引值。 |
4 | bNumEndpoints | 1 | 数字 | 此接口用的 端点数量,如果是零则说明此接口只用缺省控制管道。 |
5 | bInterfaceClass | 1 | 类 | 类值 零 值为将来的标准保留。 如 果此域的值设为 FFH ,则此接口类由厂商说明。 所 有其它的值由 USB 说明保留。 |
6 | bInterfaceSubClass | 1 | 子类 | 子类码 这 些值的定义视 bInterfaceClass 域而定。 如果 bInterfaceClass 域的值为零则此域的值必须为零。 bInterfaceClass 域不为 FFH 则所有值由 USB 所 保留。 |
7 | bInterfaceProtocol | 1 | 协议 | 协议码: bInterfaceClass 和 bInterfaceSubClass 域的值而定 . 如果一个 接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议 .
|
8 | iInterface | 1 | 索引 | 描述此接口 的字串描述符的索引值。 |
4 、 标准端点描述符
偏移量 | 域 | 大小 | 值 | 说明 |
0 | bLength | 1 | 数字 | 描述符的大 小= 07H |
1 | bDescriptorType | 1 | 常量 | 端点描述符 类型= 05H |
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 。 |
5 、语言 描述符
偏移量 | 域 | 大小 | 值 | 描述 |
0 | bLength | 1 | N+2 | 描述符的大 小 |
1 | bDescriptorType | 1 | 常量 | 字串描述符 类型= 03H |
2 | wLANGID[0] | 2 | 数字 | 语言标识( LANGID )码 0 |
… | … | … | … | … |
N | wLANGID[x] | 2 | 数字 | 语言标识( LANGID )码 X |
6 、 UNICODE 字串描述符
偏移量 | 域 | 大小 | 值 | 描述 |
0 | bLength | 1 | 数字 | 描述符的大 小 |
1 | bDescriptorType | 1 | 常量 | 字串描述符 类型= 03H |
2 | bString | N | 数字 | UNICODE 编码的字串 |
二、 图解枚举过程中的描述符
1 、枚举成功后主机得到的第一个描述符(设备描述符),见图 1
(图 1 )(本数据由 HD-USB12 USB 协议分析仪采集)
a、 Index[38 - 44] :设备发送到主机的描 述,详见图 2 。
b、 图 2 为设备描述符,其各字段 含义参考上面标准设备描述符。
2 、枚举成功后主机得到的第二个描述符(配置描述符),见图 3
a 、 Index[54 - 56] :设备发送到主机的描 述,详见图 4 。
b 、图 4 为配置描述符,其各字段 含义参考上面标准配置描述符。
3 、随后为配置描述符 、接口 描述符 及端点 描述符见图 5
a 、 Index[67 - 78] :设备发送到主机的描 述,详见图 6 、图 7 、图 8 及图 9 。
b 、图 6 为配置描述符,其各字段 含义参考上面标准配置描述符。
c 、图 7 为接口描述符,其各字段 含义参考上面标准接口描述符。
d 、图 8 及图 9 为端点描述符,其各字段 含义参考上面标准端点描述符。