¿Cómo funciona un concentrador USB?

Sé la respuesta de Google y la respuesta de Wikipedia para la pregunta anterior. Pero tengo una pregunta más específica en la mano. Los concentradores USB tienen muchas entradas y puertos y solo un puerto de salida, por lo que puedo usar una cantidad de dispositivos juntos. Pero, no entiendo cómo puede un puerto USB hacer transferencias de datos con n número de puertos USB.
¿Cómo puede enviar datos diferentes a todos los puertos USB al mismo tiempo?

*

esquemático

simular este circuito : esquema creado con CircuitLab

*.

Más o menos de la misma manera que su enrutador de red puede conectar un puerto LAN (Internet) a múltiples dispositivos. A cada punto final (dispositivo USB) se le asigna una dirección, y los concentradores simplemente enrutan las solicitudes del host al dispositivo correcto al realizar un seguimiento de qué dirección está en qué puerto. Es mucho más simple para USB en el sentido de que solo hay un maestro (el puerto host) que inicia todas las transacciones.
@TomCarpenter Entonces, ¿cómo enviaría el puerto USB diferentes datos juntos?
El puerto de host le pide a un punto final específico que hable. Los puntos finales solo responden cuando el host se lo solicita.
@TomCarpenter Pero todos se están usando simultáneamente y no uno por uno, sino todos juntos.
Recuerde que el bus USB puede funcionar hasta a 480 Mbps en USB 2.0. El host solo habla con un punto final a la vez, pero habla con todos ellos secuencialmente y cambia entre ellos tan rápido que no se nota. Lo mismo que hacen las redes. "Oye, mouse en el puerto 1, dime si te has mudado. Ok, ahora teclado en el puerto 2, ¿tienes alguna pulsación de tecla para informar? Ahora estás allí en el puerto 3, unidad flash, almacena estos datos para mí. ¿Alguien más ¿Necesitas hablar con? No, está bien, entonces, coloca el mouse en el puerto 1, dime si te mudaste..."
@TomCarpenter Gracias, esa fue una buena explicación. El puerto es tan rápido que se siente libre de retrasos. Tecnología interesante. ¿Puedes publicarlo como una respuesta para la comunidad?

Respuestas (2)

Todo tiene que ver con el arbitraje. Cualquier sistema que requiera la conexión de varios dispositivos necesita alguna forma de determinar quién debe hablar y cuándo. Hay diferentes esquemas como es de esperar dependiendo de la aplicación.

Un ejemplo común: en las redes tenemos muchos nodos que hablan entre sí. Esto lo hace cada nodo que tiene una dirección (por ejemplo, una dirección IP), y cuando un nodo quiere hablar con otro nodo, envía un paquete a esa dirección. Luego tiene dispositivos como enrutadores que toman paquetes que ingresan en múltiples puertos y los reenvían al puerto correcto. El arbitraje se realiza utilizando memoria para almacenar paquetes hasta que el puerto de destino esté libre.


Ahora a USB. En realidad, esto es mucho más simple que la creación de redes porque no todos los nodos son iguales. Tiene dos tipos, un host y un punto final. Solo hay un host, pero puede haber muchos puntos finales. En este caso, el arbitraje es mucho más fácil porque solo el puerto host puede hablar a voluntad. Los puntos finales solo pueden hablar cuando el host se lo solicita , y el host solo habla con un punto final a la vez.

Para los paquetes host->endpoint, los concentradores USB simplemente pasan la solicitud del host a todos los puntos finales. Debido a que todos los puntos finales tienen una dirección, solo el destinatario de la solicitud hará algo con él (por ejemplo, responder), todos los demás ignorarán el paquete.

Para los paquetes de punto final->host, el host primero envía un paquete a un punto final específico por dirección para decir "puede hablar ahora", y luego ese punto final debe enviar una respuesta de inmediato. Debido a que solo un punto final puede hablar en un momento dado, el concentrador USB simplemente enrutará el paquete desde cualquier puerto que responda a una solicitud del host.


En términos de cómo el host determina qué dispositivos están conectados y cómo el punto final obtiene su dirección, esto se logra a través de la enumeración.

Todos los puertos host y hub tienen resistencias pull-down (15kOhm) en las líneas D+ y D-. Estos ponen las líneas de datos de ese puerto en un estado conocido cuando no hay ningún dispositivo conectado, un estado en el que el puerto no enviará ningún dato a través de las líneas D+/D-.

Cuando se conecta un dispositivo, se da a conocer conectando la línea de datos D+ (velocidad máxima) o D- (velocidad baja) a VCC mediante una resistencia de 1,5 kOhm. Esto desencadena un evento de enumeración. Luego, el puerto comenzará el proceso de configuración del dispositivo y asignación de una dirección. Si tuviera que conectar dos dispositivos simultáneamente, se enumerarán uno a la vez .

