
[英]Custom USB VID/PID - make Windows 7 & 8 automatically choose usbser.sys driver
[英]Why the usbser.sys is not used with a USB CDC-ACM device?
Microsoft 文章“ USB 串行驱动程序 (Usbser.sys) ”指出:
如果要自动加载 Usbser.sys,请在设备描述符中将 class 代码设置为 02,并将子类代码设置为 02。
如果我使用代码为 02 class 代码 (CDC) 和子类代码为 02 (ACM) 的 CDC 示例对 STM32 MCU 进行编程,则会加载 usbser.sys。 这个临时搭建的 USB-UART 桥被检测为“端口(COM 和 LPT)/COM5”。 如果我使用一些 USB-UART 桥接 IC(如 FT232),通常它是 class 是“供应商特定的”,他们需要供应商驱动程序。 如果供应商驱动程序已安装此设备,也会被检测为“端口(COM 和 LPT)/COMx”
赛普拉斯 USB-UART 桥 CY7C65213 在描述符中有 02/02 类/子类。 但是如果没有 Cypress 驱动程序,该 IC 将检测为“其他设备/虚拟串行端口设备 00”。
实际上,我可以安装 Cypress 驱动程序,此 IC 将被检测为 COMx,并且我的软件可以正常工作。
但我想了解为什么 usbser.sys 驱动程序没有加载此设备? Windows 怎么理解有些 USB CDC-ACM 设备需要 usbser.sys 而其他不需要这个驱动? 描述符或其他地方的区别是什么? 我应该使用什么仪器来发现差异并将一个设备与其他设备区分开来?
问题:为什么 usbser.sys 不与 USB CDC-ACM 设备一起使用?
答案: usbser.sys
适用于 USB CDC-ACM 设备,但您的设备不是 USB CDC-ACM 设备。
问题:但我想了解为什么 usbser.sys 驱动程序没有加载此设备?
答:见上
问题:我应该使用什么仪器来发现差异并将一个设备与其他设备区分开来?
答:使用任何可以读取 USB 设备描述符和配置描述符的工具或软件。
问题: Windows 怎么理解一些 USB CDC-ACM 设备需要 usbser.sys 而另一个不需要这个驱动?
答:它读取设备描述符和配置描述符。 如果它包含 USB CDC-ACM 兼容设备,它将加载usbser.sys
。 相关的 USB 规范中描述了 USB CDC-ACM 的要求。 简而言之,它需要两个按特定顺序排列的 USB 接口,由接口关联描述符链接并具有正确的 class 代码/子类代码(在接口关联描述符中)。
问题:描述符或其他地方的区别是什么?
回答:是的,区别在于描述符(设备和配置)。
注意:在 Windows 8 及更早版本上, usbser.sys
不会按照 USB 标准的要求自动加载。 需要手动安装(可能与 INF 文件结合使用)。
如果您在文本编辑器中打开C:\Windows\inf\usbser.inf
,您可以看到它匹配的设备类型:
[Standard.NTamd64]
%UsbSerial.DeviceDesc% = UsbSerial_Install, USB\Class_02&SubClass_02&Prot_01
%UsbSerial.DeviceDesc% = UsbSerial_Install, USB\Class_02&SubClass_02
这部分告诉我们它只匹配兼容 ID 等于“USB\Class_02&SubClass_02&Prot_01”或“USB\Class_02&SubClass_02&Prot_01”的设备。 我猜您的 Cypress 设备要么没有那些兼容的 ID,要么有一些其他驱动程序使用更具体的 ID 与该设备匹配。
您可以通过在设备管理器中双击设备并转到“详细信息”选项卡来查看设备的兼容 ID。 它还有助于通过连接查看设备,这样您就可以知道您是在单击实际的 USB 设备还是只是其中一个子设备。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.