为什么要使用内置USB控制器的FTDI而不是AVR?


8

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

PC <-> FTDI <-> MCU。

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

我想知道,一对FTDI-AVR和一个带有内置USB控制器的AVR有什么区别?我认为通讯速度必须有所不同。还有什么不同?


2
使用FTDI,AVR的编程人员不必实现USB堆栈,而只需实现UART支持。还有很多其他方面的差异,我不知道,我敢肯定,这就是为什么我不回答而只是评论
Funkyguy

1
FTDI还带有适用于大多数平台的签名驱动程序和有效的硬编码VID&PID,因此您只需要一个地址就不必为65536个地址付费。
venny 2014年

感谢您的评论。关于性能的其他区别?哪种方式更适合PC和MCU通信?老实说,内置USB控制器使FTDI更加容易。
MrBit

在采用FTDI方式的PC软件中,困难功能非常低。我不知道用单个AVR付出的努力是否值得
MrBit14,2014年

1
FTDI是愚蠢的序列。甲MCU可以进行预处理,活化的侧通道,支持UMS等
伊格纳西奥巴斯克斯-拉姆斯

Answers:


11

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

我看到和经历过的原因

  • 支持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 Update自动安装,而许多USB库(例如ASF和LUFA)则没有。这使得向最终用户的部署更加麻烦。
  • 某些实现的性能较低,例如FT2232H能够以8MiB / s的速度将FIFO桥接到USB,这是AVR不可能做到的。
  • 许多项目无法完全控制硬件和软件,例如3D打印机具有完全独立的硬件项目和固件项目。为了保持尽可能高的互操作性,USB和微控制器功能是分开的。

但是,使用现成的USB库,FTDI USB桥接器的巨额成本(它们通常甚至比非常高端的AVR还要贵),并且在大多数应用中不会降低性能,因此,如今,如果您需要证明FTDI芯片的合理性就很难完全控制硬件和固件。


2
即使项目在具有内置USB接口的微控制器上并且计划使用该接口,也仍然值得拥有一个用于访问UART引脚的标头,因为在尝试获取USB时您可以从中获得有用的调试输出代码工作。
克里斯·斯特拉顿

4
@ChrisStratton的评论指出了另一个问题:USB设备比简单的UART序列更难调试一个数量级。因此,它可以加快开发速度并消除未知因素,从而将USB端留在经过调试且可以正常工作的FDTI芯片上。显然,经济随着数量的变化而变化,但是对于时间压力小的小批量生产,FDTI解决方案通常更好。
2014年

哇,您的tl;dr段落肯定是一个意外的结局...您只说说了固件的USB /串行堆栈(尽管有非常有效的分数),然后是BAM ...“只有白痴才会使用FTDI”。搞笑 喜欢它!
亚历克斯·格雷

@alexgray:哇,你真的在​​极端说话。我不认为我在说垃圾话。这些只是人们在产品设计中具有的典型目标。我已经处理了围绕这些点的几乎所有组合进行优化的项目。对于爱好项目,可能会采用特朗普与桑德斯的方法来解决“我还是不采用FTDI RS-232桥接器?”,但是在实际工程中,您实际上应该客观地考虑所有优点和缺点,并得出结论。最佳结论。
user36129 '16

4

使用单独的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上进行工作才能使其正常工作。

最高速度的传输可能是通过100mbits以太网子板进行的,但是我还没有看到吞吐量的度量。

我很高兴使用AVR以外的其他微控制器。因此,我可能会使用带有快速UART和DMA控制器的设备,这些设备可以在不占用CPU的情况下移动字符。如果这是有用的方法,则可以查看Arduin Due或mbed,ST mbed称为nucelo,这是低成本的。


关于AVR UART的传输速率,是的,它确实很慢...因此,(要解决这个问题),存在哪种不同的方式在AVR和FTDI芯片之间进行通信?现在我以uart模式进入230,4kbps的速度
MrBit 2014年

@ user3829694-我不确定您的意思。AE,您问如何比230,4kbps更快?还是您说230,4kbps对您来说还可以?
gbulmer

我在问,如果我想提高速度,我还能做什么?我认为FT245 FIFO可以达到1Mbps。我正在尝试使用“实时监控”进行HID项目,只是为了从AVR(带有传感器等)收集数据到PC形式。但是即使使用UART,即使以最大速度(230,4kbps)传输,整个缓冲区(256byte)的传输速率也需要大约9ms:230,4kbit = 28,8kByte = 1 / 28,8 =每字节34,722us * 256byte = 8.88ms / 256字节我想这次它不适合实时监控好
MrBit

如果我想每10到100毫秒刷新一次表单(每10到100毫秒发送接收数据),则AVR没有剩余时间来处理其他任务。
MrBit

@ user3829694-好的,所以您希望快速移动数据,而开销很小。
gbulmer,2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.