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?
Antworten:
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.
quelle
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.
quelle