Warum FTDI und nicht AVR mit integriertem USB-Controller?

8

Ich habe in Visual C # ein einfaches Programm erstellt, das über den FT232RL-Chip mit AVR kommuniziert.

PC <-> FTDI <-> MCU.

Ich verwende FTD2XX_NET.dll für den direkten Zugriff auf das USB-Gerät.

Ich frage mich, was ist der Unterschied zwischen einem Paar FTDI-AVR und einem einzelnen AVR mit integriertem USB-Controller? Ich denke, es muss einen Unterschied in der Kommunikationsgeschwindigkeit geben. Was ist noch anders?

MrBit
quelle
2
Mit dem FTDI muss der Programmierer für den AVR keinen USB-Stack implementieren, sondern nur UART-Unterstützung. Es gibt viele andere Unterschiede, von denen ich nicht weiß, ob ich sicher bin. Deshalb antworte ich nicht, sondern kommentiere nur
Funkyguy
1
FTDIs werden auch mit signierten Treibern für die meisten Plattformen und gültigen fest codierten VIDs und PIDs geliefert, sodass Sie nicht für 65536 Adressen bezahlen müssen, wenn Sie nur eine benötigen.
Jenny
Danke für die Kommentare. Anderer Leistungsunterschied? Welcher Weg ist besser für die PC- und MCU-Kommunikation? Um ehrlich zu sein, ist FTDI mit eingebauten USB-Controllern VIEL einfacher.
MrBit
In PC-Software mit FTDI-Methode gibt es nur sehr wenige schwierige Funktionen. Und ich weiß nicht, ob sich eine Anstrengung mit einem einzelnen AVR lohnt
MrBit
1
FTDI ist eine dumme Serie. Eine MCU kann vorverarbeiten, Seitenkanäle aktivieren, UMS unterstützen usw.
Ignacio Vazquez-Abrams

Antworten:

11

Es gibt einige Gründe, aber sie sind, zumindest für die meisten Menschen, ziemlich nisch.

Die Gründe, die ich sehe und erlebt habe

  • Die Auswahl an USB-fähigen AVRs ist sehr begrenzt, insbesondere bei der TINY-Familie. Wenn aus irgendeinem Grund ein AVR erforderlich ist, der keine Kombination aus USB und einem anderen Peripheriegerät enthält, ist dies eine einfache Option. Ein Beispiel, das mir in den Sinn kommt, sind PLL-fähige AVRs.
  • Obwohl das USB-Peripheriegerät in Hardware implementiert ist, müssen Sie dennoch einen USB-Stack in die Firmware einfügen. Dies nimmt eine Menge Ressourcen in Anspruch (z. B. benötigt LUFA mindestens 6 KB Flash und 1,5 KB RAM für eine vollständige CDC-Implementierung, und dies ist eine der leichtesten Bibliotheken).
  • USB-Interrupts und USB-Bus-Ereignisse beanspruchen Ressourcen, die die zeitkritische Firmware beeinträchtigen können. Zum Beispiel: Hochgeschwindigkeits-ADC-Messungen können sehr stark durcheinander geraten, wenn eine USB-Aufgabe unterbrochen wird.
  • Nicht alle USB-Bibliotheksimplementierungen funktionieren auch mit allen USB-fähigen AVRs. Beispiel: USB-Bootloader mit LUFA funktionieren nicht mit XMEGA-Geräten.
  • FTDI verwendet signierte Treiber, die automatisch mit Windows Update installiert werden, während dies bei vielen USB-Bibliotheken, z. B. ASF und LUFA, nicht der Fall ist. Dies macht die Bereitstellung für Endbenutzer umständlicher.
  • Einige Implementierungen weisen eine geringere Leistung auf, z. B. kann FT2232H einen FIFO mit 8 MB / s an USB überbrücken, was mit einem AVR nicht möglich ist.
  • Viele Projekte haben keine vollständige Kontrolle über Hardware und Software, z. B. haben 3D-Drucker vollständig getrennte Hardware- und Firmware-Projekte. Um die Interoperabilität so hoch wie möglich zu halten, sind USB- und Mikrocontroller-Funktionen getrennt.

Mit gebrauchsfertigen USB-Bibliotheken, den erheblichen Kosten für FTDI-USB-Bridges (sie kosten normalerweise mehr als sogar sehr hochwertige AVRs) und keinen Leistungseinbußen in den meisten Anwendungen ist es heutzutage sehr schwierig, FTDI-Chips zu rechtfertigen, wenn Sie dies tun Sie haben die volle Kontrolle über Hardware und Firmware.

user36129
quelle
2
Selbst wenn sich ein Projekt auf einem Mikrocontroller befindet, der eine USB-Schnittstelle eingebaut hat und diese verwenden soll, lohnt es sich dennoch, einen Header für den Zugriff auf die UART-Pins zu haben, da Sie beim Versuch, den USB zu erhalten, trivial nützliche Debug-Ausgaben erhalten können Code zu arbeiten.
Chris Stratton
4
@ ChrisStrattons Kommentar weist auf ein weiteres Problem hin: USB-Geräte sind um eine Größenordnung schwerer zu debuggen als einfache UART-Serien. So wird die Entwicklung beschleunigt und Unbekanntes entfernt, um das USB-Ende dem debuggten, funktionierenden FDTI-Chip zu überlassen. Natürlich ändert sich die Wirtschaftlichkeit mit der Menge, aber für kleine Produktionen mit Zeitdruck ist die FDTI-Lösung normalerweise besser.
Markrages
Wow, Ihr tl;drAbsatz war sicher ein überraschendes Ende ... Sie haben nur über USB / serielle Stacks mit Firmware gesprochen (wenn auch mit äußerst gültigen Punkten), und dann BAM ... "nur ein Idiot würde FTDI verwenden". Urkomisch. Liebt es!
Alex Grey
@alexgray: Wow, du redest da wirklich extrem. Ich glaube nicht, dass ich irgendetwas über Müll geredet habe. Dies sind nur die typischen Ziele, die Menschen im Produktdesign haben. Ich habe mich mit Projekten befasst, die so ziemlich alle Kombinationen dieser Punkte optimiert haben. Für Hobbyprojekte gibt es möglicherweise einen Trump vs. Sanders-Ansatz zur Lösung von "Muss ich oder nehme ich keine FTDI RS-232-Brücke?", Aber in der realen Technik sollten Sie wirklich nur objektiv alle Vor- und Nachteile berücksichtigen und zu einem kommen optimaler Abschluss.
user36129
4

