Estoy buscando conectar varios dispositivos USB a un Arduino Uno (específicamente, un gamepad y una cámara web, pero estoy interesado en el caso general ). ¿Es esto posible sin usar el protector de host USB, ya que el Uno tiene un puerto USB y un convertidor de USB a serie? Podría usar el escudo, pero tengo curiosidad si / por qué es necesario.
El sitio web Sparkfun dice que:
El SparkFun USB Host Shield contiene toda la lógica digital y los circuitos analógicos necesarios para implementar un controlador de host / periférico USB de velocidad completa con su Arduino.
¿Arduino no lo contiene ya, solo necesita el software adecuado (aunque obviamente es más fácil usar la biblioteca ya escrita para Host Shield). O hay limitaciones de hardware?
Según ¿Puede un Ethernet USB Dongle ser en lugar de un ethernet shield para arduino? (respuesta de Majenko), en teoría, se puede hacer con Due, pero no con Uno . En ese caso, ¿se debe a que Uno usa el ATmega16U2 en lugar del FTDI FT232RL para la comunicación USB?
Comentarios
- Yo no ' No creo que sea imposible, USB es una especie de bus serie con protocolos específicos, es decir, etiquetado de dispositivos que dividen los dispositivos en rangos de tiempo específicos (algunos protocolos similares como un cable). Creo que la única limitación es la velocidad, por lo tanto, sincronizar todos los comandos y datos específicos de USB es lo que causa problemas,
- @GeneralChaos Usted ' tiene razón, ' no es " impossble ", pero es muy poco práctico. Existe una implementación de software de un dispositivo USB (VUSB) que no ' no necesita ningún hardware especial. Es ' dudoso en el mejor de los casos y apenas funciona en el mejor de los casos. No hay ninguna razón por la que no puedas ' t escribir un host equivalente; sin embargo, nunca podría funcionar a más de 1,5 MHz de USB 1.0 " Baja velocidad ", por lo que nunca podría hablar con otra cosa que no sea un simple teclado o mouse. Cosas como Ethernet o cámaras web son completamente imposibles sin el hardware Host o OTG, que Due ha incorporado en el chip principal.
Answer
Lo primero es lo primero, debes aprender los conceptos básicos de cómo funciona el USB.
En USB hay dos» cosas «principales: hosts y dispositivos.
Tienes un host (generalmente su computadora) y muchos dispositivos (como arduinos, impresoras, escáneres, cámaras web, dongles WiFi, etc.).
Ser un host implica saber qué dispositivos va a tener conectados y cómo comunicarse con ellos. Ser un dispositivo significa simplemente comunicarse con el host a su manera.
Como puede ver, ser un host es un trabajo mucho más complejo que ser un dispositivo.
Los arduinos son dispositivos . Los pequeños chips de interfaz USB que utilizan son de muy baja potencia y solo pueden ser un dispositivo, nunca un host.
Si desea conectar un dispositivo a algo, tiene que ser un host (nota: estoy intencionalmente ignorando los hubs aquí).
El Arduino Due usa un chip mucho más poderoso, y que es capaz de ser un host (usando lo que se conoce como modo On-The-Go).
Para hacerlo cualquier cosa menos potente que un Due necesita hardware adicional que esté específicamente diseñado para ser un host USB, y ahí es donde entra el escudo del host USB. Tiene un chip que está diseñado especialmente para ser un host USB para que pueda conectar un dispositivo
Ninguno de los chips del Uno está diseñado para ser un anfitrión. Simplemente no tienen el poder.
Respuesta
No. USB distingue estrictamente entre las funciones de host y de dispositivo. Algunos chips tienen bloques funcionales capaces de realizar cualquier función, pero los 8u2 / 16u2 no son ejemplos de esto.
Los convertidores seriales USB típicos como FT232, CP210x, CH340, PL2303, etc. también son estrictamente dispositivos e incapaces de ser hosts
Hay MCU económicos con capacidad de host como el Kinetis KL25Z, pero para usarlos en su forma más barata necesitaría un enfoque de software diferente (por ejemplo, mbed en lugar de Arduino) y mucho más esfuerzo personal. El Teensy-LC está relacionado, pero paga más por el ayudante de carga de código Arduino que por la MCU que ejecuta su programa.