Chcę podłączyć różne urządzenia USB do Arduino Uno (w szczególności gamepad i kamerę internetową, ale interesuje mnie ogólny przypadek) ). Czy jest to możliwe bez korzystania z osłony hosta USB, ponieważ Uno ma port USB i konwerter USB na port szeregowy? Mógłbym użyć tarczy, ale jestem ciekaw, czy / dlaczego jest to konieczne.
Witryna Sparkfun podaje, że:
SparkFun USB Host Shield zawiera wszystkie cyfrowe układy logiczne i analogowe niezbędne do zaimplementowania kontrolera urządzenia peryferyjnego / hosta USB o pełnej prędkości z Arduino.
Czy Arduino już tego nie zawiera, potrzebuje tylko odpowiedniego oprogramowania (chociaż oczywiście łatwiej jest korzystać z już napisanej biblioteki dla osłony hosta), czy też są ograniczenia sprzętowe?
Zgodnie z Czy zamiast osłony Ethernet dla arduino można użyć klucza USB Ethernet? (odpowiedź Majenko), teoretycznie można to zrobić za pomocą Due, ale nie za pomocą Uno . W takim razie, czy to dlatego, że Uno używa ATmega16U2 zamiast FTDI FT232RL do komunikacji USB?
Komentarze
- Nie ' nie myślę, że to niemożliwe, USB jest rodzajem magistrali szeregowej z określonymi protokołami, tj. oznaczaniem urządzeń, rozdzielaniem urządzeń na określone zakresy czasowe (niektóre podobne protokoły jak jeden przewód). Myślę, że jedynym ograniczeniem jest szybkość, dlatego synchronizacja wszystkich poleceń i danych specyficznych dla USB jest przyczyną problemów.
- @GeneralChaos You ' w porządku, to ' nie jest " niemożliwe " – ale jest to wysoce niepraktyczne. Istnieje programowa implementacja urządzenia USB (VUSB), które ' nie wymaga żadnego specjalnego sprzętu. To ' w najlepszym przypadku jest niepewne i prawie nie działa w najlepszych momentach. Nie ma powodu, dla którego nie można ' napisać odpowiednika hosta – jednak nigdy nie działałby on na niczym innym niż 1,5 MHz USB 1.0 " Niska prędkość ", więc nigdy nie można było rozmawiać z niczym innym niż zwykłą klawiaturą lub myszą. Rzeczy takie jak Ethernet lub kamery internetowe są całkowicie niemożliwe bez sprzętu hosta lub OTG, który Due ma wbudowany w główny układ.
Odpowiedź
Najpierw musisz nauczyć się podstaw działania USB.
W USB są dwie główne rzeczy: hosty i urządzenia.
Masz jeden host (zwykle komputer) i wiele urządzeń (takich jak Arduino, drukarki, skanery, kamery internetowe, klucze Wi-Fi itp.).
Bycie gospodarzem wymaga wiedzy o tym, jakie urządzenia zamierzasz podłączyć i jak się z nimi komunikować. Bycie urządzeniem oznacza po prostu komunikowanie się z hostem na swój własny sposób.
Jak widać, praca hosta jest znacznie bardziej złożona niż bycie urządzeniem.
Arduino to urządzenia . Małe chipy interfejsu USB, których używają, mają bardzo niski pobór mocy i mogą być tylko urządzeniem, nigdy hostem.
Jeśli chcesz podłączyć urządzenie do czegoś, musi to być host (uwaga: jestem celowo ignorując tutaj koncentratory).
Arduino Due wykorzystuje znacznie mocniejszy układ, który może być hostem (używając tak zwanego trybu On-The-Go).
Aby to zrobić z cokolwiek mniej wydajnego niż Due wymaga dodatkowego sprzętu, który jest specjalnie zaprojektowany jako host USB – i właśnie tam pojawia się osłona hosta USB. Posiada chip zaprojektowany specjalnie jako host USB, dzięki czemu można podłączyć urządzenie w to.
Żaden z chipów na Uno nie jest zaprojektowany jako host. Po prostu nie mają wystarczającej mocy.
Odpowiedź
Nie. USB ściśle rozróżnia role hosta i urządzenia. Kilka chipów mają bloki funkcjonalne, które mogą pełnić obie role, ale 8u2 / 16u2 nie są tego przykładem.
Typowe konwertery szeregowe USB, takie jak FT232, CP210x, CH340, PL2303, itp. są również ściśle urządzeniami i nie mogą być hosty
Istnieją niedrogie MCU z obsługą hosta, takie jak Kinetis KL25Z, ale aby użyć ich w najtańszej formie, potrzebujesz innego podejścia do oprogramowania (na przykład mbed zamiast Arduino) i dużo bardziej osobistego wysiłku. Teensy-LC jest powiązane, ale płacisz więcej za pomocnika ładowania kodu Arduino, niż za MCU, które uruchamia sam twój program.