Kan de Arduino met USB-apparaten communiceren zonder het USB-hostschild?

Ik ben op zoek om verschillende USB-apparaten aan te sluiten op een Arduino Uno (in het bijzonder een gamepad en een webcam, maar ik ben geïnteresseerd in het algemene geval ). Is dit mogelijk zonder het USB-hostschild te gebruiken, aangezien de Uno een USB-poort en USB-naar-serieel converter heeft? Ik zou het schild kunnen gebruiken, maar ik ben benieuwd of / waarom het nodig is.

De Sparkfun-website stelt dat:

Het SparkFun USB Host Shield bevat alle digitale logica en analoge circuits die nodig zijn om een full-speed USB-randapparaat / hostcontroller te implementeren met je Arduino.

Bevat de Arduino dit nog niet en heeft hij alleen de juiste software nodig (hoewel het duidelijk gemakkelijker is om de reeds geschreven bibliotheek voor het Host Shield te gebruiken). Of zijn er hardwarebeperkingen?

Volgens Kan een Ethernet USB Dongle worden gebruikt in plaats van een Ethernet Shield voor Arduino? (Majenkos antwoord), het kan, in theorie, worden gedaan met de Due, maar niet met de Uno . Is dit in dat geval omdat de Uno de ATmega16U2 gebruikt in plaats van de FTDI FT232RL voor USB-communicatie?

Opmerkingen

  • Ik don ' Ik denk dat het onmogelijk is, USB is een soort seriële bus met specifieke protocollen, dat wil zeggen dat apparaten splitsen van apparaten aan specifieke tijdbereiken taggen (sommige vergelijkbare protocollen zoals één draad). Ik denk dat de enige beperking snelheid is, daarom is het synchroniseren van alle USB-specifieke commandos en gegevens het ding dat problemen veroorzaakt,
  • @GeneralChaos Jij ' re juist, het ' is niet " onmogelijk " – maar het is hoogst onpraktisch. Er is een software-implementatie van een USB-apparaat (VUSB) die geen ' speciale hardware nodig heeft. Het ' is op zijn best dubieus en werkt in de beste tijden nauwelijks. Er is geen reden waarom u niet ' een host-equivalent zou kunnen schrijven – het zou echter nooit kunnen werken op iets meer dan de 1,5 MHz van USB 1.0 " Lage snelheid ", dus kan nooit praten met iets anders dan een eenvoudig toetsenbord of muis. Dingen zoals ethernet of webcams zijn volkomen onmogelijk zonder Host- of OTG-hardware, die de Due in de hoofdchip heeft ingebouwd.

Antwoord

Allereerst moet je de basisprincipes leren van hoe USB werkt.

Bij USB zijn er twee belangrijke” dingen “: hosts en apparaten.

Je hebt één host (meestal uw computer) en veel apparaten (zoals Arduinos, printers, scanners, webcams, wifi-dongles, enz.).

Als host moet u weten welke apparaten u op u gaat aansluiten en hoe u met hen kunt communiceren. Een apparaat zijn betekent gewoon op je eigen manier communiceren met de host.

Zoals je kunt zien, is het een veel complexere taak om een host te zijn dan een apparaat.

Arduinos zijn apparaten . De kleine USB-interfacechips die ze gebruiken, hebben een zeer laag vermogen en kunnen alleen een apparaat zijn, nooit een host.

Als je een apparaat ergens op wilt aansluiten, moet het een host zijn (let op: ik ben met opzet het negeren van hubs hier).

De Arduino Due gebruikt een veel krachtigere chip, en die kan een host zijn (met behulp van de zogenaamde On-The-Go-modus).

Om het te doen met iets minder krachtig dan een Due, hebt u aanvullende hardware nodig die speciaal is ontworpen als USB-host – en dat is waar het USB-hostschild wordt geleverd. Het heeft een chip die speciaal is ontworpen als USB-host, zodat u een apparaat kunt aansluiten erin.

Geen van de chips op de Uno is bedoeld als host. Ze hebben gewoon niet de kracht.

Antwoord

Nee. USB maakt strikt onderscheid tussen host- en apparaatrollen. Een paar chips functionele blokken hebben die beide rollen kunnen vervullen, maar de 8u2 / 16u2 zijn hier geen voorbeelden van.

Typische USB seriële converters zoals de FT232, CP210x, CH340, PL2303, enz. zijn ook strikt apparaten en kunnen niet worden hosts

Er zijn goedkope host-compatibele MCUs zoals de Kinetis KL25Z, maar om ze in hun goedkoopste vorm te gebruiken heb je een andere softwarebenadering nodig (bijvoorbeeld mbed in plaats van Arduino) en veel meer persoonlijke inspanning. De Teensy-LC is gerelateerd, maar je betaalt meer voor de Arduino-code-laadhulp erop dan voor de MCU die je programma zelf uitvoert.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *