UVC摄像头技术笔记
+ -

USB设备的调试笔记-奇怪枚举失败问题

2021-07-06 758 0

自己搞了一个USB 触摸屏的驱动,通过对系统的USB触摸屏设备进行更改,这样可以在自己的驱动中过滤来自触摸屏的数据。
在不加自定义驱动的情况下,设备管理器树关系如下:

  • USB输入设备
    • USB触摸屏设备
      而加上自己的设备驱动后,设备管理器树关系如下:
  • 自己的驱动程序
    • USB输入设备
      • USB触摸屏设备

从上述的设备管理器上可以看到,相对于原来的设备树,加了一层自己定义的设备驱动层。

触摸屏的数据过滤本人做了比较简单的方式,主要是过滤IRP_MJ_INTERNAL_DEVICE_CONTROL的回调函数。通过自行分析HID报表描述符,这样进行硬编码进行数据长度和数据内容的过滤。

在上述的设备管理器中,其实设备管理器树形结构中还有一层自定义HID设备,此HID设备用于对USB设备固件的升级。

以上的方案比较完美的解决了自己项目中的需求,但是,但是,出了问题。

通过频率的升级,这样USB设备会频敏的枚举,从理论的角度来讲,是没有任何问题的。
但是,在执行过程中,出现了USB设备枚举失败的问题。在设备管理器中看到的是设备树上有一个感叹号,显示设备启动取消。

重启设备又正常。

关于启动取消,启动在我的概念理解上一般是IRP_MN_START_DEVICE回调函数取消,这个应该是和设备在禁用或卸载驱动时的类似。所以我在代码中对进行过滤,并通过DbgView中查看结果。

使用 Windows下USB驱动同步URB转IRP请求函数代码 一文中的代码,详见网址:http://www.usbzh.com/fun/detail-31.html

这里一调不知道,竟然发现在设备的枚举启动过程中,从来没有看到由于底层PDO执行IRP_MN_START_DEVICE导致STATUS_PENDING而引起的同步等待。

执行了快几百次了,好不容易问题复现。竟然发现没有插入鼠标,没办法进行电脑操作。

此种情况下好像设备管理器还是USB总线死锁一般,根据不再识别新的设备

没办法,只能重新再挂机,这次我也加上了BusHoud,同时追踪USB设备的收发包信息。


你要说也奇怪,昨天在调步调用IRP的请求的时候,IoCallDriver没有发现一份PENDING状态,今天换了一台机器,基本全是PENDING状态。
其它这从侧面说明一个问题,自己调试成功的的并不一定代表正确无语的,只是一条在特定条件下的分支。

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 篇笔记 写笔记

Windows10设备管理器USB设备描述符请求失败(未知的usb设备)
在电脑中插入USB设备后,有时会报USB设备描述符请求失败,导致USB设备在设备管理器中枚举失败。一种专业的解决办法见:http://www.usbzh.com/article/detail-1059.htmlUSB设备描述符请求失败现象USB设备描述符请求失败在设备管理器中发现通用串行总线......
USB设备的调试笔记-奇怪枚举失败问题
自己搞了一个USB 触摸屏的驱动,通过对系统的USB触摸屏设备进行更改,这样可以在自己的驱动中过滤来自触摸屏的数据。在不加自定义驱动的情况下,设备管理器树关系如下:USB输入设备USB触摸屏设备而加上自己的设备驱动后,设备管理器树关系如下:自己的驱动程序USB输入设备USB触摸屏设备......
Windows10下开发虚拟USB鼠标之枚举子设备失败(STATUS_DEVICE_DATA_ERROR)
之前发过一篇文章:Win10使用虚拟USB鼠标实现自动挂机测试功能(文章地址:http://www.usbzh.com/article/detail-476.html ) 使用的是虚拟驱动实现的一个虚拟USB鼠标,实现了产品的自动测试功能。生成的设备在设备管理器中如下:但在开发过程中,并不是一帆......
虚拟USB设备状态错误信息:This device cannot start. (Code 10)
记个错误的笔记:在原来虚拟USB的设备上需要进行修改,没想到还是翻车了。这个问题应该还是很常见的,就是从设备管理器中查看该设备的状态,显示设备启动失败。设备的状态信息显示:This device cannot start. (Code 10)An invalid parameter was......
USB设备SetAddress失败
有的时候插拔USB设备,会出现各种各样的情况。我们其实见到的最多的是获取设备描述符失败。详见https://www.usbzh.com/article/detail-395.html另一种情况就是Set Address Failed。这种情况在系统中表现为:第一次获取设备描述符成功后,主机向设备分配......
通过注册表自定义摄像头UVC名称
相机在设备管理器的照料相机或者图像设备分类下:Image :{6bdd1fc6-810f-11d0-bec7-08002be2092f}Camera :{ca3e7ab9-b4c3-4ae6-8251-579ef933890f}他们的历史关系详见:https://www.usbzh.com/ar......
清除系统USB设备历史记录工具DeviceClean
前几天我写发文:固件更改USB摄像头名称不生效,网址为:https://www.usbzh.com/article/detail-1204.html由于自己本身就是一个USB开发者,所以其实针对上以情况,我也经常遇到。但由于自己研究过,知其原理,可以手动搞定。但是对于一些不懂原理的人,对此根本束手无......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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