Si no hay concentradores, el host simplemente habla con el nuevo dispositivo y lo configura. Si hay concentradores en el sistema, es el concentrador el que informa que el nuevo dispositivo está conectado . Si un concentrador informa que se ha conectado un nuevo dispositivo, el host le indicará al concentrador que reinicie el nuevo dispositivo e inicie las comunicaciones. Durante el restablecimiento, el punto final recibe una dirección predeterminada de 0 (*). Luego, el host puede hablar con el punto final utilizando la dirección predeterminada y configurarlo con una dirección única distinta de cero que le permitirá saber cuándo se está hablando.

(*) Debido a que solo se enumera un dispositivo a la vez, la dirección 0 siempre será única para el dispositivo recién conectado.


Entonces podría preguntar, "bueno, ¿cómo puedo tener varios dispositivos hablando al mismo tiempo?". Digamos que tiene un mouse, un teclado y una unidad flash, todos conectados al mismo concentrador USB. Todos sabemos que puede usar su mouse y teclado al mismo tiempo mientras copia archivos a/desde su unidad flash, pero si solo un dispositivo puede hablar a la vez, ¿cómo puede ser eso posible?

Bueno, todo se reduce al hecho de que los pocos cientos de milisegundos que le toma a su cerebro darse cuenta de que ha presionado una tecla y esperar que la pantalla se actualice es una eternidad para la computadora. Una interfaz USB 2.0 puede funcionar a una velocidad de hasta 480 Mbps (¡USB 3.1 puede funcionar a una velocidad de hasta 10 Gbps!), lo que significa que aunque el host solo esté hablando con un punto final en un momento dado, alterna entre ellos tan rápido que puede No digas que lo está haciendo.

USB Host: "Oye, ratón en el puerto 1, dime si te has movido. Bien, ahora teclado en el puerto 2, ¿tienes alguna pulsación de tecla para informar? Ahora estás en el puerto 3, unidad flash, almacena estos datos por mí. ¿Alguien más con quien deba hablar? No, está bien, entonces, pase el mouse sobre el puerto 1, dígame si se ha mudado..."

Humano: "Oh, mira, la computadora notó que solo moví el mouse, presioné una tecla en mi teclado y copié una imagen en la unidad flash, ¡todo al mismo tiempo!"

El dispositivo host realiza un seguimiento de las direcciones de puntos finales que se utilizan y enviará paquetes a cada uno de ellos de forma secuencial o según sea necesario (es decir, cuando el sistema operativo solicite acceso a un dispositivo específico). Entonces, aunque no todo sucede simultáneamente, el arbitraje es tan rápido que las computadoras y los humanos no pueden notar la diferencia.

Para agregar: los dispositivos USB (solo los puntos finales de "interrupción", para ser precisos) pueden solicitar que se les sondee en un cierto intervalo de hasta 1 ms. Mientras no tenga cientos de dispositivos de entrada, nunca notará un retraso.
¿Cómo sabe el host qué puntos finales están conectados? Además, esto en realidad no parece responder a la pregunta original sobre los concentradores. ¿Cómo interactúan en este proceso? ¿Cómo interactúan en la enumeración?
@YonaAppletree enumeración. Los hosts y concentradores escanean todos sus puertos en busca de conexiones de dispositivos: detectan una resistencia pull-up de 1,5 kOhm en D+ (velocidad máxima) o D- (velocidad baja). Agregaré información sobre cómo se asigna una dirección a los puntos finales.
@YonaAppletree en términos de concentradores durante la operación, la respuesta ya habla de eso. Para el host al punto final: "Los concentradores USB simplemente pasan la solicitud del host a todos los puntos finales". Para punto final a host: "Debido a que solo un punto final puede hablar en un momento dado, el concentrador USB simplemente enrutará el paquete desde cualquier puerto que responda"

Respuesta más corta: el host envía datos que están dirigidos a un dispositivo en particular (que fue "enumerado" preliminarmente), una transacción a la vez, secuencialmente. El concentrador transmite todos los paquetes a todos los dispositivos. Un dispositivo responde solo a las transacciones que están dirigidas a él. Eso es todo, cierto para los dispositivos HS.

Para los dispositivos FS y LS, el proceso es un poco más complicado. Utiliza "traductores de transacciones" integrados en cada concentrador para cada puerto, que traducen las llamadas "transacciones divididas" en tráfico LS o FS.

¿Qué pasa con el USB 3?
Los concentradores USB3 son más inteligentes para el enlace Super-Speed ​​y usan enrutamiento explícito a dispositivos/puntos finales. La sección USB2 permanece igual. Consulte la Sección 3.1 "Resumen arquitectónico" de las especificaciones USB3.1 más recientes, usb.org/developers/docs/usb_31_052016.zip