Dispositivo USB con 2 puertos: cómo protegerse contra la conexión del usuario en ambos

11

Tengo un dispositivo USB de velocidad completa para el que quiero proporcionar 2 puertos, uno en cada extremo opuesto del gabinete. Esto es para que el cable se pueda conectar donde sea más conveniente. Mi MCU (atmega32u4) solo tiene una interfaz, por lo que los puertos físicos se compartirán, pero solo se debe conectar uno a la vez.

Por supuesto, no se puede confiar en los usuarios para no enchufar ambos lados a la vez. ¿Cómo protegerse contra esto?

Ideas que se me ocurrieron:

  • Simplemente conéctelos "tal cual" y espere que el host pueda lidiar con los pines D + / D- unidos
  • Puerta NAND con pines separados de 5 V como entrada, salida a un MOSFET que desconecta Vcc cuando ambos están enchufados.

¿La segunda opción suena razonable o se requiere una solución más compleja?

monty
fuente
¿Cómo propone cablear los dos puertos para conectar D + y D- juntos? Debe agregar un diagrama que explique el diseño que propone.
Solar Mike
@SolarMike Compartido entre los dos: en el escenario "correcto", con un solo cable conectado, el D + / D- del otro conector quedará colgando.
Monty
77
También debe considerar diseñar el estuche con una cubierta móvil para que solo un puerto usb quede expuesto a la vez. De esa manera, usted comunica claramente al usuario que solo se les permite conectarse a uno de los puertos a la vez en lugar de confundirlos cuando conectan dos hosts y uno no funciona.
Nonny Moose
44
¡no te olvides del usuario que logra encontrar un cable usb macho-macho y conecta el dispositivo a sí mismo!
RozzA

Respuestas:

23

Como se señaló, no puede conectar directamente dos hosts a un dispositivo, por lo que si solo los conectó y alguien los conectó en ambos extremos, tendría un problema.

Sin embargo, también tiene un problema si solo hay un extremo conectado. USB, especialmente el modo de alta velocidad (480 Mbps) es la impedancia controlada. Si conecta ambas líneas de datos de conectores, terminará con lo que se conoce como un trozo en el diseño de alta frecuencia. El cable que va al conector no utilizado degradará el rendimiento del conector activo.

Para hacer esto correctamente, desea un IC multiplexor. Puede comprar multiplexores USB2.0 dedicados diseñados específicamente para este tipo de aplicación, algo así como el TS3USB30 . Eso le permitiría conectar las líneas de datos de ambos puertos a las entradas de mux y conectar la salida a su dispositivo internamente. El mux desconectará el conector no utilizado que desconectará los terminales de la línea de transmisión.

Para la alimentación, probablemente usaría un multiplexor de potencia como un circuito de diodo OR. La línea VBUS de uno de los puertos (antes del multiplexor de potencia) se puede usar como entrada al multiplexor de datos.

La conexión a tierra sería común (conectada) entre los dos puertos USB y su dispositivo.

Tom Carpenter
fuente
1
No consideré los trozos, ¡ese multiplexor (combinado con multiplex de potencia) parece ideal!
Monty
3
Los stubs no deberían ser un problema en Full Speed, que es todo lo que preguntaste en tu pregunta.
Dave Tweed
1
@DaveTweed Agregué la aclaración Full Speed ​​después de darme cuenta de que esta respuesta cubría High Speed. Saber que puedo "salirse con la suya" es bueno para este diseño, pero definitivamente aprecio saber las implicaciones a velocidades más altas.
Monty
Ahora estoy realmente interesado en cómo hacer que atmega32u4 sea compatible con 480Mbps :)
Dmitry Grigoryev
9

El multiplexor sugerido por Tom Carpenter es una buena solución.

Pero para USB de alta velocidad (12 Mbps), los trozos en las señales no son particularmente importantes. Si la distancia entre los extremos del trozo permanece por debajo de 1/10 de la longitud de onda, es decir, por debajo de ~ 2 metros, los reflejos no distorsionarán demasiado la forma de onda.

Además, los niveles de voltaje en los pines D + y D- permanecerán dentro del rango aceptable, por lo que no hay mucho riesgo de daño electrónico en ninguno de los hosts.

El principal problema que queda es si conecta los pines de + 5V de ambos hosts juntos, podría haber grandes corrientes involucradas. Puede usar un diodo de cada pin de + 5V del conector USB para permitir que la corriente entre, nunca salga.

jpa
fuente
4

La forma de diseño electrónico diferido sería simplemente usar un interruptor físico multiconector para elegir cuál se usa.

Tenga en cuenta que esto tendría el beneficio adicional de poder dejarlos enchufados y usar el interruptor para seleccionar qué entrada se utilizará.

Lassi Kinnunen
fuente
2

No hay una forma compatible con USB para hacer esto. USB no está diseñado para ser compartido entre dos hosts e intentar hacerlo conducirá a situaciones potencialmente desastrosas.

En el mejor de los casos, puede usar un multiplexor USB o un interruptor IC, con GPIO para determinar qué conector está conectado. Tendrá que decidir qué conexión USB tiene prioridad, ya que ambas no pueden conectarse a su interfaz USB al mismo tiempo.

O mira alternativas. Haga que una computadora se comunique con la otra. O use Bluetooth o use Wi-Fi o un tipo de conexión diferente.

Transeúnte
fuente
He agregado una aclaración a la pregunta: solo se usará un puerto a la vez, y (con suerte) la puerta NAND puede resolver el problema de precedencia simplemente negando el escenario "ambos conectados".
Monty
¿A qué tipo de situaciones desastrosas crees que podría conducir?
jpa
1
@jpa suponga que los dos sistemas tienen potenciales de "tierra" que son 50V diferentes, por ejemplo. Conectarlos a ambos a D- podría ser "interesante". Incluso si los potenciales son solo 50mV diferentes, es posible que haya creado un "bucle de tierra" generador de ruido.
alephzero
1
@alephzero Claro, pero incluso un típico multiplexor o interruptor IC no manejaría eso. La conexión a tierra primero en el conector USB, sin embargo, elimina principalmente ese problema.
jpa
2

Tengo una tableta Wacom con esta función. Manejan el problema que está describiendo utilizando un enclavamiento mecánico.

Hay un control deslizante de plástico que bloquea un puerto u otro, dependiendo de su posición.

ingrese la descripción de la imagen aquí

Dibujó
fuente
1

Quizás sería más fácil dejar el conector USB a un lado del gabinete y duplicar y / o reubicar todos los demás elementos orientados al usuario de forma simétrica. Luego, el gabinete se puede girar para que el puerto USB esté orientado hacia el conector, mientras que todos los demás elementos aún están convenientemente accesibles.

Otra opción es ubicar ambos puertos en un lado del gabinete (en los extremos opuestos) y agregar un trozo deslizante dentro del gabinete que el usuario puede mover para abrir uno u otro puerto. El USB de 12 MHz tiene una buena posibilidad de funcionar con un puerto extra desconectado conectado a él.

Dmitry Grigoryev
fuente