embedded - 通过 USB 模拟 UART

标签 embedded usb emulation uart

有人知道是否可以通过 USB 模拟 UART(简单串行发送和接收)?这将如何实现?

我在 Microchip 网站上找到了这个链接,但不是很及时。

http://www.microchip.com/forums/m522571-print.aspx

有任何想法吗?谢谢。

最佳答案

您需要将设备堆栈实现为 CDC ACM 设备(也称为虚拟 COM 端口或 VCP)。大多数支持 USB 的微 Controller 供应商都有示例代码或应用说明。

鉴于此,就 Windows 而言,您的设备看起来就像一个 COM 端口。在设备端,您将获得传输的原始数据 block 。可以为 UART 和 USB 接口(interface)实现适当的抽象层,以便在必要时提供相同的接口(interface)。

一个问题是 USB 设备需要一个由 USB 实现者论坛分配的供应商 ID,地址为 $5000 fee。 (2016 年 7 月 23 日更正)。如果您要在野外发布您的设备,如果您的设备要被识别并与其他设备正常运行,您真的需要一个。一些微 Controller 供应商将允许您免费或以较少的费用将其供应商 ID 用于产品 ID 的子集,但如果您从他们那里购买大量设备,他们可能只会这样做。

另一个问题是,在 OSX 或 Linux 上,无需任何额外驱动程序即可识别 CDC/ACM,而 Windows 则更为繁琐,需要一个 INF 文件才能将特定的 USB 供应商和产品 ID 与 usbser.sys 驱动程序相关联。然后,您将进入驱动程序签名的整个世界,这对于使用 Windows Vista 64 或任何版本的 Windows 7 是必不可少的。代码签名签名也会让您花钱。如果您的供应商提供了示例 VCP 代码,他们也可能会提供签名的驱动程序。 STMicroelectronios 的 STM32 VCP 示例甚至通过了 WHQL 认证,因此可以通过 Windows 更新自动获取。

所以结果是,如果您的供应商已经提供了代码和签名的驱动程序(或者您没有使用 Windows),那么您可以进行实验,但是要部署产品,您将需要供应商 ID 和代码签名证书。老实说,这有点像雷区。

一种更简单的方法是使用 FTDI USB<->串行芯片。这对于没有自己的 USB Controller 的微 Controller 特别有用,但数据传输速率将受到微型和/或 FTDI 的 UART 接口(interface)而不是 USB 速度的限制。 FTDI 芯片可以使用 FTDI 的 VID/PID 原样使用,或者您可以使用自己的 VID/PID 对其进行自定义。自定义使您重新需要获取 VID 和签名证书,但允许您的设备被唯一标识,而不是作为通用串行端口。

关于embedded - 通过 USB 模拟 UART,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12678698/

相关文章:

linux - 在将 u-boot.bin 文件闪存到板上之前,是否有任何可靠的方法来验证它?

来自不同 C 字符串数组的堆栈上的 C 字符串大小

c++ - 有没有一种在 C++ 中创建 "split object"的好方法?

android - 在模拟器上测试 Google map - CameraUpdateFactory 未初始化

visual-studio-2015 - 无法在 Visual Studio 中选择 HoloLens 模拟器作为调试目标

simulation - JCardSim 包错误?

embedded - 如何处理引导加载程序中的中断?

linux -/dev/bus/usb/xxx/yyy 中的代码背后的含义是什么?

delphi - 如何从 Delphi 或 VB6 访问 USB(笔式驱动器)固件号?

audio - 如何使用 Raspbian Stretch 在 Raspberry Pi 3B 上设置默认麦克风?