¿Cómo evitó USB 2.0 las colisiones?

33

Al observar los pines de los receptáculos USB 3.0, puedo ver que hay pares de transmisión y recepción separados, sin embargo, para USB 2.0 solo hay un par de pines de "datos". ¿Cómo garantiza USB 2.0 que los dispositivos no se comuniquen simultáneamente?

VortixDev
fuente
2
También podría estar interesado en ver cosas como CSMA / CD, que es cómo se resuelve en otros contextos
PlasmaHH
1
Los pares de transmisión / recepción separados no resuelven todos los conflictos. Imagine que tiene un pendrive y un módem, ambos quieren enviar algunos datos al host, por lo que ambos comienzan a transmitir. ¿Dónde? En el mismo par: el anfitrión recibe. El conflicto sigue ahí. No es así como funciona el USB, pero así es exactamente como funciona 10/100 Ethernet: cada dirección tiene su propio par, pero la luz de "colisión" en el concentrador sigue parpadeando.
Agent_L

Respuestas:

67

USB es estrictamente maestro-esclavo. El dispositivo no transmite a menos que el host le indique que transmita.

Incluso el llamado modo de "interrupción" es realmente un sondeo: por ejemplo, cada 8 milisegundos (o menos si tiene un mouse de jugador), la PC le pregunta al mouse "cuál es su posición" y el mouse responde.

Lo mismo si tiene una interfaz USB en serie, por ejemplo. Cuando la interfaz recibe datos en la línea serie, no los transmitirá a la PC. En su lugar, esperará a que la PC inicie la transacción y solicite los datos.

Esta página web tiene una buena explicación sobre los paquetes que se intercambian. Básicamente, tenga en cuenta que el USB se implementó para permitir que funcione el periférico más tonto y barato posible, lo que significa que la mayor parte de la inteligencia está en el host, el controlador usb del host, el sistema operativo y los controladores. Esto es muy evidente al leer las especificaciones.

Firewire (por ejemplo) tiene una filosofía completamente diferente, es mucho más potente, es multimaestro, por lo que los dispositivos pueden comunicarse entre sí sin la ayuda de un host / maestro. En realidad, está mucho más cerca en su filosofía de algo como el token ring con transferencias isócronas en la parte superior, que al USB. Sin embargo, "multimaestro" significa que requiere un potente microcontrolador en los dispositivos, ejecutando una pila de software compleja. Por lo tanto, es más costoso y, por lo tanto, se limita a productos caros como videocámaras y carcasas rápidas de discos duros. Un mouse firewire no tiene sentido, sería demasiado costoso. Esa es una de las razones por las que FireWire falló.

Peufeu
fuente
3
Excelente explicación, y una comparación muy adecuada con FireWire (y sí, construyamos una red de arbitraje basada en token para ... de manera realista, como máximo 5 dispositivos en un bus).
Marcus Müller
3
Esta es una buena respuesta, pero creo que sería más completa si mencionaras la enumeración. Descubrir qué dispositivos están conectados a una red dinámica sin capacidad de arbitraje (como lo tendría una red multimaestro) no es un problema trivial y, en muchos sentidos, define por qué USB no puede usar una verdadera topología de bus.
Jon
Gracias;) Sin embargo, no conozco los detalles sangrientos sobre la enumeración desde el lado del host. Pero en mi opinión, la verdadera razón por la que el USB es así es que fue diseñado a mediados de la década de 1990 y en ese momento los microcontroladores eran más caros que hoy en día, y la forma de dispositivos baratos era hacerlos lo más tontos posible con la menor cantidad de RAM y código como sea posible. Además, funciona muy bien, un poco dulce.
peufeu
55
Incorrecto, USB es un bus . Simplemente tiene una topología diferente (estrella) como opuesta al bus "lineal" más familiar. Todas las transacciones de host USB 2.0 (HS) se transmiten en todos los segmentos de la estrella, por lo que no es muy diferente del bus "lineal". Similar al bus lineal, todos los dispositivos ven la actividad del bus casi a la vez. La única diferencia es que las respuestas de los dispositivos no son visibles para otros dispositivos que se encuentran en diferentes ramas.
Ale..chenski
2
@rahuldottech es bastante bueno si funciona , pero FireWire era mucho menos confiable que USB, en particular WRT plug & play. Y con USB, puede conectar fácilmente muchas unidades a un solo puerto utilizando un concentrador adicional. Hay una compensación de rendimiento, pero la fiabilidad y la facilidad triunfan.
Leftaroundabout
18

En el marco USB, los dispositivos no pueden comunicarse simultáneamente, porque solo "hablan" cuando el host USB "les permite" hablar. Y el host USB permite que otro dispositivo "hable" solo cuando se completa el protocolo de transacción secuencial con el primer dispositivo. Y los dispositivos USB no tienen ningún medio para "hablar" por sí mismos, no hay un mecanismo de interrupción activo en el USB. En resumen, el mecanismo para implementar esta disciplina es el siguiente.

Después de conectar los dispositivos USB 2.0, el host los enumera asignando direcciones únicas a cada dispositivo.

Cada transacción en el bus es iniciada por un host USB.

Los encabezados de cada transacción USB llevan una dirección específica del dispositivo. Incluso cuando las transacciones se transmiten a través de todo el árbol USB (en la instancia del controlador de host particular), solo el dispositivo con la dirección coincidente respondería a la transacción y tomaría los datos o respondería con los datos.

El enlace "socios" enviará un acuse de recibo en la dirección de quién recibe los datos con éxito. Toda la transacción sigue un protocolo establecido con una secuencia definida de tokens, tiempos de espera y códigos de corrección de errores, para garantizar la integridad de la transacción.

Todos los demás dispositivos solo escuchan e ignoran el tráfico que no se dirige a ellos.

Eso es todo, es una interfaz "half-duplex".

Ale..chenski
fuente
1
No está familiarizado con el protocolo USB, entonces, ¿cómo sabe el host que respondió el dispositivo correcto?
Derek 朕 會 功夫
@Derek 朕 會 功夫, el host lo sabe porque este es el único dispositivo que se supone que responde, nadie más responderá. Las transacciones USB 2.0 son "atómicas", no hay respuestas diferidas, todo depende del tiempo de espera. Ninguna respuesta oportuna (transacción incompleta) resultará en una nueva prueba.
Ale..chenski
Para seguir, mi pregunta es que, dado que cada dispositivo está conectado al mismo bus, ¿qué me impide fingir ser otro dispositivo que también está conectado?
Derek 朕 會 功夫
77
@Derek 朕 會 功夫: Nada. Es por eso que no conectas llaves USB aleatorias que obtienes de mercados fuera de la calle. No puedes confiar en ellos.
Lightness compite con Monica
77
@Derek 朕 會 功夫, dejando de lado las intenciones maliciosas, un dispositivo USB tiene que aceptar una dirección durante la enumeración, y otro dispositivo tendrá una dirección diferente, todo controlado por el host. Esto no es diferente de cuando varios módulos de memoria están conectados a un bus paralelo, pero cada módulo responde solo a la selección del decodificador / chip de dirección. Y si dos dispositivos USB responden accidentalmente (por ejemplo, el host se equivocó con la asignación de direcciones), habrá un desastre de colisiones en el bus y ningún paquete pasará CRC (que está conectado a cada token USB), y el puerto correspondiente ser deshabilitado debido a errores masivos.
Ale..chenski