我用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有什么区别?我认为通讯速度必须有所不同。还有什么不同?
Answers:
有很多原因,但是至少对于大多数人来说,它们是相当利基的。
我看到和经历过的原因
但是,使用现成的USB库,FTDI USB桥接器的巨额成本(它们通常甚至比非常高端的AVR还要贵),并且在大多数应用中不会降低性能,因此,如今,如果您需要证明FTDI芯片的合理性就很难完全控制硬件和固件。
tl;dr
段落肯定是一个意外的结局...您只说说了固件的USB /串行堆栈(尽管有非常有效的分数),然后是BAM ...“只有白痴才会使用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上进行工作才能使其正常工作。
最高速度的传输可能是通过100mbits以太网子板进行的,但是我还没有看到吞吐量的度量。
我很高兴使用AVR以外的其他微控制器。因此,我可能会使用带有快速UART和DMA控制器的设备,这些设备可以在不占用CPU的情况下移动字符。如果这是有用的方法,则可以查看Arduin Due或mbed,ST mbed称为nucelo,这是低成本的。