USB调试笔记
+ -

USB配置描述符实现设备的不同功能或者类协议版本

2023-06-28 247 0

USB规范设计灵活,通过不同的配置可以实现同一个USB设备实现不同的功能。

不同的配置描述符

USB规范中,对于同一个USB设备,由于主机或者连接线缆的原因,表现不同的速度。
如对于USB2.0一般会区分高速全速情况,对于USB3.0会区分USB3.0和USB2.0的情况。这种同一设备因设备在主机端枚举过程中表现不同的速率问题,主要是通过其它速率配置描述符设备限定描述符来实现的。另外,由于设备端其知道其与主机端的协商的结果,故也可以通过上报不同的配置描述符来实现。另一个广泛的使用领域就是有的设备需要区分操作系统的不同而表现上报不同的配置描述符。更有甚有的厂商在此的基础上扩展的更加广泛,加载系统默认的驱动时表现为默认的设备类型,当加载自己厂商的情况下,切换为其指定的设备类型
这一切都是通过上报不同的配置描述符来实现的。
以上的情况无论怎么变,设备上报其只有一个配置描述符。

多个配置描述符

另一种情况是设备通过设备描述符的bNumConfigurations字段上报给主机其由有多个配置描述符。通过GET_DESCIRPTOR获取这几个配置描述符并解析之后,通过SET_CONFIGURATION来选择一个其支持的配置描述符。
如我们有一个USB相机,其既支持最新UVC1.5版本用于提供用户最优的体验,但又为了兼容老的操作系统需要支持UVC1.0。

设备通过配置描述符bNumConfigurations=0x02上报给主机。该设备可以具有多个配置描述符以支持UVC 1.5或UVC 1.0。主机可以选择特定的配置描述符,或者扫描整个可用的配置描述符并选择最合适的配置描述符。

配置描述符

设备描述符

===>Device Descriptor<===
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0xEF 
bDeviceSubClass: 0x02 
bDeviceProtocol: 0x01
bMaxPacketSize0: 0x40 = (64) Bytes
idVendor: 0x046D
idProduct: 0x0823
bcdDevice: 0x0010
iManufacturer: 0x00
iProduct: 0x00
iSerialNumber: 0x00
bNumConfigurations: 0x02

注意这里的bNumConfigurations: 0x02

第一个配置描述符-UVC1.0

bConfigurationValue=0x01

===>Configuration Descriptor<===
bLength: 0x09
bDescriptorType: 0x02
wTotalLength: 0x0CC2
bNumInterfaces: 0x04
bConfigurationValue: 0x01 (first configuration)
iConfiguration: 0x00
bmAttributes: 0x80
MaxPower: 0xFA

===>Class-Specific Video Control Interface Header Descriptor<===
bLength: 0x0D
bDescriptorType: 0x24
bDescriptorSubtype: 0x01
bcdUVC: 0x0100 (UVC Version 1.0)
wTotalLength: 0x00BD
dwClockFrequency: 0x02DC6C00
bInCollection: 0x01
baInterfaceNr[1]: 0x01
...

第二个配置描述符-UVC1.2

bConfigurationValue=0x02

===>Configuration Descriptor<===
bLength: 0x09
bDescriptorType: 0x02
wTotalLength: 0x0CC2
bNumInterfaces: 0x04
bConfigurationValue: 0x02 (second configuration)
iConfiguration: 0x00
bmAttributes: 0x80
MaxPower: 0xFA

