USB调试笔记
+ -

不正确的USB配置描述符错误STATUS_DEVICE_DATA_ERROR

2024-07-18 114 0

记录一次USB主机返回错误有配置描述符引起的设备枚举失败。
USB配置描述符是USB规范中很重要的一个描述符,该描述符不仅包括自身,也包括后续的功能描述符如接口描述符和数据传输描述符端点描述符。所以如果一个USB设备的配置描述符如果配置的有问题,USB设备肯定是不能正常工作的。
本人虚拟的USB设备因一次编写代码的问题,导致给主机返回了不正确的USB配置描述符,导致设备枚举失败。
在设备管理器中,设备驱动前会有个感叹号。
155836127482
我们查看设备状态信息:
155906733643
设备启失败,错误码10
具体原因是:STATUS_DEVICE_DATA_ERROR
当然,从设备管理器上来看,这里仅指示错误的数据,但具体是什么数据错误,并无明确的提示。
我们通过BUSHOUND其实也可以抓到相关的流程。
160248316480

从抓图来看,可以看到分为三个不同的部分,其中第一次是正常的枚举过程,第二次和第三次分别是因为其前一次返回了错误的配置描述符数据之后,系统判断失败,无奈只能复位控制端点,进行了重试。只不过重试了两次之后问题依旧,所以系统就放弃治疗,直接上报错误并由设备管理器显示。

Device  Length    Phase  Data
------  --------  -----  ----------------------------------------------------------------------
//获取设备描述符
  37.0      CTL    80 06 00 01  00 00 12 00
  37.0  18  IN     12 01 00 02  00 00 00 40  1e 35 67 02  02 01 01 02  00 01

//第一次获取配置描述符
  37.0      CTL    80 06 00 02  00 00 09 00
  37.0   9  IN     09 02 29 00  03 01 00 80  30
  37.0      CTL    80 06 00 02  00 00 29 00
  37.0  41  IN     09 02 29 00  03 01 00 80  30 09 04 03  00 02 03 01  02 00 09 21  11 01 00 01  22 44 00 07  05 83 03 00 04 0a 07 05  03 03 00 04  0a

//第一次获取配置描述符
37.0      CTL    80 06 00 02  00 00 09 00
  37.0   9  IN     09 02 29 00  03 01 00 80  30
  37.0      CTL    80 06 00 02  00 00 29 00
  37.0  41  IN     09 02 29 00  03 01 00 80  30 09 04 03  00 02 03 01  02 00 09 21  11 01 00 01  22 44 00 07  05 83 03 00 04 0a 07 05  03 03 00 04  0a

//第三次获取配置描述符
  37.0      CTL    80 06 00 02  00 00 09 00
  37.0   9  IN     09 02 29 00  03 01 00 80  30
  37.0      CTL    80 06 00 02  00 00 29 00
  37.0  41  IN     09 02 29 00  03 01 00 80  30 09 04 03  00 02 03 01  02 00 09 21  11 01 00 01  22 44 00 07  05 83 03 00 04 0a 07 05  03 03 00 04  0a

当然,在每一大部分内部,也是总共三次的偿试获取。如第一次获取配置描述符判断错误之后,又最多连试2次再获取。

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......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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