Die Verwendung eines separaten USB-Chips und die Kommunikation des AVR über seinen UART bieten Vorteile.

Ein USB-Stack muss auf Abfragen vom Host-PC reagieren. Dies geschieht mindestens jede Millisekunde. Dies bedeutet, dass es noch schwieriger ist, eine schnelle Echtzeitreaktion auf Ereignisse zu gewährleisten, da die MCU möglicherweise unterbrochen wird, um auf die USB-Abfrage des Hosts zu antworten.

Wenn nichts zu kommunizieren ist oder die MCU sich voll und ganz auf eine Echtzeitaufgabe konzentrieren möchte, muss sie dennoch auf einige USB-Abfrageereignisse des Hosts reagieren, da der Host sonst das Gerät "verliert". Es ist also schwer zu ignorieren. Ein dedizierter USB-Chip wie ein FTDI entlädt diese Aufgaben vom AVR.

Ein kleines Problem ist, dass der USB-Stack eine angemessene Menge an Flash-Speicher und RAM verbraucht, sodass der Chip mehr Ressourcen benötigt als ein einfacher AVR.

Außerdem können die beiden Teile auf zwei Karten getrennt werden, sodass USB keine festen Kosten verursacht, sondern möglicherweise von mehreren Karten gemeinsam genutzt wird.

Umgekehrt besteht der Hauptvorteil der Verwendung eines AVR mit integriertem USB-Peripheriegerät und USB-Stack darin, dass nur ein Teil gekauft und zusammengebaut werden muss.

Ich habe kürzlich nicht überprüft, aber ich glaube, dass die neueren FTDI-Chips eine höhere USB-Datenübertragungsrate als der USB des AVR bieten. AVR-UARTs waren jedoch so langsam, dass ein AVR mit USB aufgrund des langsamen AVR-UART schneller überträgt als die Kombination von FTDI (oder einer beliebigen USB-Schnittstelle), die über den UART des AVR kommuniziert.

Bearbeiten: FTDI stellt andere Schnittstellen als UART her. Zum Beispiel SPI. Ich habe keine Erfahrung damit. Einige AVRs unterstützen 9 (vielleicht 12) Megabit-SPI-Übertragungen. Der FTDI ist der SPI-Master, was nicht ideal ist. Wenn der AVR sendet, ist dies möglicherweise in Ordnung. Die FTDIs verfügen zwar über Puffer, der Empfang kann jedoch wie das Trinken aus einem Feuerwehrschlauch erfolgen. AFAIK, Sie müssen am Host-PC arbeiten, damit er funktioniert.

Die Übertragung mit der höchsten Geschwindigkeit erfolgt möglicherweise über eine 100-MBit-Ethernet-Tochterplatine, ich habe jedoch keine Durchsatzmessungen gesehen.

Ich verwende gerne andere Mikrocontroller als AVR. Ich könnte also etwas mit einem schnellen UART und einem DMA-Controller verwenden, der Zeichen ohne CPU-Beteiligung verschieben könnte. Wenn dies ein nützlicher Ansatz ist, schauen Sie sich vielleicht das Arduin Due oder das mbed an. Das ST mbed heißt Nucelo und ist kostengünstig.

gbulmer
quelle
Was die AVR UART-Übertragungsrate betrifft, ja, sie ist wirklich langsam ... also (um dies zu beheben) gibt es verschiedene Möglichkeiten, die Kommunikation zwischen AVR- und FTDI-Chips durchzuführen? Jetzt bin ich in 230,4kbps im Uart-Modus
MrBit
@ user3829694 - Ich bin mir nicht sicher, was du meinst. Fragen Sie, wie Sie schneller als 230,4 kbit / s fahren können? Oder sagen Sie, dass 230,4 kbps für Sie in Ordnung sind?
Gbulmer
Ich frage, wenn ich mehr Geschwindigkeit will, was kann ich sonst noch tun? Ich denke, FT245 FIFO kann bis zu 1 Mbit / s erreichen. Ich versuche, HID-Projekte mit "Echtzeitüberwachung" zu erstellen, nur um Daten von avr (mit Sensoren usw.) in PC-Form zu sammeln. Aber mit UART dauert die Übertragungsrate des gesamten Puffers (256 Byte) selbst bei maximaler Geschwindigkeit (230,4 kbit / s) etwa 9 ms: 230,4 kbit = 28,8 kByte = 1 / 28,8 = 34.722 us pro Byte * 256 Byte = 8,88 ms / 256 Byte Ich dachte, diesmal ist es nicht gut für die Echtzeitüberwachung
MrBit
Wenn ich mein Formular alle 10-100 ms aktualisieren möchte (Senden / Empfangen von Daten alle 10-100 ms), bleibt AVR keine Zeit mehr, um andere Aufgaben zu verarbeiten.
MrBit
@ user3829694 - Okay, Sie möchten die Daten schnell und mit geringem Aufwand verschieben.
Gbulmer