【发布时间】:2017-05-29 09:13:41
【问题描述】:
总结
我正在使用STM32F072 Discovery board 为自定义 USB 设备开发固件和 PC 测试应用程序。该设备包含PC上WinUSB驱动的MicrosoftWindows Compatible IDs (WCIDs) to enable automatic installation。
在其他 Windows 10 主机上正确枚举了该设备,但在我的 Windows 10 开发 PC 上却没有。我的开发 PC 之前曾尝试枚举具有相同 VID/PID 组合但具有不同描述符/元数据的设备。如果我将 PID 更改为其他数字(对我的开发 PC 来说是新的),它确实正确枚举。
问题
- 如何让它与我的开发 PC 上所需的 VID/PID 组合一起工作?
- Windows 缓存 USB 元数据是否是这台 PC 上枚举失败的原因?
- 在设备描述符和元数据不断变化的阶段,在 (Windows) PC 端测试/开发 USB 设备固件的最佳做法是什么?是否可以避免仅仅为了避免 Windows 缓存而咀嚼 PID?
详情
由于 Windows 从以前的枚举中缓存 USB 描述符等的方式,在固件开发过程中,每次我进行其他更改后,我都会在固件中增加设备产品 ID (PID),以确保 Windows 没有从描述符的先前迭代中缓存东西,并弄乱原本可以工作的东西。
现在我已经让设备作为 WinUSB 设备在 Windows 7、8 和 10 PC 上成功枚举,并且我已经建立了通信。但是,当我将固件改回使用我开始使用的 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 Box 虚拟机。我不确定那里发生了什么。
【问题讨论】:
-
我首先断开设备configuring Device Manager to show it anyway,然后使用“完全删除”选项删除驱动程序。然后检查注册表是否有任何引用,如果您有权限问题,您可能需要在本地系统上下文中运行 regedit。 您还需要检查
c:\windows\inf并删除旧 inf 文件的所有副本以及引用该设备的任何 oem*.inf 文件。 可能还有其他地方,但这些是我知道的那些。当然,您需要重新启动。 :-) -
@HarryJohnston,
deleting the driver with the "remove completely" option- 您是指“确认设备卸载”对话框中的“删除此设备的驱动程序软件”复选框吗? -
是的,这就是我的意思。
-
@HarryJohnston,我尝试了你的建议,但没有奏效。我认为任何
oem*.inf文件都与我的设备无关,因为我使用的是WCID。顺便说一句,当我卸载设备时,“删除此设备的驱动程序软件”选项不可用。 -
您是否尝试在注册表中搜索相关 PID 的任何其他实例?还是你的 VID?
标签: windows usb driver stm32 winusb