Caut să conectez diferite dispozitive USB la un Arduino Uno (în mod specific, un gamepad și o cameră web, dar mă interesează cazul general ). Este posibil acest lucru fără utilizarea scutului de gazdă USB, deoarece Uno are un port USB și un convertor USB-serie? Aș putea folosi scutul, dar sunt „curios dacă / de ce este necesar”.
Site-ul Sparkfun afirmă că:
SparkFun USB Host Shield conține toate circuitele logice digitale și analogice necesare pentru a implementa un controler periferic / gazdă USB cu viteză completă cu Arduino.
Arduino nu conține deja acest lucru, având nevoie doar de software-ul adecvat (deși, evident, este mai ușor să folosiți biblioteca deja scrisă pentru Host Shield). Sau există limitări hardware?
Conform Poate fi un USB USB Dongle în loc de ethernet shield pentru arduino? (răspunsul lui Majenko), se poate, teoretic, să se facă cu Due, dar nu cu Uno . În acest caz, se întâmplă asta deoarece Uno folosește ATmega16U2 în loc de FTDI FT232RL pentru comunicarea USB?
Comentarii
- Nu nu cred că este imposibil, USB este un tip de magistrală serială cu protocoale specifice, adică dispozitivele care etichetează dispozitivele de divizare în anumite intervale de timp (unele protocoale similare, cum ar fi un fir). Cred că singura limitare este viteza, prin urmare, sincronizarea tuturor comenzilor și datelor specifice USB este ceea ce cauzează probleme,
- @GeneralChaos Ai ' dreptate, este ' nu este " imposible " – dar este extrem de practic. Există o implementare software a unui dispozitiv USB (VUSB) care nu are ' nevoie de hardware special. ' este sigur în cel mai bun caz și abia funcționează în cele mai bune momente. Nu există niciun motiv pentru care să nu poți ' t scrie un echivalent gazdă – cu toate acestea, nu ar putea funcționa niciodată la nimic mai mult decât la 1,5 MHz de USB 1.0 " Low Speed ", deci nu ar putea vorbi niciodată cu nimic altceva decât cu o tastatură sau un mouse simplu. Lucruri precum Ethernet sau camere web sunt complet imposibile fără hardware Host sau OTG, pe care Due l-a încorporat în cipul principal.
Răspuns
Mai întâi trebuie să aflați elementele de bază despre modul în care funcționează USB.
În USB există două„ lucruri ”principale: gazde și dispozitive.
Aveți o gazdă (de obicei computerul dvs.) și multe dispozitive (cum ar fi Arduino, imprimante, scanere, camere web, dongle WiFi etc.).
A fi gazdă implică cunoașterea dispozitivelor pe care le veți avea atașate și cum să comunici cu ei. A fi un dispozitiv înseamnă doar a comunica cu gazda în felul tău.
După cum puteți vedea, este o sarcină mult mai complexă a fi gazdă decât a fi un dispozitiv.
Arduinos sunt dispozitive . Cipurile mici de interfață USB pe care le folosesc au o putere foarte redusă și pot fi doar un dispozitiv, niciodată o gazdă.
Dacă doriți să conectați un dispozitiv la ceva, acesta trebuie să fie gazdă (notă: sunt intenționat ignorând hub-urile aici).
Arduino Due folosește un cip mult mai puternic și este capabil să fie o gazdă (folosind ceea ce este cunoscut sub numele de modul On-The-Go).
ceva mai puțin puternic decât un Datorită aveți nevoie de hardware suplimentar care este special conceput pentru a fi o gazdă USB – și de aici vine ecranul USB gazdă. Are un cip conceput special pentru a fi o gazdă USB, astfel încât să puteți conecta un dispozitiv în ea.
Niciunul dintre cipurile de pe Uno nu este conceput pentru a fi o gazdă. Pur și simplu nu au puterea.
Răspuns
Nu. USB face o distincție strictă între rolurile de gazdă și de dispozitiv. Câteva jetoane au blocuri funcționale capabile să îndeplinească ambele roluri, dar 8u2 / 16u2 nu sunt exemple în acest sens.
Convertoarele seriale USB tipice precum FT232, CP210x, CH340, PL2303 etc. sunt, de asemenea, strict dispozitive și incapabile să fie hosts
Există MCU-uri ieftine, capabile să găzduiască, cum ar fi Kinetis KL25Z, dar pentru a le utiliza în forma lor cea mai ieftină ar trebui să aveți o abordare software diferită (de exemplu, mbed, mai degrabă decât Arduino) și mult mai mult efort personal. Teensy-LC este legat, dar plătiți mai mult pentru ajutorul de încărcare a codului Arduino pe acesta decât pentru MCU-ul care rulează programul dvs. în sine.