摘要
我正在开发固件和个人电脑测试应用程序的自定义USB设备,使用STM32F072发现板。该设备包括微软Windows兼容ID(WCID)以启用自动安装的WinUSB驱动程序在PC上。
该设备在其他Windows 10主机上是正确枚举的,但在我的Windows 10开发PC上不正确。当设备具有相同的VID/PID组合,但具有不同的描述符/元数据时,我的开发PC曾试图枚举该设备。如果我将PID更改为其他数字(对我的开发PC来说是新的),它就会正确地枚举。
问题
详细信息
由于Windows从以前的枚举中缓存USB描述符等的方式,在固件开发期间,每次进行其他更改后,我都会增加固件中的设备产品ID (PID),以确保Windows不会缓存描述符以前的迭代中的东西,并且会破坏本来可以工作的东西。
现在,我已经成功地在Windows7、8和10台PC上作为WinUSB设备枚举了设备,并建立了通信。但是,当我将固件改为使用我开始使用的VID/PID,然后将设备连接到我的开发PC时,它会显示在设备管理器中的“其他设备”下,并带有一个错误图标。我认为这是因为我的(Windows 10)开发PC之前认为这个VID/PID组合有不同的描述符,所以它被一些不好的缓存的东西弄糊涂了。
我尝试使用regedit
删除HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_yyyy
下设备的注册表项,但问题仍然存在。(另外,我收到一个错误,因为它无法删除VID_xxxx&PID_yyyy\zzzzzzzzzzzzz\Properties
子文件夹。)我还尝试使用USBDeview卸载设备的旧迭代,但这也没有什么区别。
另外值得注意的是,我不能再将设备传递到Virtual虚拟机。我不知道那里发生了什么。
发布于 2017-01-18 00:52:12
尝试删除表单的任何相关注册表项:
HLKM\SYSTEM\CurrentControlSet\Control\UsbFlags\vvvvpppprrrrr
MSDN的文章用于USB设备的Microsoft OS描述符说:
操作系统在此注册表项下创建一个名为osvc的注册表项,该注册表项指示设备是否支持Microsoft描述符。如果设备在操作系统第一次查询Microsoft OS字符串描述符时没有提供有效响应,则操作系统将不再对该描述符发出任何请求。
发布于 2018-05-03 22:50:21
我知道OP已经解决了他的问题,但是对于其他有这个问题的人来说,我也有类似的问题:我在开发带有特定厂商类的USB设备时遇到了类似的问题。具体来说,(类似于您的经验),我无法从以下位置删除键:
HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_yyyy
,
因此,每次修改设备代码时,我都必须增加PID值。
不能删除这些键的原因是Properties
注册表子文件夹属于System user
,因此即使以管理员身份运行,也不能删除该子文件夹或更改其权限。
从提升的命令提示符中通过PsExec ( Mark中的PsExec是SysInternals套件的一部分)运行Regedit,这意味着您可以删除该讨厌的属性子文件夹和父VID_xxxx&PID_yyyy
键。
发布于 2021-04-02 23:21:04
我面临着同样的问题,卸载设备没有帮助。在登记处乱搞让我感到不安。对于问题3,我仍然没有找到真正的答案。在我的情况下,什么是有效的:打开设备管理器,选择不工作的设备并执行“更新驱动程序”。从本地可用(Microsoft)驱动程序列表中手动选择驱动程序。这并没有解决我所有的问题,但至少Windows不再忽视我的设备,我可以继续开发。
编辑:我在一个名为WCID设备的github项目上找到了一个非常有用的描述。我强烈建议阅读本页的实现部分和下面的WCID器件
https://stackoverflow.com/questions/41644081
复制相似问题