===>Class-Specific Video Control Interface Header Descriptor<===
bLength: 0x0D
bDescriptorType: 0x24
bDescriptorSubtype: 0x01
bcdUVC: 0x0150 (UVC Version 1.5)
wTotalLength: 0x00BD
dwClockFrequency: 0x02DC6C00
bInCollection: 0x01
baInterfaceNr[1]: 0x01
...
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB音箱 UAC配置描述符分析
该USB音箱的配置描述符和普通USB设备描述符结构体一致,并无特别区别。该配置描述符的总长度(包括后续的所有其它描述符)为110字节,这里相对华为耳机的要少了很多,这是因为少了像麦克风和HID。从配置描述符的字段bmAttributes来看,并不支持远程唤醒功能。 ------------......
华为UAC耳机 配置描述符
配置描述符的大小其实不光包括配置描述符自身,也包括后续的所有描述符。这里我们只先介绍一下配置描述符,后续的接口描述符和其它UAC相关描述符在后续一节介绍。配置描述符的内容如下: ------------------ Configuration Descriptor --------------......
UAC 其它速率配置描述符
在UAC规范中,并没有定义特别的其它速率配置描述符,故UAC音频设备的其它速率描述符应符合USB规范中的其它速率配置描述符。......
USB-UAC麦克风 配置描述符
UAC麦克风采用的配置描述符结构和USB配置描述符的结构一致.偏移地址字段长度值描述0bLength10x09配置描述符的长度1bDescriptorType10x02描述符类型,配置描述符类型2wTotalLength20x0064配置描述符的总长度(包括后续的UAC音频控制和UAC音频流接口描述......
USB设备描述符、配置描述符、接口描述符和端点描述符的拓扑关系
在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。每个USB设备都提供了不同级别的配置信息,可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合(在探测/连接期间需从其中选定一个),配置由多个接口组成。一次只能有一个配置是活动的。大多数的设备只有一个配置和一个接口,当一个设备......
USB 其它速率配置描述符
其它速率配置描述符(OTHER_SPEED_CONFIGURATION)。其它速率配置描述符与设备限定描述符(Device Qualifier Descriptor)配合使用, 当工作在其他速度下时使用, 除了描述符类型, 其他字段含义格式与配置描述符完全一致。 位移字段名称长度(字节......
UAC 配置描述符
UAC配置描述符仅用于单一功能的USB设备,没有专门的UAC特定的配置描述符,所以UAC音频设备的配置描述符应满足通用USB设备的配置描述符规范。......
USB 配置描述符
配置描述符定义了设备的配置信息,一个设备可以有多个配置描述符。大部分的USB设备只有一个配置描这符,设备存在多个配置描述符时.配置描述符指定设备的供电方式、最大功耗是多少、它拥有的接口数量。因此,可以有两种配置,一种用于设备由总线供电时,另一种用于设备供电时。由于这是接口描述符的“头”,因此使一种配......
HID报表描述符与设备描述符、配置描述符、字符串描述符的通讯格式对比
报表描述符是USB HID规范中一个很重要的概念。USB HID设备报表描述符内容表述了该HID设备的功能及数据传输的格式。USB HID报表描述符在概念上和设备描述符,配置描述符,接口描述符,端点描述符和其它USB设备描述符类似,但是还是有一些细微的区别。我里我们做一个简要的区别:设备描述符、......
UAC麦克风配置描述符
配置描述符包含了设备的配置信息,随配置描述符一起返回给主机的其它描述符代表了该设备的特性。UAC麦克风配置描述符的数据配置如下:数据结构定义如下:struct usb_config_descriptor { __u8 bLength; __u8 bDescriptorType; ......
仿照USBCCGP.SYS对USB配置描述符按功能拆分
USB大的规范中两个最麻烦的描述符一个是配置描述符,另一个是HID的报告描述符。一个因与其它描述符相互组合而复杂,一个因其自身的多样性而复杂。但你要问要问USB设备中那个描述符最烦人,答案肯定是配置描述符了。这是因为USB配置描述符不仅包含自己本身,也包含了其它描述符,如常用的接口描述符、端点描述符......
USB 设备同时支持全速模式与高速模式
当一个USB高速设备接入全速的HUB时,这时会出现高速模式协商失败,这时为了设备能正常使用,会自动使用全速模式来运行。所以为了同时支持全速与高速的设备,必须有Device Qualifier Descriptor和其它速率配置描述符(OTHER_SPEED_CONFIGURATION),用于描述全速......
Windows和Linux不同主机下USB设备枚举过程中的差别
第一次获取设备描述符的不同USB设备刚上电时,是通过端点0使用控制方式来获取设备描述符。不同的设备模式获取端点0的大小不同的:高速模式的端点0最大包长固定为64个字节;全速模式可端点0在8、16、32、64字节中选择;低速模式的端点0最大包长固定为8个字节由于USB主机和USB设备第一次通讯时......
Windows内核USB配置描述符解析函数
从USB配置描述符中解析相关的描述符,大量利用系统提供的函数。可以大量节省时间。#include PUSB_INTERFACE_DESCRIPTORdsc_find_first_intf(PUSB_CONFIGURATION_DESCRIPTOR dsc_......
Windows驱动中从配置描述符中解析接口描述符
Correct Sample A:/* pConfigurationDescriptor points to the descriptor previously requested from the driver. */PUSB_CONFIGURATION_DESCRIPTOR pConf......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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