有人知道是否可以通过USB模拟UART(简单的串行传输和接收)吗?这将如何实现?
我在Microchip网站上找到了这个链接,但不是很快就能找到。
http://www.microchip.com/forums/m522571-print.aspx
有什么想法吗?谢谢
您需要将设备堆栈实现为CDC ACM设备(也称为虚拟COM端口或VCP)。大多数支持USB的微控制器供应商都有示例代码或应用程序说明。
考虑到这一点,就Windows而言,您的设备将看起来像COM端口。在设备端,您将获得传输的原始数据块。可以为UART和USB接口实现适当的抽象层,以便在必要时提供相同的接口。
一个棘手的问题是,USB设备需要USB实施者论坛分配的供应商ID,费用为5000美元(2016年6月23日更正)。如果你要在野外发布你的设备,如果你的设备要被识别并与其他设备正确配合,你真的需要一个。一些微控制器供应商会允许您免费或以较小的费用使用他们的供应商ID作为产品ID的子集,但只有当您从他们那里购买了大量设备时,他们才会这样做。
另一个问题是,在OSX或Linux上,在没有任何额外驱动程序的情况下可以识别CDC/ACM,而Windows则更挑剔,需要一个INF文件来将特定的USB供应商和产品ID与usbser.sys驱动程序关联起来。然后你就可以进入驱动程序签名的整个世界,如果使用Windows Vista 64或任何版本的Windows 7,这是必不可少的。代码签名也会花费你的钱。如果您的供应商提供了示例VCP代码,他们可能还会提供签名的驱动程序。STMicroelectronicos的STM32 VCP示例甚至通过了WHQL认证,因此可以通过Windows Update自动获取。
因此,结果是,如果您的供应商已经提供了代码和签名驱动程序(或者您没有使用Windows),则可以进行实验,但要部署产品,您需要供应商ID和代码签名证书。老实说,这有点像雷区。
一种更简单的方法是使用FTDI USB<->串行芯片。这对于没有自己的USB控制器的微控制器特别有用,但数据传输速率将受到微处理器和/或FTDI的UART接口的限制,而不是USB速度。FTDI芯片可以使用FTDI的VID/PID按原样使用,也可以使用自己的VID/PID。定制使您重新需要获得VID和签名证书,但允许您的设备被唯一识别,而不是通用串行端口。
基本上,您有两个选项可以通过USB模拟UART:
-
使用现有产品。FTDI公司提供众所周知的固态UART-USB桥接芯片,例如FT230X。Pro:你不需要任何关于USB的详细知识。缺点:如果在大规模生产中使用,价格昂贵。额外的硬件,需要额外的电源。
-
实现USB设备类"通信设备类"(CDC)。CDC的规格可从USB.org获得,请参阅此处。Pro:批量生产时价格低廉(如果你的微控制器上有USB)。Con:你需要详细了解USB。