为什么 USB CDC 设备需要 windows 中的主机驱动程序?

Why does an USB CDC device require a host driver in windows?

如果 CDC 设备被检测为虚拟 COM 端口,开发完整的 UMDF windows 驱动程序的额外优势是什么?

我有一些使用微控制器的嵌入式示例的经验,既可以与 teraterm 等终端通信,也可以使用允许 cdc 或 hid 功能的专用 USB 外围设备。

这些驱动程序是您在使用任何 USB 设备之前下载并安装的驱动程序吗?目前尚不清楚通过主机驱动程序可以使用哪些功能。

通常在 Windows 上,USB 串行设备的 "driver" 只不过是一个将设备 VID/PID 映射到 Microsoft usbser.sys [=30] 的 inf 文件=] driver.

最近发布的 Windows 10 似乎不再坚持每个 CDC/ACM 都有一个 VID/PID 特定的 inf 文件,并且将为任何设备加载标准 driver显示为 CDC/ACM 设备。

具有 VID/PID 特定 inf 文件的优势在于您的设备可以具有特定于供应商的 "friendly name",它可以在应用程序中使用以更轻松地识别您的设备,而不仅仅是显示为通用 "USB Serial Device".

直到最近,Microsoft usbser.sys driver(Linux 和 Mac OS 没有什么不同)的一个问题是,如果您断开 USB设备,即使应用程序打开了 COM 端口,driver 也会被卸载,应用程序必须关闭并重新打开端口才能在重新连接时恢复。我之前用过一个自定义的driver(由第三方提供),如果应用程序打开了端口,它不会卸载,所以当USB电缆重新连接时,数据连接继续正常,就像它一样如果它是 RS-232 电缆会怎样。然而,在 Windows 10 的最新版本中,我再次注意到 usbser.sys 似乎在任何情况下都表现出这种行为。

请注意,当您提供自己的 driver 文件,甚至只是一个自定义 inf 文件时,您将需要通过 WHQL 测试才能允许您的设备在 Windows 10,或者在没有警告的情况下加载早期版本。为此,您需要一个 USB.org 分配的 VID、一个扩展验证 code-signing 证书,以及执行测试的工具和设施,或者支付测试机构的费用来执行测试。这一切都变得有些昂贵,并且对于小批量、低价值或非商业产品来说可能会让人望而却步。

Microsoft 曾一度对 WHQL 处理提交收费过高,但现在不再收费了。然而,这并不是什么组合,因为同时他们改为需要 EV 证书,并停止了过去 low-cost 证书的交易。

WHQL 资格的优势在于您的 driver 将由 Windows 更新提供。

如果您使用的是 USB 串行桥芯片而不是您自己的 USB 堆栈和 USB 控制器,则有一个成本更低的解决方案。这些芯片可以使用您自己的 VID/PID 和描述符进行定制,并且供应商现有的 WHQL 可以与您的设备相关联,这样您就可以免费获得自己 driver 的所有优势。大多数供应商甚至会允许您使用他们的 VID,并会为您分配一个唯一的 PID,这样您就可以避免 USB.org 费用。我已经在 Prolific 和 FTDI 设备上使用了这条路线;这是迄今为止最具成本效益的解决方案。