Diseñar un conmutador USB, esquema realizado, queriendo una segunda opinión

0

Quiero diseñar un concentrador USB inverso con prioridad, donde una unidad flash USB está conectada de forma predeterminada a un dispositivo, pero cambia a otro cuando hay una conexión.

La configuración de mi producto utiliza una Raspberry Pi y una unidad flash USB dentro de una caja. En el exterior de la caja tengo 2 puertos USB, uno para alimentación y otro para datos, ninguno de ellos se conecta directamente a la Raspberry.

De forma predeterminada, la unidad flash USB está conectada a la Raspberry, pero cuando conecto un cable USB al puerto de datos de la caja, la Raspberry lo nota y cambia la unidad flash USB desde este al puerto de datos USB de la caja. Cuando quito el cable, la Raspberry cambia de nuevo la unidad flash USB a uno de sus puertos USB internos.

El esquema para esto es el siguiente:

Entonces,leíaquíenelintercambiodepilaquelas4clavijasUSBdebenestarcambiadasynosololasclavijasD+yD-.EstossecambianatravésdeuninterruptorICFSUSB30USB,enlapartesuperiordelesquema.Deformapredeterminada,inclusosiUSB_SELesdealtaimpedancia,elinterruptorconectalospinesD+DdeUSB_PEN_DATA(unidadflash)alospinesD+D-deUSB_INT_DATA(RPiUSB).

Paraelladodepoder(aquíesdondetengomisdoupts),usounICMOSFETdedosparacambiarGROUNDS.Básicamente,leíquedoscomputadoraspuedentener5VligeramentediferentesentreelVCCyelGNDdesusUSB,porloquedospuertosUSBdediferentesdispositivosPOWEREDnodeberíanestarconectadosentresí.Ok,entoncesacabodeconectarlosterminalespositivosenunared"VCC_USB_COMMON", y cambio la conexión a tierra de la memoria USB "MAGIC_USB_GROUND" a la tierra RPi "GND" o a la computadora "PE".

La conexión a tierra de la computadora y el RPi se aíslan mediante el uso de un optoacoplador de salida de disparador schmitt que impulsa el MOSFET que conmuta la conexión a tierra PE del lado de la computadora. En el lado de RPi, el terreno se cambia directamente con RPI_GPIO_PIN_OUT_X.

Finalmente, para que el RPi sepa si un cable USB está conectado al puerto de datos externo, puse un segundo optoacoplador que tiene el LED IR alimentado por la computadora y el disparador schmitt alimentado por la Raspberry y su salida es leído por un pin IO "RPI_GPIO_PIN_IN_X".

Todo esto parece ser una sobreexplotación, pero creo que me da un control perfecto sobre los tiempos de conmutación de datos y líneas eléctricas. En algún lugar también leí que el orden era importante.

¿Este circuito suena? Todavía no revisé los valores típicos de resistencia, solo puse algo que pensé que funcionaría como un valor de campo de juego, pero lo verificaré detalladamente si este circuito puede hacer lo que quiero. Además, las tapas de desacoplamiento no están presentes, pero estarán en el diseño final. ¿Son realmente necesarias las cuentas de ferrita? Solo voy a requerir USB2.0 a 480Mbps así que ...

EDIT: Ok, si entendí correctamente por la respuesta de Ali Chen, estoy pensando demasiado en las cosas y solo D + y D- deberían cambiarse. El circuito actualizado es el siguiente:

    
pregunta rmarques

2 respuestas

2

Esta es una idea bastante estándar para cambiar un dispositivo entre dos hosts USB. Sin embargo, la implementación no es complicada.

Según tengo entendido, las unidades Pi y Flash están contenidas en una caja. En esta aplicación, tanto Pi (dentro de la "caja") como el cable externo son hosts USB . La unidad flash debe cambiarse entre ellos.

La solución es simple, debe comenzar con la parte superior de sus esquemas (interruptor FSUSB30 y tres conectores USB), pero tirar la parte inferior por completo. Se deben hacer algunas modificaciones fundamentales para tierra y poder.

Primero, todos los motivos DEBEN CONECTARSE en todo momento, es una muy mala idea cambiarlos. No hay "tierra mágica", nunca.

Segundo, el VBUS al puerto "USB_PEN_DATA" se puede conectar permanentemente a + 5V desde la alimentación de la caja, para simplificar.

El USB_INT_DATA se puede conectar permanentemente al puerto de datos Pi, y VBUS ("VCC") del lado Pi (USB_INT_DATA) se debe desconectar de VCC_USB_COMMON. No debería haber "VCC_USB común" porque la VCC del puerto USB_EXT_DATA entrará en conflicto con el riel de alimentación interno de + 5V.

El conmutador debe ser controlado por VCC que vendrá (o no vendrá) desde el puerto "USB_EXT_DATA" de la siguiente manera:

  1. cuando el cable "externo" no está enchufado, VCC en USB_EXT_DATA será cero (aquí se necesitará algún menú desplegable). El interruptor debe ser controlado (por Pi) en dirección de Flash a USB_INT_DATA.

  2. Cuando un host externo está conectado, aplicará VBUS (VCC) alto. Esto enviará una señal lógica a Pi para detener lo que estaba haciendo con flash, desmontarlo con gracia y luego colocar el interruptor USUSB30 para conectar el puerto Flash con USB_EXT_DATA. Una buena idea sería poner el puerto Pi en SUSPENDER antes de hacer el cambio. Eso es todo.

Los siguientes eventos ocurrirán en el lado del host después del cambio: dado que el tráfico USB de Pi cesará, el Flash entrará en SUSPENDER, lo que resultará en D + = alto. El host verá el "evento de conexión" y, como se trata de una nueva conexión, emitirá USB_RESET, borrando toda la configuración anterior a los valores predeterminados. Luego, el host enumerará Flash de forma normal y obtendrá acceso a su sistema de archivos (si es correcto).

Cuando se retire el cable EXT, ocurrirá el proceso opuesto: en 3 ms, el Flash quedará en suspensión, D + irá ALTO, el lado Pi detectará un nuevo evento de conexión y enumerará el Flash desde su lado. Es posible que deba esperar de 5 a 10 ms antes de volver a realizar el cambio después de que desaparezca VBUS. Trabajo hecho.

    
respondido por el Ale..chenski
1

Esta es una idea realmente mala de muchas maneras ...

Para empezar, conectar todos los VUSB y cambiar los motivos no va a funcionar como usted piensa. ¿Cómo podrá detectar la conexión o desconexión del host externo? ¿Cómo podrá cambiar entre encender la unidad flash desde el RPi y encenderla desde el host externo? En su lugar, tendría que unir los motivos y detectar / cambiar el VUSB según sea necesario.

Pero una solución de hardware no debería ser necesaria en absoluto. Simplemente debe dejar la unidad flash conectada a un puerto de host en el RPi, y cuando un host externo esté conectado a un dispositivo / puerto OTG en el RPi, debe usarse un controlador de software en el RPi para presentar un sistema de archivos virtual a ese host cuyos contenidos son los contenidos de la unidad flash real (o algún subconjunto de la misma).

Esto es exactamente equivalente a lo que sucede cuando conectas una cámara / iPod / teléfono inteligente a una PC para transferir imágenes, archivos de sonido, etc. a / desde el dispositivo.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas