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

8

Ich möchte verschiedene USB-Geräte an ein Arduino Uno anschließen (insbesondere ein Gamepad und eine Webcam, interessiere mich aber 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 den Schild benutzen, aber ich bin gespannt, ob / warum er 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 in Ihrem Arduino erforderlich sind.

Enthält das Arduino dies nicht bereits, benötigt es 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?

Nach anstelle von Ethernet - Schild für Arduino kann ein Ethernet - USB - Dongle sein? (Majenkos Antwort), es kann theoretisch mit dem Due gemacht werden, aber nicht mit dem Uno. Liegt dies in diesem Fall daran, dass der Uno den ATmega16U2 anstelle des FTDI FT232RL für die USB-Kommunikation verwendet?

Zenthirum
quelle
Ich denke nicht, dass es 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 ist die Synchronisierung aller USB-spezifischen Befehle und Daten die Ursache für Probleme.
General Chaos
@ GeneralChaos Du hast recht, es 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 von USB 1.0 "Low Speed" funktionieren und daher 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.
Majenko

Antworten:

13

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

In USB gibt es zwei Haupt- "Dinge": Hosts und Geräte.

Sie haben einen Host (normalerweise Ihren 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 sind und wie Sie mit ihnen kommunizieren können. Ein Gerät zu sein bedeutet nur, auf Ihre eigene Weise mit dem Host zu kommunizieren.

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

Arduinos sind Geräte. Die kleinen USB-Schnittstellenchips, 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 ignoriere Hubs hier absichtlich).

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

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

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

Majenko
quelle
4

USB unterscheidet streng zwischen Host- und Geräterollen. Einige Chips haben Funktionsblöcke, die beide Rollen übernehmen 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 keine Hosts sein

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.

Chris Stratton
quelle