我用 Visual C# 编写了一个简单的程序,它通过 FT232RL 芯片与 AVR 通信。
PC <-> FTDI <-> MCU。
我正在使用 FTD2XX_NET.dll 直接访问 USB 设备。
我想知道,一对 FTDI-AVR 和带有内置 USB 控制器的单个 AVR 有什么区别?我认为通信速度肯定有一些差异。还有什么不同?
我用 Visual C# 编写了一个简单的程序,它通过 FT232RL 芯片与 AVR 通信。
PC <-> FTDI <-> MCU。
我正在使用 FTD2XX_NET.dll 直接访问 USB 设备。
我想知道,一对 FTDI-AVR 和带有内置 USB 控制器的单个 AVR 有什么区别?我认为通信速度肯定有一些差异。还有什么不同?
有很多原因,但至少对大多数人来说,它们是相当小众的。
我看到和经历过的原因
然而,使用现成的 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,它是低成本的。