¿Cómo funciona el protocolo USB? [cerrado]

3

Siempre me he preguntado cómo se comunican realmente los dispositivos USB. Cuando quité un cable USB, noté que había cuatro cables diferentes. Dos de ellos son para alimentación (positivo y tierra) y también otros dos cables.

He buscado los nombres de los pines de estas otras dos conexiones USB y se llaman datos + y datos-. ¿Se utilizan estos dos cables para enviar señales de datos? Si es así, ¿por qué hay dos (uno para cada salida de datos para cada dispositivo)?

¿Qué pasa si los dos dispositivos están en dos frecuencias de reloj diferentes? ¿No sería esto un desastre el intercambio de datos? Y las preguntas que realmente me golpean en la cabeza es: ¿cómo puede un dispositivo "saber" si el otro dispositivo necesita energía, si el otro dispositivo no tiene una fuente de energía para "decirle" al "dispositivo maestro" que necesita energía? ¿Alguien me puede dar una descripción general de cómo funciona el protocolo USB?

    
pregunta zack1544

3 respuestas

13

Intentaré responder sus preguntas para que las proponga (la numeración puede ayudar).

De hecho, hay cuatro cables (ignorando USB3.x por el momento). Dos de hecho para potencia (+ 5V y GND), y dos para señalización (D + y D-).

La clave a tener en cuenta sobre los cables de señal es su nombre, tenga en cuenta los signos + y - (también a veces P y N o P y M). Estos suelen indicar en la electrónica que algo es diferencial. Lo que esto significa es que los 1 y 0 están indicados por la polaridad de la tensión entre cada cable. Esto es como opuesto a un solo extremo donde los 1 y 0 se llevan como un voltaje relativo a GND.

¿Qué quiero decir con polaridad? Bueno, imagine que el cable D + está dirigido a \ $ + 3.3 \ mathrm {V} \ $, y el D- está dirigido a \ $ 0 \ mathrm {V} \ $. La diferencia entre los dos es \ $ V_ {D +} - V_ {D-} = 3.3 - 0 = 3.3 \ mathrm {V} \ $. Ahora, si en cambio, el cable D + se dirigió a \ $ 0 \ mathrm {V} \ $ y el D- a \ $ + 3.3 \ mathrm {V} \ $, la diferencia se convierte en \ $ V_ {D +} - V_ {D- } = 0 - 3.3 = -3.3 \ mathrm {V} \ $. Observe el signo menos, que indica la polaridad opuesta.

Para que esto funcione, los dos cables de datos deben ser complementarios entre sí (cuando uno es alto, el otro es bajo) para transferir datos, por lo tanto, deben operar a la misma frecuencia. Usted puede pensar por qué molestarse, simplemente use un cable. La cosa es que el mundo es un lugar bastante ruidoso, un cable de un solo extremo (modo común) es muy propenso al ruido que a altas velocidades (incluso a bajas velocidades en entornos hostiles) puede corromper los datos (hacer un 1 a 0). En la señalización diferencial, ambos cables están expuestos al mismo ruido, ¡por lo que se cancela!

Un ejemplo rápido. Diga que la señal que está enviando es \ $ 2 \ mathrm {V} \ $ o \ $ 0 \ mathrm {V} \ $. Digamos también que en cada cable que recibe \ $ 1 \ mathrm {V} \ $ de ruido (no realista, pero un ejemplo). Para un solo final, sus señales en el receptor serían \ $ 2 + 1 = 3 \ mathrm {V} \ $, que es claramente una lógica 1, o \ $ 0 + 1 = 1 \ mathrm {V} \ $ en qué punto No tengo idea de lo que era. Sin embargo, para el diferencial, sus señales en el receptor serían \ $ (2 + 1) - (0 + 1) = 2 \ mathrm {V} \ $ o \ $ (0 + 1) - (2 + 1) = - 2 \ mathrm {V} \ $ que son los mismos que si no hubiera ningún ruido.

Hay otras ventajas de tener dos cables. Cuando no se envían datos, la especificación USB usa los dos cables de forma independiente para las señales de control, por ejemplo. una señal de sincronización, un comando de reinicio, etc. Estos se pueden distinguir claramente de los paquetes de datos mediante varios trucos que probablemente sean demasiado profundos (todo estará en la especificación de USB mencionada en los comentarios).

En USB, ambos dispositivos deben ser de la misma frecuencia. Por lo general, es un múltiplo de 12MHz, por lo que verá que los dispositivos USB funcionan a frecuencias de reloj como 48MHz o 12MHz, etc. Estas frecuencias son generadas por una referencia de cristal que suele ser precisa a aproximadamente 20 ppm (240Hz para un cristal de 12MHz) ). Por lo general, esto es lo suficientemente cercano como para que los impulsos de sincronización en las líneas de datos y el hecho de que los datos se envíen en ráfagas (lo que significa que la deriva en la frecuencia no se acumule durante mucho tiempo), los dos dispositivos pueden permanecer sincronizados. Si accidentalmente usara, digamos, un cristal de 16MHz, el dispositivo probablemente no podrá enumerar.

