Kan Arduino-grensesnittet med USB-enheter uten USB-vertsskjerm?

Jeg ønsker å koble forskjellige USB-enheter til en Arduino Uno (spesifikt et gamepad og et webkamera, men jeg er interessert i det generelle tilfellet ). Er dette mulig uten å bruke USB-vertsskjoldet, siden Uno har en USB-port og USB-til-seriell omformer? Jeg kunne bruke skjoldet, men jeg er nysgjerrig på om / hvorfor det er nødvendig.

Nettstedet Sparkfun sier at:

SparkFun USB Host Shield inneholder alle de digitale logiske og analoge kretsene som er nødvendige for å implementere en fullhastighets USB-periferi- / vertskontroller med Arduino.

Inneholder Arduino ikke dette allerede, men trenger bare riktig programvare (selv om det åpenbart er lettere å bruke det allerede skrevne biblioteket til Host Shield). Eller er det maskinvarebegrensninger?

I følge Kan en Ethernet USB-dongle være i stedet for ethernet-skjerm for arduino? (Majenkos svar), det kan i teorien gjøres med Due, men ikke med Uno . I så fall er dette fordi Uno bruker ATmega16U2 i stedet for FTDI FT232RL for USB-kommunikasjon?

Kommentarer

  • Jeg don ' t tror det er umulig, USB er en slags seriell buss med spesifikke protokoller, dvs. enhetsmerking som deler enheter til bestemte tidsområder (noen lignende protokoller som en ledning). Jeg tror den eneste begrensningen er hastighet, og derfor er synkronisering av alle USB-spesifikke kommandoer og data det som forårsaker problemer,
  • @GeneralChaos Du ' har rett, det ' er ikke " umulig " – men det er svært upraktisk. Det er en programvareimplementering av en USB-enhet (VUSB) som ikke ' ikke trenger spesiell maskinvare. Det ' er i beste fall dårlig og fungerer knapt når det er best. Det er ingen grunn til at du ikke kunne ' t skrive et vertsekvivalent – det kunne imidlertid aldri fungere på noe mer enn 1,5 MHz USB 1.0 " Lav hastighet ", så kunne aldri snakke med noe annet enn et enkelt tastatur eller en mus. Ting som Ethernet eller webkameraer er helt umulige uten Host- eller OTG-maskinvare, som Due har innebygd i hovedbrikken.

Svar

Først og fremst må du lære det grunnleggende om hvordan USB fungerer.

I USB er det to hoved» ting «: Verter og enheter.

Du har en vert (vanligvis datamaskinen din) og mange enheter (som Arduinos, skrivere, skannere, webkameraer, WiFi-dongler osv.).

Å være vert innebærer å vite om hvilke enheter du skal ha festet til deg og hvordan du kan kommunisere med dem. Å være en enhet betyr bare å kommunisere med verten på din egen måte.

Som du ser er det en langt mer kompleks jobb å være vert enn å være en enhet.

Arduinos er enheter . De små USB-grensesnittbrikkene de bruker, har veldig lite strøm og kan bare være en enhet, aldri en vert.

Hvis du vil koble en enhet til noe, må den være en vert (merk: Jeg er med vilje ignorerer nav her).

Arduino Due bruker en langt kraftigere brikke, og den er i stand til å være en vert (ved bruk av det som kalles On-The-Go-modus).

For å gjøre det med noe mindre kraftig enn en Due du trenger ekstra maskinvare som er spesielt designet for å være en USB-vert – og det er der USB-vertsskjoldet kommer inn. Den har en chip som er designet spesielt for å være en USB-vert, slik at du kan koble til en enhet i det.

Ingen av sjetongene på Uno er designet for å være vert. De har bare ikke makten.

Svar

Nei. USB skiller strengt mellom verts- og enhetsroller. Noen få sjetonger har funksjonelle blokker som kan utføre begge rollene, men 8u2 / 16u2 er ikke eksempler på dette.

Typiske USB-serielle omformere som FT232, CP210x, CH340, PL2303 osv. er også strengt enheter og ikke i stand til å være verter

Det er rimelige vertskapte MCUer som Kinetis KL25Z, men for å bruke dem i sin billigste form, trenger du en annen programvaretilnærming (for eksempel mbed i stedet for Arduino) og mye mer personlig innsats. Teensy-LC er i slekt, men du betaler mer for Arduino-kodelaster på den enn for MCU som kjører programmet ditt selv.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *