不正确的USB配置描述符错误STATUS_DEVICE_DATA_ERROR
2024-07-18
114
0
记录一次USB主机返回错误有配置描述符引起的设备枚举失败。
USB配置描述符是USB规范中很重要的一个描述符,该描述符不仅包括自身,也包括后续的功能描述符如接口描述符和数据传输描述符端点描述符。所以如果一个USB设备的配置描述符如果配置的有问题,USB设备肯定是不能正常工作的。
本人虚拟的USB设备因一次编写代码的问题,导致给主机返回了不正确的USB配置描述符,导致设备枚举失败。
在设备管理器中,设备驱动前会有个感叹号。
我们查看设备状态信息:
设备启失败,错误码10
具体原因是:STATUS_DEVICE_DATA_ERROR
当然,从设备管理器上来看,这里仅指示错误的数据,但具体是什么数据错误,并无明确的提示。
我们通过BUSHOUND其实也可以抓到相关的流程。
从抓图来看,可以看到分为三个不同的部分,其中第一次是正常的枚举过程,第二次和第三次分别是因为其前一次返回了错误的配置描述符数据之后,系统判断失败,无奈只能复位控制端点,进行了重试。只不过重试了两次之后问题依旧,所以系统就放弃治疗,直接上报错误并由设备管理器显示。
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