Kann das Arduino mit USB-Geräten ohne USB-Host-Shield verbunden werden?

Ich möchte verschiedene USB-Geräte an ein Arduino Uno anschließen (insbesondere ein Gamepad und eine Webcam, aber ich interessiere mich für den allgemeinen Fall ). Ist dies ohne Verwendung des USB-Host-Shields möglich, da der Uno über einen USB-Anschluss und einen USB-Seriell-Konverter verfügt? Ich könnte das Schild benutzen, aber ich bin gespannt, ob / warum es notwendig ist.

Auf der Sparkfun-Website heißt es:

Das SparkFun USB Host Shield enthält die gesamte digitale Logik und analoge Schaltung, die zur Implementierung eines USB-Peripherie- / Host-Controllers mit voller Geschwindigkeit mit Ihrem Arduino erforderlich ist.

Enthält das Arduino dies nicht bereits und benötigt nur die richtige Software (obwohl es offensichtlich einfacher ist, die bereits geschriebene Bibliothek für das Host Shield zu verwenden). Oder gibt es Hardwareeinschränkungen?

Laut Kann ein Ethernet-USB-Dongle anstelle eines Ethernet-Shields für Arduino verwendet werden? (Majenkos Antwort), kann dies theoretisch mit dem Due, aber nicht mit dem Uno erfolgen . Liegt dies in diesem Fall daran, dass der Uno den ATmega16U2 anstelle des FTDI FT232RL für die USB-Kommunikation verwendet?

Kommentare

  • Ich don ' Ich glaube nicht, dass dies unmöglich ist. USB ist eine Art serieller Bus mit bestimmten Protokollen, dh Geräte, die die Aufteilung von Geräten auf bestimmte Zeitbereiche kennzeichnen (einige ähnliche Protokolle wie ein Draht). Ich denke, die einzige Einschränkung ist die Geschwindigkeit. Daher verursacht das Synchronisieren aller USB-spezifischen Befehle und Daten Probleme.
  • @GeneralChaos Sie ' haben Recht ' ist nicht " unmöglich " – aber es ist höchst unpraktisch. Es gibt eine Software-Implementierung eines USB-Geräts (VUSB), für das ' keine spezielle Hardware erforderlich ist. Es ' ist bestenfalls zweifelhaft und funktioniert im besten Fall kaum. Es gibt keinen Grund, warum Sie ' kein Host-Äquivalent schreiben könnten – es könnte jedoch niemals mit mehr als 1,5 MHz USB 1.0 " Niedrige Geschwindigkeit ", kann also niemals mit etwas anderem als einer einfachen Tastatur oder Maus sprechen. Dinge wie Ethernet oder Webcams sind ohne Host- oder OTG-Hardware, die der Due in den Hauptchip eingebaut hat, völlig unmöglich.

Antwort

Zuerst müssen Sie die Grundlagen der Funktionsweise von USB erlernen.

Bei USB gibt es zwei wichtige“ Dinge „: Hosts und Geräte.

Sie haben Ein Host (normalerweise Ihr Computer) und viele Geräte (wie Arduinos, Drucker, Scanner, Webcams, WiFi-Dongles usw.).

Als Host müssen Sie wissen, welche Geräte an Sie angeschlossen werden und wie man mit ihnen kommuniziert. Ein Gerät zu sein bedeutet, nur auf Ihre eigene Weise mit dem Host zu kommunizieren.

Wie Sie sehen, ist es eine weitaus komplexere Aufgabe, ein Host zu sein als ein Gerät.

Arduinos sind Geräte . Die kleinen USB-Schnittstellen-Chips, die sie verwenden, sind sehr stromsparend und können nur ein Gerät sein, niemals ein Host.

Wenn Sie ein Gerät an etwas anschließen möchten, muss es ein Host sein (Hinweis: Ich bin absichtlich Hubs hier ignorieren).

Der Arduino Due verwendet einen weitaus leistungsstärkeren Chip, der als Host fungieren kann (im sogenannten On-The-Go-Modus).

Um dies zu tun Alles, was weniger leistungsfähig ist als ein Due Sie benötigen zusätzliche Hardware, die speziell als USB-Host entwickelt wurde – und hier kommt der USB-Host-Schutz ins Spiel. Er verfügt über einen Chip, der speziell als USB-Host konzipiert ist, damit Sie ein Gerät anschließen können

Keiner der Chips auf dem Uno ist als Host konzipiert. Sie haben einfach nicht die Macht.

Antwort

Nein. USB unterscheidet streng zwischen Host- und Geräterollen. Einige Chips haben Funktionsblöcke, die beide Rollen ausführen können, aber die 8u2 / 16u2 sind keine Beispiele dafür.

Typische serielle USB-Konverter wie FT232, CP210x, CH340, PL2303 usw. sind ebenfalls ausschließlich Geräte und können es nicht sein Hosts

Es gibt kostengünstige hostfähige MCUs wie die Kinetis KL25Z, aber um sie in ihrer billigsten Form zu verwenden, benötigen Sie einen anderen Softwareansatz (z. B. mbed anstelle von Arduino) und viel mehr persönlichen Aufwand. Der Teensy-LC ist verwandt, aber Sie zahlen mehr für den Arduino-Code-Lade-Helfer als für die MCU, die Ihr Programm selbst ausführt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.