¿Cómo sabe el maestro que el dispositivo necesita energía? Simple, a todos los dispositivos USB se les permite extraer una cantidad de corriente sin solicitarla, hasta \ $ 100 \ mathrm {mA} \ $, hasta donde recuerdo. Esto le da al dispositivo la potencia suficiente para encenderse, afirmar su presencia (con una resistencia de pull up en la línea D +, probablemente también en profundidad). Una vez que el maestro conoce el dispositivo, asigna una asignación de energía a ese dispositivo y le pregunta si necesitará más (por ejemplo, para un dispositivo de alta potencia, si quiere la \ $ 500 \ mathrm {mA} \ $ de alta asignación actual).

El protocolo USB está todo en la especificación. Tratar de repasar probablemente todavía sería demasiado profundo. Pero una vez dicho esto, es posible que desee consultar esta respuesta a otra pregunta que proporciona algunos detalles.

    
respondido por el Tom Carpenter
6

USB 1.x (1.5 Mbit / sy 12 Mbit / s) y 2.0 (480 Mbit / s) usan cuatro cables, V \ $ _ {BUS} \ $ (+5), D +, D- y GND . El D + y D- forman un par diferencial. También hay una extensión llamada OTG (On-The-Go) que permite que un dispositivo actúe como un host o dispositivo USB, y esto hace uso de un quinto cable de identificación que podemos ignorar.

Si la velocidad máxima de cada host y dispositivo es diferente, se lleva a cabo una negociación y se utiliza la velocidad más alta común para ambos.

Laseñalizacióndiferencialproporcionaunaltogradodeinmunidadalruido.LasseñalesdedatosseenvíanysevuelvenpositivasenlalíneaD+,ynegativasenlalíneaD.Enelladoreceptor,elcablepositivoseenvíaalcablepositivodeuncomparador(queactúacomounsustractor),yelcablenegativoseenvíaallíderdelcomparador.

Parapulsosválidos,estosdossuman(yaqueelpulsonegativoseenvióallíderdelcomparador,agregan).Perosiseinduceruidoenlalínea,engeneralafectaráalaslíneasD+yDdelmismomodo,yelcomparadorlasrestará.

Eldiagramamuestradatosquevanenunasoladirección.EstosedebeaquelasseñalesUSBsonsemidúplex,losdatossolovanenunadirecciónalavez.

USB3.0(hasta10Gbit/s)usanuevecablesenlugardecuatroyproporcionaunaoperacióndedúplexcompleto,yaquehayparesdiferencialesporcadavíaparatransmitiryrecibir.

Losdispositivospuedenconsumirhasta100mAsintenerque"preguntar". Para USB 1.xy 2.0, el dispositivo puede pedirle al host que suministre hasta 500 mA. Para USB 3.0, esto se ha incrementado a 900 mA. Hay un protocolo separado utilizado para cargar la batería (sin intercambio de datos); esto puede ir tan alto como 5A en algunos casos.

    
respondido por el tcrosley
4

El USB utiliza la señalización diferencial para reducir la interferencia y permitir la transmisión de alta velocidad a larga distancia. Un bus diferencial está construido con dos cables, uno de ellos representa los datos transmitidos y el otro es su complemento. La idea es que el voltaje 'promedio' en los cables no transmita ninguna información, lo que resulta en menos interferencia. La mayoría de los buses seriales modernos (USB, Ethernet, PCIe, SATA, etc.) son diferenciales, ya que el costo de los cables adicionales es muy superior a las ventajas de la reducción de ruido. USB 2 es también lo que se llama 'half duplex'. Esto significa que el enlace solo funciona en una dirección en un momento dado. Diga, su computadora puede enviar un mensaje a su mouse. O su ratón puede enviar un mensaje a su computadora. Pero no ambos al mismo tiempo. El autobús tiene que girarse cada vez que se envían datos en la otra dirección.

En lo que respecta a la temporización, USB aprovecha dispositivos llamados serializadores y deserializadores. El serializador es responsable de generar los datos en serie en el extremo de transmisión, y el deserializador es responsable de recuperar los bits en el otro extremo. Parte del trabajo del serializador es codificar los datos de manera que sea fácil de decodificar al incluir información de trama y sincronización. Parte del trabajo del deserializador es recuperar la señal del reloj. El USB utiliza una codificación llamada NRZI, o invertida sin retorno a cero. En NRZI, el 0 lógico está representado por una transición y el 1 lógico está representado por ninguna transición. El USB usa relleno de bits para limitar la longitud de los 1s sucesivos enviados a través del cable. El resultado de esto significa que hay transiciones con la frecuencia suficiente para recuperar todos los bits, incluso si los relojes del transmisor y el receptor no funcionan exactamente a la misma velocidad. Sin embargo, tienen que estar relativamente cerca. También hay secuencias de sincronización explícitas que se envían junto con los datos.

En lo que respecta a la alimentación, el dispositivo puede extraer una cierta cantidad de energía sin preguntarle al host. Para dibujar más que eso, es necesario negociar para asegurarse de que el host no se sobrecargue. El dispositivo debe esperar hasta que obtenga permiso antes de que pueda recibir más corriente.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas