选择USB接口?

Choosing USB interface?

为了全面披露,我是一名电气工程师,软件不是我的强项。我想自己构建一个 CAN 分析器。硬件相当简单,一个连接到微控制器的 CAN 收发器。我苦苦挣扎的地方是如何将其连接到计算机。

我的下意识反应是使用 FTDI 芯片将串口转换为 USB。这在计算机端编程相当容易,数据可以以流方式异步到达。此外,FTDI 具有 USB 设备的驱动程序。问题是串行连接无法维持 CAN 速度和流式传输数据。充其量我必须在微型计算机上缓冲数据,然后将其发送到计算机。

我的第二个想法是我可以在微控制器上设置一个 USB 堆栈。这将消除串行 link 的物理瓶颈。从理论上讲,这可以完成上述所有操作。我犹豫不决的地方是不知道这种 link 的实际限制。 USB 2.0 应该能够毫无问题地维持 CAN 速度,但我使用过的所有串行终端最高只能达到 115200。这是一个实际限制,还是如果我直接与驱动程序对话,速度是否可以提高?

是否有 USB link 与虚拟通信端口一样易于使用,但可以在本机支持 CAN 速度?

如果您在微控制器上实现虚拟 COM,则可以超过 115200 baud/bps 速率

CAN 的最大比特率为 1Mbps (https://www.orionbms.com/manuals/utility/acc_canbus_baud.html)

标准UART波特率的单位是bps(比特每秒)同时baud因为假设1个符号1位 ( https://electronics.stackexchange.com/questions/9264/what-standard-uart-rates-are-there , https://learn.sparkfun.com/tutorials/serial-communication/rules-of-serial )

FTDI USB 转 UART 芯片的最大波特率为 3MBaud ( 3Mbps ) ( http://www.ftdichip.com/Support/Knowledgebase/index.html?whatbaudratesarechievabl.htm ),因此 FTDI 芯片有可能超过 115200 以及 CAN 的 1Mbps

当使用在微控制器的 USB 接口(CDC-ACM 设备 class 上实现虚拟 COM 的 USB 堆栈时,波特率可以提高到更高 cf Virtual COM port or using raw endpoints?

LUFA stack ( http://www.fourwalledcubicle.com/LUFA.php ) 有一个虚拟 COM 端口的实现 ( CDC-ACM (Virtual Serial) Class Driver ) 用于 Atmel MCU

通常 UART/串口(包括 FTDI 芯片)上的数据速率太高可能会因为传输错误而出现问题...

时钟速率与串口传输速率的关系参见http://www.wormwood.net/avrbaudcalc.php