繁体   English   中英

为什么 usbser.sys 不与 USB CDC-ACM 设备一起使用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM