USB2.0规范
+ -

USB 配置描述符

2020-10-31 460 413
欢迎加入官方QQ群:952873936或联系站长进行技术交流。

配置描述符定义了设备的配置信息,一个设备可以有多个配置描述符。
大部分的USB设备只有一个配置描这符,设备存在多个配置描述符时,系统会自动弹出对话框让用户选择。

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

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

配置描述符定义

struct _CONFIGURATION_DESCRIPTOR_STRUCT 
{ 
  BYTE bLength;           //配置描述符的字节数大小,为0x12 
  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

0 篇笔记 写笔记

UVC 扩展单元描述符
扩展单元描述符允许硬件设计者定义任意一组控制接口,使类驱动程序可以在设备与供应商提供的主机软件之间进行通讯控制。扩展单元描述符ID由bUnitID字段中的值唯一标识描述符。同一视频功能内的任何其他单元或终端不得具有相同的功能ID。guidExtensionCode字段包含特定于供应商的代码,该代......
USB 设置描述符SetDescriptor
ID请求码说明7SET_DESCRIPTOR修改设备中有关的描述符,或者增加新的描述符SetDescriptoret用于设置USB的描述符,在SetDescriptor请求的数据阶段,主机将向USB设备发送指定的描述符类型 。bmRequestType(1)bRequest(1)wValue(2)w......
USB超高速 超高速端点伴随描述符
在接口中描述的每个超高速端点都紧跟着一个超高速端点伴侣描述符( EndpointCompanion descriptor)。这个描述符包含只给超高速端点定义的附加端点特性。这个描述符总是 作 为 配 置 描 述 符 信 息 的 一 部 分 在GetDescriptor(Configuration) ......
UVC 描述符描述符布局
USB设备的描述符用于向主机报告其设备的属性信息,UVC设备属于USB设备的一种,故和通用的USB设备一样,也包含设备描述符配置描述符、接口描述符、端点描述符和字符串描述符。UVC设备在也定义了一些特有的描述符,用于对USB视频设备的扩展。这些特有的UVC描述符和通用的USB描述符,共同组成了UV......
USB音响 UAC设备描述符分析
这里看到,USB规范采用的是USB1.1版本,不过字符串中又显示的是”USB2.0 Device”,所以这里就有点迷~关于设备描述符各字段的详细解释,详见USB规范中设备描述符一节。从bDeviceClass,bDeviceSubClass和bDeviceSubClass都被置为0来看,这是一个典型......
USB超高速 精密时间测量描述符
精密时间测量描述符(Precision Time Measurement)应由支持PTM能力的所有集线器和设备实现。OffsetFieldSizeValueDescription0bLength1数字描述符长度1bDescriptorType1常量描述符的类型,这里为DEVICE CAPABILIT......
UAC 类特定音频控制接口头描述符
UAC类特定音频控制头接口描述符这个名字有点绕,其实这个描述符是前接标准的音频控制接口描述符,后续关于音频控制的所有相关描述符,起着承上起下的作用。当然也可以认为是音频控制相关描述符的前导。这是因为UAC类特定音频控制接口描述符含有一个关键的字段wTotalLength,用于包含音频控制所有接口描述......
UVC的版本区别之处理单元描述符
UVC规范自发布到现在,已经有UVC1.0,UVC1.1和UVC1.5三个版本了。在Windows环境下,支持的最广泛的是UVC1.0,从Win7开始支持UVC1.1,从Win8开始支持UVC1.5.我们常用的UVC摄像头一般为了支持更加广泛的操作系统,一般情况下UVC的固件是UVC1.0,但随着固......
UVC 颜色匹配描述符
颜色匹配描述符是一个可选描述符,这是一个与图像成像时色域相关的参数。对于未压缩的视频格式,必须使用颜色匹配描述符bt709是srgb色域。色域是对一种颜色进行编码的方法,也指一个技术系统能够产生的颜色的总和。在计算机图形处理中,色域是颜色的某个完全的子集。颜色子集最常见的应用是用来精确地代表一种给定......
HID 触摸屏的报表描述符
讲道理,这个触摸屏的报告描述符是我从网上搜索的一段代码,这个触摸屏的报告内容本人也进行了测试。测试是通过本站编写的虚拟触摸屏驱动实现的。0x05, 0x0d, // USAGE_PAGE (Digitizers) 0 0x......
USB音响 UAC配置描述符分析
该USB音箱的配置描述符和普通USB设备描述符结构体一致,并无特别区别。该配置描述符的总长度(包括后续的所有其它描述符)为110字节,这里相对华为耳机的要少了很多,这是因为少了像麦克风和HID。从配置描述符的字段bmAttributes来看,并不支持远程唤醒功能。 --------------......
UVC 选择器单元描述符
选择器单元ID由bUnitID字段中的值唯一标识描述符。同一视频功能内的任何其他单元或终端不得具有相同的功能ID。 UINT8 bLength; UINT8 bDescriptorType; UINT8 bDescriptorSubtype; UINT8 bUnitID; ......
华为UAC耳机 配置描述符
配置描述符的大小其实不光包括配置描述符自身,也包括后续的所有描述符。这里我们只先介绍一下配置描述符,后续的接口描述符和其它UAC相关描述符在后续一节介绍。配置描述符的内容如下: ------------------ Configuration Descriptor --------------......
UVC 接口关联描述符IAD
设备必须使用接口关联描述符来描述需要视频控制接口和一个或多个视频流接口的每个设备功能的视频接口集合。标准的VIC接口关联描述符与接口关联描述符ECN中定义的标准接口关联描述符相同,只是有些字段现在具有专用值。说明:如果视频控制接口是视频接口集合的一部分,则接口关联描述符IAD中的iFunction字......
Windows10设备管理器USB设备描述符请求失败(未知的usb设备)
在电脑中插入USB设备后,有时会报USB设备描述符请求失败,导致USB设备在设备管理器中枚举失败。USB设备描述符请求失败现象USB设备描述符请求失败在设备管理器中发现通用串行总线控制器下面有一项黄色感叹号并提示“未知USB设备(设备描述符请求失败)”或者是“Unknown USB Device(......
作者信息
USB中文网
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!