なぜUSBコントローラーを内蔵したAVRではなくFTDIなのですか?


8

Visual C#でFT232RLチップを介してAVRと通信する簡単なプログラムを作成しました。

PC <-> FTDI <-> MCU。

USBデバイスへの直接アクセスにFTD2XX_NET.dllを使用しています。

FTDI-AVRのペアとUSBコントローラーを内蔵した単一のAVRの違いは何ですか?通信速度には多少の違いがあると思います。他に何が違うのですか?


2
FTDIを使用すると、AVRのプログラマーはUSBスタックを実装する必要はなく、UARTサポートのみを実装する必要があります。他にも多くの違いがあると思いますが、確かではありません。そのため、私は答えずにコメントするだけです
Funkyguy

1
また、FTDIには、ほとんどのプラットフォーム用の署名済みドライバーとハードコードされた有効なVID&PIDが付属しているため、1つだけ必要な場合は65536アドレスに支払う必要はありません。
ベニー2014

コメントありがとうございます。パフォーマンスに関する他の違いは?PCとMCUの通信にはどちらの方法が適していますか?正直なところ、FTDIは組み込みのUSBコントローラよりもはるかに簡単です。
MrBit、2014

FTDI方式のPCソフトウェアでは、非常に低い困難な機能があります。そして、私はそれだけの価値がある単一のAVRを使った取り組み
MrBit

1
FTDIは単純なシリアルです。MCUは前処理、サイドチャネルのアクティブ化、UMSのサポートなどが可能
Ignacio Vazquez-Abrams 14

回答:


11

かなりの理由がありますが、少なくともほとんどの人にとって、かなりニッチです。

私が見て経験した理由

  • USB対応AVRの選択は、特にTINYファミリではかなり制限されています。何らかの理由で、USBと他の周辺機器の組み合わせがないAVRが必要な場合、これは簡単なオプションです。頭に浮かぶ一例は、PLL対応AVRです。
  • USB周辺機器はハードウェアに実装されていますが、ファームウェアにUSBスタックを配置する必要があります。これはかなりのリソースを消費します(たとえば、LUFAは完全なCDC実装のために少なくとも6kBのフラッシュと1.5kBのRAMを必要とし、これは最も軽量なライブラリの1つです)
  • USB割り込みとUSBバスイベントは、タイミングが重要なファームウェアを混乱させる可能性のあるリソースを消費します。たとえば、USBタスクが中断すると、高速ADCの測定が非常に悪くなることがあります。
  • すべてのUSBライブラリの実装が、すべてのUSB対応AVRと同様に機能するわけではありません。たとえば、LUFAを使用するUSB​​ブートローダーはXMEGAデバイスでは機能しません。
  • FTDIはWindows Updateを使用して自動的にインストールされる署名付きドライバーを使用しますが、ASFやLUFAなどの多くのUSBライブラリは使用しません。これにより、エンドユーザーへの展開がより面倒になります。
  • たとえば、FT2232Hは8MiB / sでFIFOをUSBにブリッジすることができますが、これはAVRでは不可能です。
  • 多くのプロジェクトでは、ハードウェアとソフトウェアを完全に制御できません。たとえば、3Dプリンターには、完全に別個のハードウェアプロジェクトとファームウェアプロジェクトがあります。相互運用性のレベルをできるだけ高く保つために、USBとマイクロコントローラーの機能は分離されています。

ただし、すぐに使用できるUSBライブラリ、FTDI USBブリッジのコストが非常に高く(通常は非常にハイエンドのAVRよりもコストがかかる)、ほとんどのアプリケーションでパフォーマンスが低下しないため、最近のFTDIチップの正当化は非常に困難です。ハードウェアとファームウェアを完全に制御できます。


2
USBインターフェースが組み込まれているマイクロコントローラー上にプロジェクトがあり、それを使用する計画である場合でも、USBを取得しようとすると、そこから役立つデバッグ出力を簡単に取得できるため、UARTピンにアクセスするためのヘッダーを用意する価値があります。機能するコード。
Chris Stratton、

4
@ChrisStrattonのコメントは、別の問題を指摘しています。USBデバイスは、単純なUARTシリアルよりも桁違いにデバッグが困難です。したがって、開発をスピードアップし、未知のものを取り除いて、USBの最後をデバッグ済みの動作しているFDTIチップに任せます。明らかに、経済性は量によって変化しますが、時間のかかる少量生産の場合、FDTIソリューションの方が通常は優れています。
2014

うわー、tl;dr確かにあなたの段落は驚きの終わりでした... ファームウェアのみのUSB /シリアルスタック(ごく有効なポイントはあるものの)をゴミ箱に出し、次にBAM ...「ばかだけがFTDIを使用する」と言いました。陽気な、こっけいな。すき!
アレックスグレー2016

@alexgray:うわー、あなたは本当に極端な話をしています。私は何もごまかしをしているとは思わない。これらは、製品設計における人々の典型的な目的です。これらのポイントのほぼすべての組み合わせを中心に最適化されたプロジェクトを扱ってきました。趣味のプロジェクトの場合、「FTDI RS-232ブリッジを使用するかしないか」を解決するためのトランプ対サンダースのアプローチがあるかもしれませんが、実際のエンジニアリングでは、すべての長所と短所を客観的に考慮して、最適な結論。
user36129 2016年

4

別の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と呼ばれています。


AVR UART転送速度に関しては、はい、それは本当に遅いです...それで、(これを修正するために)AVRとFTDIチップ間の通信を行うためにどの異なる方法が存在しますか?今、私はuartモードで230,4kbpsにいます
MrBit

@ user3829694-どういう意味かわかりません。230,4kbpsよりも速く進む方法を尋ねているのですか?それとも230,4kbpsで大丈夫だと言っていますか?
gbulmer 14

もっとスピードを出したいなら、他に何ができますか?FT245 FIFOだと思いますが、1Mbpsまで可能です。AVR(センサーなど)からPCフォームにデータを収集するためだけに、「リアルタイムモニタリング」を使用してHIDプロジェクトを作成しようとしています。ただし、UARTでは、最高速度(230,4kbps)でもバッファ全体(256byte)の転送速度は約9msかかります:230,4kbit = 28,8kByte = 1 / 28,8 = 34,722us per byte * 256byte = 8.88ms / 256バイトは、今回はリアルタイム監視には適していないと思いました
MrBit '22

10-100msごとにフォームを更新したい場合(10-100msごとにデータを送受信する場合)、AVRが他のタスクを処理する時間はありません。
MrBit、2014

@ user3829694-わかりました。それで、オーバーヘッドがほとんどなく、データを高速で移動したいとします。
gbulmer 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.