Visual C#でFT232RLチップを介してAVRと通信する簡単なプログラムを作成しました。
PC <-> FTDI <-> MCU。
USBデバイスへの直接アクセスにFTD2XX_NET.dllを使用しています。
FTDI-AVRのペアとUSBコントローラーを内蔵した単一のAVRの違いは何ですか?通信速度には多少の違いがあると思います。他に何が違うのですか?
Visual C#でFT232RLチップを介してAVRと通信する簡単なプログラムを作成しました。
PC <-> FTDI <-> MCU。
USBデバイスへの直接アクセスにFTD2XX_NET.dllを使用しています。
FTDI-AVRのペアとUSBコントローラーを内蔵した単一のAVRの違いは何ですか?通信速度には多少の違いがあると思います。他に何が違うのですか?
回答:
かなりの理由がありますが、少なくともほとんどの人にとって、かなりニッチです。
私が見て経験した理由
ただし、すぐに使用できるUSBライブラリ、FTDI USBブリッジのコストが非常に高く(通常は非常にハイエンドのAVRよりもコストがかかる)、ほとんどのアプリケーションでパフォーマンスが低下しないため、最近のFTDIチップの正当化は非常に困難です。ハードウェアとファームウェアを完全に制御できます。
tl;dr
確かにあなたの段落は驚きの終わりでした... ファームウェアのみのUSB /シリアルスタック(ごく有効なポイントはあるものの)をゴミ箱に出し、次にBAM ...「ばかだけがFTDIを使用する」と言いました。陽気な、こっけいな。すき!
別のUSBチップを使用し、AVRがそのUARTを介して通信できるようにすることには利点があります。
USBスタックは、ホストPCからのポーリングに応答する必要があります。これは少なくともミリ秒ごとに発生します。つまり、MCUがホストUSBポーリングに応答するために中断される可能性があるため、イベントへのハードリアルタイム応答を保証することはさらに困難です。
通信するものがない場合、またはMCUがリアルタイムタスクに完全に集中したい場合でも、一部のホストUSBポーリングイベントに応答する必要があります。そうしないと、ホストがデバイスを失います。だから無視するのは難しいです。FTDIのような専用USBチップは、これらのタスクをAVRからオフロードします。
小さな問題は、USBスタックが適度な量のフラッシュメモリとRAMを消費するため、チップは単純なAVRよりも多くのリソースを必要とすることです。
また、2つのパーツを2つのボードに分離できるため、USBは固定コストではなく、複数のボードで共有できます。
反対に、組み込みUSB周辺機器とUSBスタックでAVRを使用する主な利点は、購入して組み立てるパーツが1つしかないことです。
私は最近チェックしていませんが、新しいFTDIチップはAVRのUSBよりも高い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 Mbpsのイーサネットドーターボードを経由する可能性がありますが、スループットの測定値を見たことがありません。
AVR以外のマイクロコントローラーを使用できてうれしいです。そのため、CPUを介さずに文字を移動できる高速UARTとDMAコントローラを備えたものを使用する場合があります。それが有用なアプローチである場合は、Arduin Dueまたはmbedを見てください。STmbedは低コストのnuceloと呼ばれています。