Kan Arduino-interface med USB-enheder uden USB-værtsskærm?

Jeg ønsker at forbinde forskellige USB-enheder til en Arduino Uno (specifikt en gamepad og et webcam, men jeg er interesseret i det generelle tilfælde ). Er dette muligt uden brug af USB-værtsskjoldet, da Uno har en USB-port og USB-til-seriel konverter? Jeg kunne bruge skjoldet, men jeg er nysgerrig efter, om / hvorfor det er nødvendigt.

Sparkfun-webstedet siger, at:

SparkFun USB Host Shield indeholder alt det digitale logiske og analoge kredsløb, der er nødvendigt for at implementere en USB-perifer / host-controller med fuld hastighed med din Arduino.

Indeholder Arduino ikke dette allerede, men har bare brug for den rigtige software (selvom det naturligvis er lettere at bruge det allerede skrevne bibliotek til Host Shield). Eller er der hardwarebegrænsninger?

Ifølge Kan en Ethernet USB-dongle være i stedet for ethernet-skjold til arduino? (Majenkos svar), det kan i teorien gøres med Due, men ikke med Uno . I så fald er det fordi Uno bruger ATmega16U2 i stedet for FTDI FT232RL til USB-kommunikation?

Kommentarer

  • Jeg don ' ikke synes, det er umuligt, USB er en slags seriel bus med specifikke protokoller, dvs. enhed, der mærker opdelingsenheder til bestemte tidsintervaller (nogle lignende protokoller som en ledning). Jeg tror, den eneste begrænsning er hastighed, og derfor er synkronisering af alle USB-specifikke kommandoer og data den ting, der forårsager problemer,
  • @GeneralChaos Du ' har ret, det ' er ikke " umuligt " – men det er meget upraktisk. Der er en softwareimplementering af en USB-enhed (VUSB), som ikke ' ikke har brug for særlig hardware. Det ' er i bedste fald svagt og fungerer næsten ikke i de bedste tider. Der er ingen grund til, at du ikke kunne ' ikke skrive et værtsækvivalent – det kunne dog aldrig fungere mere end 1,5 MHz USB 1.0 " Lav hastighed ", så kunne aldrig tale med andet end et simpelt tastatur eller en mus. Ting som ethernet eller webcams er helt umulige uden vært- eller OTG-hardware, som Due har indbygget i hovedchippen.

Svar

Først skal du lære det grundlæggende i, hvordan USB fungerer.

I USB er der to” vigtigste “ting: Værter og enheder.

Du har en vært (normalt din computer) og mange enheder (såsom Arduinos, printere, scannere, webkameraer, WiFi-dongler osv.).

At være vært indebærer at vide om hvilke enheder du skal have knyttet til dig og hvordan man kommunikerer med dem. At være en enhed betyder bare at kommunikere med værten på din egen måde.

Som du kan se, er det et langt mere komplekst job at være vært end at være en enhed.

Arduinos er enheder . De små USB-interface-chips, de bruger, har meget lav strøm og kan kun være en enhed, aldrig en vært.

Hvis du vil tilslutte en enhed til noget, skal den være vært (bemærk: Jeg er bevidst ignorerer nav her).

Arduino Due bruger en langt mere kraftfuld chip, og den er i stand til at være vært (ved hjælp af det, der kaldes On-The-Go-tilstand).

At gøre det med noget mindre kraftfuldt end en Due du har brug for yderligere hardware, der er specielt designet til at være en USB-vært – og det er her USB-værtsskærmen kommer ind. Den har en chip, der er designet specielt til at være en USB-vært, så du kan tilslutte en enhed i det.

Ingen af chipsene på Uno er designet til at være vært. De har bare ikke magten.

Svar

Nej. USB skelner nøje mellem værts- og enhedsroller. Et par chips har funktionelle blokke, der er i stand til at udføre begge roller, men 8u2 / 16u2 er ikke eksempler på dette.

Typiske USB-serielle konvertere som FT232, CP210x, CH340, PL2303 osv. er også strengt udstyr og ude af stand til at være værter

Der er billige host-kompatible MCUer som Kinetis KL25Z, men for at bruge dem i deres billigste form skal du have en anden softwaretilgang (for eksempel mbed snarere end Arduino) og en meget mere personlig indsats. Teensy-LC er relateret, men du betaler mere for Arduino-kodeindlæsningshjælpen på den end for MCUen, der kører dit program selv.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *