概括
我正在使用STM32F072 Discovery board为自定义 USB 设备开发固件和 PC 测试应用程序。该设备包括 Microsoft Windows 兼容 ID (WCID),可在 PC 上自动安装 WinUSB 驱动程序。
该设备在其他 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 不会缓存来自描述符的先前迭代,并弄乱了本来可以工作的东西。
现在我已经让设备在 Windows 7、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 Box 虚拟机。我不确定那里发生了什么。