您现在的位置是:主页 > USB2.0规范 >

USB 配置描述符

发布时间:2022-12-26 04:23:26所属栏目:USB2.0规范 已帮助编辑作者:【USB接口百科】

配置描述符定义了设备的配置信息,一个设备可以有多个配置描述符。
大部分的USB设备只有一个配置描这符,设备存在多个配置描述符时.
配置描述符指定设备的供电方式、最大功耗是多少、它拥有的接口数量。因此,可以有两种配置,一种用于设备由总线供电时,另一种用于设备供电时。由于这是接口描述符的“头”,因此使一种配置使用与另一种配置不同的传输模式也是可行的。

一旦主机检查了所有配置,主机将发送具有非零值的 SetConfiguration 命令,该值与其中一个配置的bConfigurationValue 匹配。这用于选择所需的配置。

配置描述符

读取配置描述符时,它会返回整个配置层次结构,其中包括所有相关的接口和端点描述符。wTotalLength字段反映配置描述符层次结构中的字节数。

配置描述符在USB设备的枚举过程中,需要获取两次:
第一次只获取配置描这符的基本长度9字节,获取后从wTotalLength字节中解析出配置描述符的总长度,然后再次获取全部的描述符。

配置描述数据中不仅包括配置描述符本身,也包括其下的接口描述符和端点描述符。

配置描述符定义
struct _CONFIGURATION_DESCRIPTOR_STRUCT 
{ 
  BYTE bLength;           //配置描述符的字节数大小,固定为9字节
  BYTE bDescriptorType;   //描述符类型编号,为0x02 
  WORD wTotalLength;     //配置所返回的所有数量的大小 
  BYTE bNumInterface;     //此配置所支持的接口数量 
  BYTE bConfigurationVale;   //Set_Configuration命令需要的参数值 
  BYTE iConfiguration;       //描述该配置的字符串的索引值 
  BYTE bmAttribute;           //供电模式的选择 
  BYTE MaxPower;             //设备从总线提取的最大电流 
}CONFIGURATION_DESCRIPTOR_STRUCT
bLength : 描述符大小.固定为0x09.bDescriptorType : 配置描述符类型.固定为0x02.wTotalLength : 返回整个数据的长度.指此配置返回的配置描述符,接口描述符以及端点描述符的全部大小.bNumInterfaces : 配置所支持的接口数.指该配置配备的接口数量,也表示该配置下接口描述符数量.bConfigurationValue : 作为Set Configuration的一个参数选择配置值.iConfiguration : 用于描述该配置字符串描述符的索引.bmAttributes : 供电模式选择.Bit4-0保留,D7:总线供电,D6:自供电,D5:远程唤醒.MaxPower : 总线供电的USB设备的最大消耗电流.以2mA为单位.接口描述符:接口描述符说明了接口所提供的配置,一个配置所拥有的接口数量通过配置描述符的bNumInterfaces决定。 windbg查看某USB移动硬盘配置描述符示例:
1: kd> dt _USB_CONFIGURATION_DESCRIPTOR 0xffffbe09`4652cfd0
xxx!_USB_CONFIGURATION_DESCRIPTOR
   +0x000 bLength          : 0x9 ''
   +0x001 bDescriptorType  : 0x2 ''
   +0x002 wTotalLength     : 0x29
   +0x004 bNumInterfaces   : 0x1 ''    接口数量
   +0x005 bConfigurationValue : 0x1 ''
   +0x006 iConfiguration   : 0xfa ''
   +0x007 bmAttributes     : 0xc0 ''
   +0x008 MaxPower         : 0 ''
通过USBView获取logitech鼠标配置描述符:

可以看到既有配置描述符,也有接口描述符和端点描述符.

      ---===>Full Configuration Descriptor<===---

          ===>Configuration Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x02
wTotalLength:                    0x0055  -> Validated
bNumInterfaces:                    0x01
bConfigurationValue:               0x01
iConfiguration:                    0x00
bmAttributes:                      0x80  -> Bus Powered
MaxPower:                          0xFA = 500 mA

          ===>Interface Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x04
bInterfaceNumber:                  0x00
bAlternateSetting:                 0x00
bNumEndpoints:                     0x02
bInterfaceClass:                   0x08  -> This is a Mass Storage USB Device Interface Class
bInterfaceSubClass:                0x06
bInterfaceProtocol:                0x50
iInterface:                        0x00

          ===>Endpoint Descriptor<===
bLength:                           0x07
bDescriptorType:                   0x05
bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0200 = 0x200 max bytes
bInterval:                         0x00

          ===>Endpoint Descriptor<===
bLength:                           0x07
bDescriptorType:                   0x05
bEndpointAddress:                  0x02  -> Direction: OUT - EndpointID: 2
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0200 = 0x200 max bytes
bInterval:                         0x00

          ===>Interface Descriptor<===
bLength:                           0x09
bDescriptorType:                   0x04
bInterfaceNumber:                  0x00
bAlternateSetting:                 0x01
bNumEndpoints:                     0x04
bInterfaceClass:                   0x08  -> This is a Mass Storage USB Device Interface Class
bInterfaceSubClass:                0x06
bInterfaceProtocol:                0x62
iInterface:                        0x00

          ===>Endpoint Descriptor<===
bLength:                           0x07
bDescriptorType:                   0x05
bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
bmAttributes:                      0x02  -> Bulk Transfer Type
wMaxPacketSize:                  0x0200 = 0x200 max bytes
bInterval:                         0x00
  -> This is a Mass Storage USB Device Interface Class

     以上就是USB接口百科为您提供USB 配置描述符的解读,本文章链接: http://www.usb-hub.cn/usb20gf/42284.html 欢迎分享转载,更多婚礼相关资讯请前往USB2.0规范

上一篇:USB 设备描述符

下一篇:USB 接口描述符