为什么是 FTDI 而不是带有内置 USB 控制器的 AVR?

电器工程 USB ftdi
2022-01-23 07:33:54

我用 Visual C# 编写了一个简单的程序,它通过 FT232RL 芯片与 AVR 通信。

PC <-> FTDI <-> MCU。

我正在使用 FTD2XX_NET.dll 直接访问 USB 设备。

我想知道,一对 FTDI-AVR 和带有内置 USB 控制器的单个 AVR 有什么区别?我认为通信速度肯定有一些差异。还有什么不同?

2个回答

有很多原因,但至少对大多数人来说,它们是相当小众的。

我看到和经历过的原因

  • 支持 USB 的 AVR 的选择非常有限,尤其是 TINY 系列。如果由于某种原因需要一个没有 USB 和其他外围设备组合的 AVR,这是一个简单的选择。一个浮现在脑海中的例子是启用 PLL 的 AVR。
  • 即使 USB 外围设备是在硬件中实现的,您仍然需要在固件中放置一个 USB 堆栈。这会占用大量资源(例如,LUFA 需要至少 6kB 闪存和 1.5kB RAM 才能实现完整的 CDC,这是最轻量级的库之一)
  • USB 中断和 USB 总线事件占用的资源可能会干扰时序关键固件。例如:当 USB 任务中断时,高速 ADC 测量可能会变得非常糟糕。
  • 并非所有 USB 库实现都适用于所有支持 USB 的 AVR。例如:使用 LUFA 的 USB 引导加载程序不适用于 XMEGA 设备。
  • FTDI 使用通过 Windows 更新自动安装的签名驱动程序,而许多 USB 库,例如 ASF 和 LUFA,则不这样做。这使得部署到最终用户更加麻烦。
  • 一些实现的性能较低,例如 FT2232H 能够以 8MiB/s 的速度将 FIFO 桥接到 USB,而这对于 AVR 是不可能的。
  • 许多项目无法完全控制硬件和软件,例如 3D 打印机具有完全独立的硬件项目和固件项目。为了保持尽可能高的互操作性,USB 和微控制器功能是分开的。

然而,使用现成的 USB 库,FTDI USB 桥接器的高昂成本(它们通常比非常高端的 AVR 成本更高)并且在大多数应用中没有性能损失,如果您现在很难证明 FTDI 芯片的合理性完全控制硬件和固件。

使用单独的 USB 芯片并让 AVR 通过其 UART 进行通信具有优势。

USB 堆栈必须响应来自主机 PC 的轮询。至少每毫秒发生一次。这意味着要保证对事件的硬实时响应更加困难,因为 MCU 可能会被中断以响应主机 USB 轮询。

当没有什么可通信的,或者 MCU 想要完全专注于实时任务时,它仍然必须响应一些主机 USB 轮询事件,否则主机将“丢失”设备。所以很难忽视。专用的 USB 芯片,如 FTDI,可以从 AVR 中卸载这些任务。

一个小问题是 USB 堆栈将消耗合理数量的闪存和 RAM,因此芯片需要比简单的 AVR 更多的资源。

此外,这两个部分可以分离到两个板上,因此 USB 不是固定成本,但可以在多个板上共享。

另一方面,使用带有内置 USB 外设和 USB 堆栈的 AVR 的主要好处是只需购买和组装一个部件。

我最近没有检查过,但我相信较新的 FTDI 芯片提供的 USB 数据传输速率比 AVR 的 USB 更高。但是,AVR UART 速度太慢,由于 AVR UART 速度较慢,因此带有 USB 的 AVR 比通过 AVR 的 UART 通信的 FTDI(或任何 USB 接口)的组合传输速度更快。

编辑:FTDI 确实制作了除 UART 之外的其他接口。例如 SPI。我没有使用它们的经验。一些 AVR 确实支持 9(也许 12)兆位 SPI 传输。FTDI 是 SPI 主机,这并不理想。如果 AVR 正在传输,那可能没问题。因为 FTDI 确实有缓冲区,但接收可能“就像从消防水管里喝水一样”。AFAIK,您必须在主机 PC 上工作才能使其正常工作。

最高速度的传输可能是通过 100 兆位以太网子板,但我还没有看到吞吐量的测量结果。

我很乐意使用 AVR 以外的其他微控制器。所以我可能会使用带有快速 UART 和 DMA 控制器的东西,它可以在没有 CPU 参与的情况下移动字符。如果这是一个有用的方法,也许看看 Arduin Due 或 mbed,ST mbed 被称为 nucelo,它是低成本的。