Emular dispositivo USB con host USB

¿En principio, es posible conectar dos computadoras con un cable USB A a USB A y hacer que una finja ser un dispositivo USB y la otra actúe como host?

Supongamos que tengo el control completo en el lado del software (a través del controlador/módulo del kernel), y el cable se puede modificar (por ejemplo, cruzado).

Si no es posible, ¿por qué no? (Por ejemplo, tal vez no se pueda hacer que el conjunto de chips host envíe las señales necesarias por software, o algo así). ¿Y cuál es el hardware mínimo que tendría que poner entre las dos computadoras para que esto funcione?

FYI, "USB On-the-Go" incluye la capacidad de un dispositivo para cambiar entre actuar como host o periférico. Sin embargo, no sé si el conjunto de chips para dispositivos que no son OTG tiene las mismas capacidades.
Además de los controladores de host USB estilo PC que tienden a no funcionar como esclavos, los puertos USB expuestos son casi siempre puertos descendentes de los concentradores USB integrados, lo que tendería a obstaculizar el funcionamiento inverso. Eso es notablemente diferente del microcontrolador de doble función o los puertos USB OTG tipo SOC de teléfonos inteligentes, que tienden a estar "desnudos" sin un concentrador integrado en el camino.

Respuestas (3)

Encontré el tablero Facedancer , que se ve interesante. Contiene un FTDI, un microcontrolador y un controlador USB MAX3421E, ¡y le permite emular un dispositivo USB en Python ! Es decir, básicamente escribes código bit-banging en Python en tu PC, y la otra PC ve el dispositivo USB que emulas. Podría ser interesante para la creación de prototipos, y se ha utilizado para fuzzing (encontrar automáticamente errores en las implementaciones y el software del host USB).

Eso no es un golpe de bits, y está usando un chip de dispositivo USB real.

Sí, es posible conectar dos ordenadores a través de USB.

No es tan simple como los cables cruzados. Necesita un circuito activo para hacer eso. Hay cables comerciales disponibles que le permiten conectar dos computadoras. Por lo general, se utilizan para transferir datos o migrar de una computadora / computadora portátil antigua a una nueva.

Si no es posible, ¿por qué no? (Por ejemplo, tal vez no se pueda hacer que el conjunto de chips host envíe las señales necesarias por software, o algo así).

No es posible en el caso de una computadora (suponiendo una PC como mencionó USB-A) porque el USB generado a partir del conjunto de chips ( ICH en el caso de Intel) solo es capaz como host.


¿Y cuál es el hardware mínimo que tendría que poner entre las dos computadoras para que esto funcione?

Echa un vistazo a Belkin Easy Transfer (F5U279)

Eso tiene ambas computadoras actuando como el host USB, que no es lo que preguntó el OP.
(No DV) Sin embargo, esta respuesta no aborda la pregunta. Básicamente, el cable contiene un dispositivo que aparece en cada computadora como un periférico y enruta los datos entre estas conexiones periféricas.
prácticamente no se ve USB OTG en las computadoras. Esta respuesta responde a la pregunta de "hardware mínimo requerido" de OP. Según el artículo de wikipedia "USB OTG, es una especificación que permite que los dispositivos USB, como reproductores de audio digital o teléfonos móviles, actúen como host".
Solo para definiciones limitadas de computadora. Los teléfonos celulares son computadoras. Raspberry Pi, Beagle Bones, ARM SOC, Pogoplugs son todas computadoras y tienden a tener OTG. Las computadoras Linux nano-itx ganadoras tienen OTG. La pregunta no es sobre la practicidad, es sobre la teoría. (Tampoco votó negativo)
Gracias, pero no estoy buscando una manera de conectar dos PC (para transferir archivos, etc.), sino para hacer que la PC finja que es un dispositivo USB a otra PC o aparato.
@jdm Gracias por aclarar la definición de la palabra "computadora" mencionada en su publicación. Se ha llevado a la abstracción. El cable que mencioné hace que ambas PC pretendan que la otra es una unidad USB.
@jdm: esta respuesta tiene ambas computadoras fingiendo ser dispositivos USB entre sí, que es todo lo que ha pedido. Si necesita que sea un tipo específico de dispositivo USB (de la multitud de posibilidades), deberá especificar ese requisito.

En principio, sí se puede. Suponiendo que tenga soporte completo para el controlador y documentación. A menos que el conjunto de chips no permita el control directo.

Es básicamente como palabras USB OTG. Un dispositivo esclavo que también puede actuar como dispositivo host y viceversa. Solo software especializado. También similar a cómo funciona el modo de disco de destino Firewire.

Sin embargo, implicaría mucha codificación. El hardware podría ser tan mínimo como un cable USB A a USB A (no estándar).

Al menos en principio.

USB OTG no está presente en las computadoras a menos que se agregue específicamente mediante el uso de una pieza adicional de hardware.
Bueno, considerando que esto es un ejercicio de pensamiento en lugar de un diseño práctico, eso no es un problema. USB OTG no requiere ningún hardware especial más de lo que lo hace el propio USB (puede bitbang USB). Y si puede usar los pines USB como GPIO con control directo de hardware, podría usar software para convertirlo en un dispositivo esclavo USB. No es práctico, pero posible.
Incorrecto. Ni siquiera puede bitbangar USB de forma remota en la mayoría de las computadoras modernas , ya que no tiene suficiente acceso en tiempo real a ningún GPIO. Eso se ha convertido en el dominio exclusivo de los microcontroladores integrados con E/S reales que cuelgan directamente del procesador, en lugar de estar al alcance de la mano aguas abajo de algún dispositivo puente como se hace en las computadoras modernas de propósito general.
¿Qué tal una citación para ese @ChrisStratton?
@Passerby: la falta de GPIO de baja latencia en las computadoras modernas es bien conocida por todos los que trabajan en los campos integrados y de control, ya que es un ejemplo importante de cómo la tecnología ha retrocedido en versatilidad, con cosas que solían ser posibles en los más antiguos. los sistemas dejan de ser posibles en los más nuevos a medida que la CPU cada vez más rápida se vuelve cada vez más aislada del mundo real.
@ChrisStratton y es una falta de respeto responder con "simplemente sabemos" cuando alguien le pide que respalde sus afirmaciones
No, la única afirmación no respaldada aquí es que esto sería posible en computadoras típicas. Está ignorando que esto se ha demostrado en dispositivos integrados con GPIO de baja latencia optimizados para la interacción del mundo real, no en sistemas más complicados con E/S que no están diseñadas ni son adecuadas para el uso del tipo bit-banging, incluso a velocidades de reloj de una pequeña fracción de la velocidad USB más baja. Los ingenieros integrados desarrollan una conciencia extrema basada en la experiencia de tales distinciones, ya que es esencial para elegir las plataformas adecuadas para los sistemas, e incluso sus maquetas/arneses de prueba.
USB OTG no es "solo un software especializado". Se requieren resistencias pull-up y pull-down en diferentes lugares, además del diferente comportamiento semántico requerido del dispositivo frente al host. La conexión a VBUS también es totalmente diferente entre el host y el dispositivo. -1