Protocolo USB 2.0. Bus serie universal USB

31.08.2023
  • Tutorial

Proyección ilustrada del modelo de red OSI en el bus serie universal.

Tres niveles "notables" de la pila USB

No estaba satisfecho con la apariencia de la pila USB, que se puede encontrar con mayor frecuencia en Internet:

Pila USB no muy útil


Nivel de bus, lógico, funcional... Estas son, por supuesto, abstracciones maravillosas, pero son más adecuadas para aquellos que van a crear un controlador o software de aplicación para el host. En el lado del microcontrolador, espero una plantilla de máquina de estados finitos, en cuyos nodos generalmente incrustamos nuestro código útil, y al principio, de acuerdo con todas las leyes del género, fallará. O el software del host tendrá fallas. O un conductor. En cualquier caso, alguien fracasará. También es imposible descubrir las bibliotecas MK de inmediato. Y entonces miro el tráfico en el bus USB con un analizador, donde los eventos que tienen lugar en un idioma desconocido con tres maravillosos niveles no encajan en absoluto. Me pregunto si tengo tanta disonancia en mi cabeza debido a la gripe.

Si el lector ha tenido sentimientos similares, ofrezco una visión alternativa de una pila USB, que de repente apareció claramente en mi cerebro sobrecalentado, basada en el querido modelo OSI de 7 capas. Me limité a cinco niveles:

No quiero decir que todo el software y las bibliotecas ya se hayan creado o deban diseñarse en base a este modelo. Por razones de ingeniería, el código con niveles estará muy mezclado. Pero quiero ayudar a aquellos que están comenzando a familiarizarse con el bus USB, que quieren comprender los protocolos de intercambio de dispositivos y la terminología de dominio, acercarse a ejemplos y bibliotecas ya preparados y navegar mejor por ellos. Este modelo no es para cargarlo en MK, sino en sus mentes brillantes, queridos amigos. Y luego tus manos doradas harán todo por sí mismas, no tengo ninguna duda :)

Entonces, vamos, corrige si ves errores. Esta es una versión borrador, y si ya se ha dibujado algo como esto en alguna parte, me disculpo, no pude encontrarlo, así que lo hice yo mismo. Creo que la imagen no se escapará, pero mientras tanto le explicaré al público respetable por qué comencé esta publicación.

Otro flashback de los noventa

Saqué mi primer error del código de otra persona a finales de los noventa, mientras trabajaba como estudiante. Era pppd para FreeBSD, que luego instalamos en el grupo de módems. Los módems de Motorola estaban bloqueados, nadie podía comunicarse, la línea estaba desperdiciada y el único método restante a través de PPP keep-alive tenía errores por alguna razón. Fue entonces cuando descubrí que, por alguna razón, pppd estaba esperando seis bytes de respuesta LCP en lugar de los cuatro requeridos. Me sentí tan loco entonces agitador de insectos de los noventa :-) ¿Qué tiene que ver el PPP con esto? Es similar al USB: paquete y punto a punto. Es cierto que, a diferencia del USB 2.0, es full duplex.


Nos guste o no, la evolución de los microcontroladores claramente no se detendrá. No, no, y aparecerá en publicaciones (http://habrahabr.ru/post/208026/, http://habrahabr.ru/post/233391/) "periféricos pesados": implementaciones de bus USB integradas en el MK, con ejemplos de análisis, uso de HID, etc. Debemos rendir homenaje al autor de RaJa: de ocho ejemplos dados en la biblioteca estándar STSW-STM32121 (UM0424) y de alguna manera eligió el más útil (Custom HID), lo transfirió al entorno gratuito Em::Blocks. Lo presenté en un lenguaje comprensible y lo embellecí un poco, ¡bravo! Esto me ahorró mucho tiempo.

¿Cómo llego a la biblioteca?

Habiendo recibido el proyecto RHIDDemo para Em::Blocks amablemente publicado en GitHub por el autor, comencé a portarlo a Keil (mi depurador CoLink basado en FTDI; alguien me dice el complemento Coocox para Em::Blocks). Pero simplemente no podía entender: ¿de dónde diablos sacó el autor SPL 3.6.1 de 2012, si el sitio publicó 3.5.0 de 2011? Pasé por una búsqueda bastante aburrida, que para mi sorpresa me llevó... directamente a un proyecto HID personalizado ya preparado para Keil como parte de la biblioteca USB FS 4.0.0. Está a la vista, como un ratón debajo de una escoba. Bueno esta bien. Pero finalmente llegué a las versiones de STMicroelectronics, encontré una descripción de la biblioteca USB FS STSW-STM32121 (UM0424) y detuve los intentos del desarrollador de volverme loco. Dígame, ¿es normal colocar CMSIS 1.30 antiguo de 2009 en el conjunto SPL 3.5.0 de 2011, ocultar el nuevo SPL 3.6.1 de 2012 en USB-FS 4.0.0 de 2013 (poner CMSIS 3.0.1 de 2012 en allí también), a pesar de que tienen la versión actual de CMSIS 3.30 lanzada en 2014? Por cierto, en SPL 3.6.x para STM32F10X, se corrigieron un par de errores con USART relacionados con señales de desbordamiento del búfer. Gracias, al menos dejaron notas de la versión...

HID frente a SNMP

Entonces, habiendo tomado STM32F103C8T6, también decidí profundizar un poco en el tema de USB HID, la abstracción de USB HID encaja muy bien en el concepto de todo tipo de sensores, sensores y otros controladores de potencia controlados por PWM. De alguna manera me recordó a SNMP, sólo que en una forma muy simplificada: los descriptores HID desempeñan el papel de una MIB SNMP. Cuando el host inicializa el dispositivo: “¡Hola, host! Soy cafetera. Tengo botón de [inicio], [crema], controles de [azúcar], [queda café], [queda agua], [queda azúcar], [queda nata]. Levanta los controladores, presiona el botón y tomemos un café”. ¿No te recuerda a nada? Un ejemplo de diálogo SNMP: “Bueno, hola, una estación de gestión con software por 100.000 dólares. Y tengo un chasis de interruptor por $200,000, y tengo 4 módulos más por $100,000 cada uno; cada uno tiene 16 puertos más con una velocidad indecente, y es simplemente imposible enumerar todas las funciones aquí... pregunte por cada artículo por separado; oh, sí, la carga del procesador es tal y tal, la memoria es tal y tal…” Y otra docena de páginas con el mismo espíritu.

Me gustó la idea de HID. Pero tan pronto como dejé Windows más allá de las tareas educativas de los LED parpadeantes (¡hacia entornos UNIX reales!), comenzó a filtrarse a través de todas las grietas abiertas y me sentí como una especie de cojo indefenso. Mientras depuraba el proyecto, instintivamente tomé algún tipo de tcpdump (así se llama: usbdump(8) o usbmon), pero solo vi mensajes en un idioma desconocido.

Se hizo evidente: faltan conocimientos básicos sobre el bus USB. Si cualquier especialista en TI experimentado entiende el modelo OSI y la pila TCP/IP en algún lugar al nivel de la médula espinal simplemente por necesidad, entonces con USB la situación es diferente. Es comprensible: allí puedes (necesitas) espiar el tráfico a través del mismo tcpdump y configurar el hardware y el software, pero aquí es completamente plug and play, y puedes arreglar algo actualizando el controlador o el firmware (o reinstalando el sistema operativo). Pero nos hemos reunido aquí sólo para crear un buen firmware, ¿verdad? Después de leer algunas descripciones de USB en línea, me sorprendió lo confusa que puede ser la documentación. Incluso tuve la sensación de que querían desviarnos deliberadamente, esparciendo niebla y eliminando de raíz la competencia. ¡No estoy de acuerdo con esta situación!

Otro gran esquema

En Internet encontré otra ilustración (estaba en formato BMP, no es broma):

Al principio parece optimista. Finalmente, se desmonta la pila. Los cuadros, sin embargo, están mal marcados: los dibujaría con líneas de puntos verticales, y EOF es solo una pausa, en realidad no se transmite ningún dato. Pero empezamos a leer el contexto y perdemos la comprensión de la verdadera intención del autor (para confundirnos):

El controlador host de la interfaz de bus USB genera personal;
Personal transmitido por transmisión de bits en serie utilizando el método NRZI.
Y aquí hay otro:
cada marco consiste en la máxima prioridad paquetes, cuya composición está formada por el conductor anfitrión;
cada transmisión consta de una o más transacciones;
cada transacción consiste en paquetes;
cada bolsa de plastico Consta de un identificador de paquete, datos (si los hay) y una suma de comprobación.

Parece que todo está dibujado correctamente, pero a medida que lees, las preguntas se vuelven cada vez más. ¿La estructura mínima de datos transmitida en el bus es una trama o un paquete? En general, ¿deberíamos mirar de arriba hacia abajo o viceversa? ¿Y qué se codifica con el método NRZI: tramas, paquetes o simplemente todo el flujo de bits en el bus? ¿Las transacciones consisten en un paquete, una transferencia o quizás algún tipo de paquete valioso?
¿Por qué no puedes simplemente: ¿El host agrupa paquetes en transacciones y las distribuye en intervalos de tiempo llamados fotogramas para dar prioridad a los datos críticos en el tiempo (video, audio) según el ancho de banda del bus actual? Sí, el USB tiene matices a la hora de programar transferencias de paquetes, no los abordaré todavía.

Mi visión de la pila USB

Considero que el USB en pocas palabras mencionado aquí en el concentrador (hurra, traducción), así como el USB Made Simple, son una buena documentación. Basándome en ellos, monté mi versión de la pila USB, la dibujaré de nuevo.

Capa fisica
A nivel físico, se utiliza un conjunto de modos eléctricos de un par diferencial de conductores (junto con tierra) para designar los estados con los que se codifica el flujo de bits utilizando el método NRZI con relleno de bits: aquí después de seis "1" consecutivos ( bueno, quería transmitir, digamos, 0xffff) Se inserta “0” para que el receptor no permanezca atascado en un estado durante mucho tiempo; receptor A No hay un “0” insertado y no se contará como dato; esta es una técnica bastante común en la codificación para una mejor sintonización automática de frecuencias. Un par de cables junto con tierra permiten formar al menos cuatro estados estáticos (se denominan J, K, SE0, SE1). En USB 2.0, SE1 no se utiliza, y los tres restantes se reproducen adicionalmente en dinámica (con relojes y transiciones) para transmitir varios caracteres de control más (límites de paquetes, reinicio, conexión/desconexión, ahorro/salida de energía). Hay buenas ilustraciones en USB Made Simple, Parte 3: Flujo de datos.
Aquellos. Como resultado, los datos se transmiten en forma de ceros, unos y todo tipo de caracteres de control, de modo que a partir de toda esta cocina electrodinámica se pueden preparar paquetes de datos normales.
(agregado a petición de los lectores)
nivel de lote
A nivel de paquete, los paquetes sin dirección se transmiten entre el host y el dispositivo (un par de dispositivos en una línea semidúplex pueden funcionar sin direccionamiento). El paquete consta de un marcador SYNC para sincronizar el reloj del receptor, una secuencia de bytes y un carácter EOP. La longitud del paquete es variable, pero se negocia a través de los niveles superiores de la pila. El primer byte se llama Identificador de paquete (PID), tiene un formato redundante simple para inmunidad al ruido y es adecuado para enviar a la máquina del siguiente nivel (para ensamblar transacciones a partir de paquetes). Los paquetes con relleno (más de un byte PID) se suministran con una suma de comprobación (CRC5 corta o CRC16 larga, según el tipo de paquete). El analizador de protocolos debería, como mínimo, mostrarnos los paquetes.
Nivel de transacción
En el siguiente nivel desde paquetes van actas. Una transacción es un pequeño conjunto de paquetes (en USB 1, 2 o 3 de velocidad completa), seguidos estrictamente uno tras otro, que (en modo semidúplex) el host intercambia con un punto final, y solo uno. Es muy importante que solo el host abra la transacción; esta es una especificidad de USB (hay menos problemas para nosotros con el firmware MK). A nivel de transacción podemos hablar de canal(tubería) entre el host y uno de los puntos finales del dispositivo, pero evito intencionalmente el término "Enlace de datos" del modelo OSI. El analizador de protocolos debe al menos decodificar las transacciones.
Nivel de marcha
Encima de las transacciones colocaremos la capa de transferencias. Hay cuatro tipos en USB: transferencias de control con el punto final No. 0, transferencias de interrupción, transferencias isócronas y transferencias masivas. Los tres últimos son variantes de los canales de streaming (stream pipe), de los que hablaré unas palabras más adelante. Este nivel también debería mostrar un buen analizador de protocolos.
Capa de aplicación
En la parte superior de la pila, como siempre, se encuentra la capa de aplicación. Lo que sucede aquí es: establecer la dirección del dispositivo por parte del host, informarle al dispositivo sobre sí mismo en el lenguaje de descriptores, comandos del host para seleccionar una configuración (transmisiones de control), intercambiar datos con dispositivos HID (en los ejemplos he encontrado un transmisión con interrupciones hasta ahora, quiero probar la de control), imprimir en una impresora y escanear, acceso al almacenamiento USB (bloque grande), comunicación a través de auriculares y cámaras web (isócrona) y muchas otras cosas geniales.
Toque final
Saltando niveles por un segundo, podemos agregar que el host lanza periódicamente esos mismos paquetes de Inicio de Trama (SOF) sobre el bus, dividiendo el tiempo en intervalos iguales, pero de tal manera que no rompan las transacciones en sí. Por tanto, los paquetes SOF pueden considerarse transacciones independientes. La trama USB no debe confundirse con un homónimo de la capa de enlace de datos del modelo OSI. Es mejor recordar los cuadros (cuadros) de un CD de audio, esto es solo una cantidad de tiempo: el host "marca" el bus con paquetes SOF para que los dispositivos conectados planeen de antemano participar en el llamado. transmisiones isócronas, impulsando flujos de datos en tiempo real. Bueno, o así: el host programa grupos de transacciones en intervalos de tiempo llamados marcos. Un fotograma es de 1 ms en Full Speed ​​y 125 μs en USB de alta velocidad, pero la alta velocidad es un estándar más complejo, es mejor estudiarlo por separado.
ACTUALIZACIÓN:
Los lectores hicieron una buena pregunta: ¿qué pasa con la fragmentación? No encontré ningún signo de fragmentación en USB 2.0 en el nivel de transacción e inferior, es decir. Las transacciones deben transmitirse en su totalidad. En algunos casos, las transferencias pueden y deben dividirse en varias transacciones, especialmente teniendo en cuenta los modos isócronos. Y repito que por ahora el anfitrión está a cargo de toda la planificación por nosotros (por el lado de MK tenemos que pensar menos).

Mirando el tráfico USB

Una buena selección de ilustraciones se encuentra en el libro mencionado USB Made Simple, capítulo 5: www.usbmadesimple.co.uk/ums_5.htm

Aquí está uno de ellos.


Por lo tanto, la transacción siempre la inicia el host en relación con un punto final seleccionado en el dispositivo (además del punto especial con el número 0, puede haber hasta 15 en un dispositivo, por ejemplo, un teclado combinado con un mouse, termómetro, unidad flash, cafetera y un botón de llamada para que un plomero pida pizza).
Si el host recibe datos del dispositivo, este último no puede abrir una transacción por sí solo, solo puede esperar el momento correcto y participar en ello. El host abre una transacción al dispositivo con un paquete con PID = IN (grupo de tokens) y garantiza la libertad del bus durante el tiempo requerido, el dispositivo arroja un paquete del grupo de datos, dependiendo del tipo de transacción, el host puede confirmar éxito con el tercer paquete del grupo Handshake (ACK, NAK, STALL, NYET), la transacción se cierra.
Al enviar datos al dispositivo (PID = OUT, grupo Token), el host abre una transacción, envía un paquete de datos (Datos) y, según el modo, también puede recibir un paquete Handshake que confirma el éxito de la transacción.
Al final de la transacción, todo volverá a la normalidad, el dispositivo volverá a esperar los paquetes de control del host.

Modos de transferencia USB en ejemplos de STM32 USB FS

Para que se pueda utilizar un par de cables para copiar desde un disco simultáneamente con una transmisión de audio y video, gestos del mouse y una señal de osciloscopio de alta velocidad, existen diferentes tipos de mensajes y transmisiones.
Justo arriba acabo de describir un simple canal de transmisión(Stream Pipe) entre el host y el punto final, donde los paquetes con el relleno (Grupos de datos) no transportan ninguna información especial o de control al propio subsistema USB. Con total libertad de correspondencia, la biblioteca del controlador debe proporcionar primitivas para descargar un búfer de tamaño arbitrario desde la memoria MK al host o viceversa. Deje que la biblioteca MK junto con el controlador del host se encarguen de cortar paquetes, reenviarlos y “desfragmentarlos”. En STM32, estos son USB_SIL_Write() y USB_SIL_Read(), descritos en UM0424. Son el nivel muy lógico de abstracción. En el lado del host, consulte la descripción del controlador apropiado (por ejemplo, en FreeBSD es ugen(4)).
Sin embargo, considero una blasfemia utilizar periféricos pesados ​​como USB para organizar un simple canal de streaming (la pregunta es: ¿qué tiene de malo USART?). Pero, por supuesto, hay todo tipo de situaciones.
En cualquier caso, para que el subsistema USB cobre vida y se detecte el dispositivo, se requiere un intercambio de transacciones de control.

DESCARGO DE RESPONSABILIDAD

Se mencionarán más ejemplos de la misma biblioteca UM0424 para trabajar con USB de velocidad completa de STMicroelectronics, pero están diseñados para sus placas de demostración nativas. Tome un ejemplo del autor Raja y muestre conocimientos de ingeniería adaptando proyectos a su tablero de demostración.

Todo está claro sobre el software: estos son ejemplos que no son para uso industrial, puede haber errores, algunas partes (como la tabla de enlaces en el ejemplo de Almacenamiento masivo) están protegidas por una patente y usted no tiene derecho a usarlas. en un proyecto comercial. Pero eso no es nada, los chinos logran vender productos USB en el mercado, para los cuales ni siquiera se molestan en cambiar la biblioteca VID y PID.

Para el hierro, según tengo entendido, es necesario comenzar con el cuarzo. Tengo un Chelyabinsk PinBoard II con cuarzo de 12 MHz (todas las bibliotecas están diseñadas para 8 MHz), cambié el multiplicador PLL de 9 a 6 (enlace con explicaciones), de lo contrario, el MK acelerará a 108 MHz en lugar de 72 MHz, y USB no pasará a 72 MHz en lugar de los 48 MHz requeridos. También puede reducir la velocidad del MK a 48 MHz cambiando el divisor del bus USB de uno y medio a uno. A los especialistas no les gusta usar el generador interno del HSI MK: la frecuencia puede variar ligeramente debido al calentamiento, las consecuencias para el USB son difíciles de predecir. Bueno, no te olvides de la periferia, por supuesto. Sin memoria flash SPI/SDIO, en el ejemplo de almacenamiento masivo solo puedes hacer un análogo de /dev/null, pero no puedes formatearlo :-)

Controlar transmisiones y canales de mensajes.
Pensando en USB, recuerdo el antiguo protocolo PPP con su LCP, IPCP, CCP y también xsCP. El intercambio de mensajes de un tipo especial entre el host y el punto final No. 0 es el equivalente local de x3CP.
A través de transmisiones de control, el dispositivo se inicializa, recibe una dirección y le informa al host sobre sí mismo en el lenguaje de descriptores (para que pueda encontrar y activar el controlador requerido). Sin operaciones de control, la transmisión simple no funcionará; si el dispositivo no responde en el formulario, el host cerrará rápidamente el puerto: se debe seguir el protocolo.
En principio, el protocolo no prohíbe conectar el intercambio de datos al punto de control número 0, similar al modo con interrupciones. Al mismo tiempo, piénselo: ¿cómo actualizará el firmware MK, por así decirlo, en el campo? ¿Tienes el programador listo? Hay otra solución.
Ejemplo: Actualización del firmware del dispositivo
Transmisiones interrumpidas
Esta variedad ( interrumpir la transferencia) está destinado al intercambio de pequeñas transacciones similares a las de control. No, el dispositivo no puede interrumpir el host, espera el sondeo, su frecuencia y tamaño de paquete se especifican de antemano en el descriptor del dispositivo. Muy adecuado para todo tipo de controles remotos, sensores, ratones, LED y otras cafeteras HID. El canal con interrupciones en cada punto es unidireccional.
Ejemplos: HID personalizado, Ratón con palanca de mando, Puerto COM virtual
Transmisiones isócronas
Χρόνος en griego significa "tiempo". Transmisión isócrona ( transferencia isócrona) - alta tecnología local que permite gestionar los flujos de datos en tiempo real. Ofrece ancho de banda garantizado (pero no necesariamente amplio) y sin transacciones de confirmación, muy parecido a UDP con QoS. ¿Paquete roto? Fue el dios Cronos quien empujó a MK en la pierna. No es necesario que intentes enviar el paquete nuevamente, de lo contrario Dios se enojará. Sin embargo, desde Chronos comprobamos discretamente las sumas de comprobación. Las transferencias isócronas son buenas para sistemas de medición de audio y vídeo y en tiempo real, así como para otros juguetes. uso dual. Aunque algunos de ellos podrían hacerlo. Es más interesante colgar algún tipo de AVR, conectándolo a nuestro ARM vía USART o SPI. Las operaciones isócronas están involucradas en la señalización de tramas (recuerde el tictac de un paquete SOF).
Ejemplo: altavoz de voz USB
Transmisiones de bloques grandes
No, no llevaremos sacos de cemento. Creo que todo el mundo ha aprendido el modo de funcionamiento de todo tipo de unidades USB. Transferencias transferencia masiva tienen el objetivo de enviar la mayor cantidad y rapidez de datos posible, siempre con la transferencia de paquetes rotos, pero sin garantías de ancho de banda, cediendolo a transmisiones isócronas si es necesario (como en TCP sin QoS). Ya hablé sobre la estructura interna de las unidades flash USB, ahora puedes descargar y ejecutar un prototipo funcional. No lo he probado yo mismo, pero la tabla de comandos SCSI en la descripción del ejemplo (por así decirlo) es bastante simbólica. No encontré ningún signo de un algoritmo de gestión de desgaste para la memoria NAND :-)
NOTA: La protección de patente STM se aplica en algunos lugares.
Ejemplo: Almacenamiento masivo

Lo que queda sin revelar

No tengo como objetivo hacer otro libro de texto sobre USB, hay suficientes sin mí y están bien descritos: la parte eléctrica, detalles del protocolo, trabajo con hubs, lenguaje de descriptores y el nivel de abstracción HID, problemas con VID/ La singularidad de PID, USB 3.0 y muchas otras características maravillosas del bus USB, que nos son útiles y no tanto. Para los especialistas en TI, recomiendo especialmente una excursión al lado oscuro con una descripción general de los dispositivos enemigos (una unidad flash con un teclado HID disfrazado que hará cosas terribles).

Enlaces

Adaptación del ejemplo de Custom HID al entorno gratuito Em::Blocks y a la placa de demostración económica STM32F103C8T6 producida por LC-Tech Industrial Electronics y gente de TI. Esta es una especie de ingeniería Yin y Yang, cada uno de nosotros tiene una parte de ambos.

Los ingenieros en electrónica industrial tienen conocimientos y habilidades brillantes en hardware; sueldan componentes de radio finos como un cabello con la mano izquierda y con los ojos cerrados (y luego funcionan). Al observar un circuito electrónico, uno casi físicamente comienza a sentir todas sus corrientes con potenciales; también funcionan con circuitos de potencia y con productos industriales (grandes, rápidos, peligrosos). El enfoque para programar el MK es apropiado: simplemente debe enviar los niveles lógicos necesarios a las patas correctas en el momento correcto, sin importar de qué manera. Son conservadores en tecnología (no interfieran, funciona), los periféricos MK pesados ​​no son particularmente favorecidos. Cuando se habla de programación orientada a objetos, seguridad de la información, proyectos gigantes con un millón de líneas de código y todo tipo de interfaces gráficas sofisticadas, la gente se aburre. En lugar del bus USB orientado a paquetes, prefieren el modo de transmisión USART, mejorado por el habitual RS-232 o el más brutal RS-485 (bus serie para aplicaciones industriales, hasta 10 Mbit/s a 15 m, hasta 100 kbit/s a 1200 m, hasta 32 dispositivos).

Los especialistas en TI se educan con conocimientos de sistemas operativos, infraestructura de red e interacciones complejas; la élite está bien versada en seguridad de la información y comprende todo tipo de formas invisibles de penetrar el sistema de otra persona. Algunas personas realmente aman a los gatos (¿cómo no amarlos? Yo, sin embargo, no tengo, ni crío ni cocino :-). Mucha gente ama la libertad de información, critica a las corporaciones/gobiernos y derrota las fuerzas de la naturaleza con el poder del pensamiento. Son patológicamente vagos, pero les encantan las nuevas tecnologías y los retorcidos acertijos de ingeniería con juguetes caros (preferiblemente resueltos a nivel de software o, en casos extremos, saltadores). Las relaciones con un soldador son cautelosas: no le pregunte al especialista en TI si le gusta un soldador, puede que lo malinterprete; Mejor pregúntale si le gusta soldar circuitos electrónicos.

¿De qué estoy hablando? Simplemente vemos este mundo de otra manera... Después de todo, el kernel de Linux fue creado por los mismos chicos, a partir de módulos en C e inserciones de ensamblador para plataformas específicas, y parecían prescindir de los holivars. Veo un proyecto verdaderamente serio como un sistema multinúcleo que combina los últimos microcontroladores con periféricos pesados, pero no descarto combinaciones con modelos clásicos como AVR: se pueden utilizar para colgar algunas puntas de lanza críticas del progreso técnico que giran rápidamente. Si el código ha sido probado durante años, ¿por qué no?

Agregar etiquetas

El artículo de hoy estará dedicado, como sugiere el título, a discutir los conceptos básicos interfaz USB. Veamos los conceptos básicos, la estructura de la interfaz, descubramos cómo se produce la transferencia de datos y, en un futuro próximo, pondremos todo esto en práctica 😉 En resumen, ¡comencemos!

Hay varias especificaciones diferentes. USB. Todo empezó con USB 1.0 Y USB 1.1, luego la interfaz evolucionó a USB 2.0, la especificación final apareció hace relativamente poco tiempo. USB 3.0. Pero por el momento la implementación más común es USB2. 0.

Bueno, para empezar, los principales puntos y características. USB 2.0 admite tres modos de funcionamiento:

  • Alta velocidad– hasta 480 Mb/s
  • A toda velocidad– hasta 12 Mb/s
  • Baja velocidad– hasta 1,5 Mbit/s

Comandos en el autobús Puerto USB(por ejemplo, un PC), al que podrás conectar hasta 127 dispositivos diferentes. Si esto no es suficiente, deberá agregar otro host. Además, es importante que el dispositivo en sí no pueda enviar/recibir datos hacia/desde el host; es necesario que el host se ponga en contacto con el dispositivo.

Casi todos los artículos sobre USB He visto el término usado punto final“, pero lo que es suele escribirse de forma bastante vaga. Entonces, el punto final es parte del dispositivo. USB, que tiene su propio identificador único. Cada dispositivo USB puede tener múltiples puntos finales. En general, un punto final es solo un área de memoria USB un dispositivo en el que se pueden almacenar todos los datos (búfer de datos). Y al final obtenemos esto: cada dispositivo tiene su propia dirección única en el bus. USB, y cada punto final de este dispositivo tiene su propio número. Como esto)

Hagamos una pequeña digresión y hablemos de la parte "hardware" de la interfaz.

Hay dos tipos de conectores: Tipo A y Tipo B.

Como ya se desprende claramente de la figura Escribe un siempre mira al anfitrión. Estos son los conectores que vemos en ordenadores y portátiles. Conectores Tipo B Consulte siempre los dispositivos USB conectados. El cable USB consta de 4 hilos de diferentes colores. Bueno, en realidad, el rojo es energía (+5 V), el negro es tierra, el blanco y el verde son para transmisión de datos.

Además de las que se muestran en la figura, también existen otras opciones de conectores USB, por ejemplo, mini-USB y otras, bueno, eso ya lo sabes 😉

Probablemente valga la pena tocar un poco el método de transferencia de datos, pero no profundizaremos en esto) Entonces, al transferir datos a través del bus USB se utiliza el principio de codificación NRZI(sin retorno a cero con inversión). Para transmitir un "1" lógico, es necesario aumentar el nivel de la línea D+ por encima de +2,8 V, y el nivel de la línea D- debe reducirse por debajo de +0,3 V. Para transmitir cero, la situación es la opuesta - ( D- > 2,8 V) y (D+< 0.3 В).

También deberíamos discutir la fuente de alimentación de los dispositivos. USB. Y aquí también son posibles varias opciones.

En primer lugar, los dispositivos se pueden alimentar desde el bus y luego se pueden dividir en dos clases:

  • Bajo consumo
  • Alto Voltaje

La diferencia aquí es que baja potencia Los dispositivos no pueden consumir más de 100 mA. Un dispositivo Alto Voltaje no debería consumir más 100 mA sólo en la etapa de configuración. Una vez configurado por el host, su consumo puede ser de hasta 500 mA.

Además, los dispositivos pueden tener su propia fuente de alimentación. En este caso, podrán recibir hasta 100 mA del autobús, y toma todo lo demás de tu fuente)

Esto parece ser todo, pasemos lentamente a la estructura de los datos transmitidos. Aún así, esto es de gran interés para nosotros 😉

Toda la información se transmite. personal, que se envían a intervalos regulares. A su vez, cada cuadro consta de actas. Esto podría quedar más claro de esta manera:

Cada cuadro incluye un paquete. , luego siguen las transacciones para diferentes puntos finales y todo termina con un paquete EOF (Fin del cuadro). Para ser absolutamente preciso, entonces EOF- esto no es exactamente un paquete en el sentido habitual de la palabra - es un intervalo de tiempo durante el cual el intercambio de datos está prohibido.

Cada transacción tiene la siguiente forma:

El primer paquete (llamado Simbólico bolsa de plastico) contiene información sobre la dirección del dispositivo USB, así como el número del endpoint al que está destinada esta transacción. Además, este paquete almacena información sobre el tipo de transacción (discutiremos qué tipos hay, pero un poco más adelante =)). – todo está claro para él, estos son los datos transmitidos por el host o el punto final (según el tipo de transacción). Último paquete – Estado– diseñado para comprobar el éxito de la adquisición de datos.

La palabra “paquete” se ha escuchado muchas veces en relación a la interfaz. USB, así que es hora de descubrir qué es. Empecemos con el paquete. Simbólico:

Paquetes Simbólico hay tres tipos:

  • Configuración

Por eso dije esto...) Dependiendo del tipo de paquete, el valor del campo PID V Simbólico El paquete puede tomar los siguientes valores:

  • Tipo de paquete de token OUT – PID=0001
  • Tipo de paquete de token IN – PID = 1001
  • CONFIGURACIÓN del tipo de paquete de tokens – PID = 1101
  • Tipo de paquete de token SOF – PID=0101

Pasemos al siguiente componente del paquete. Simbólico- campos DIRECCIÓN Y Punto final- contienen Dirección del dispositivo USB y número de punto final, que está destinado transacción.

que campo CDN– esto es una suma de verificación, esto está claro.

Hay otro punto importante aquí. PID Incluye 4 bits, pero durante la transmisión se complementan con 4 bits más, que se obtienen invirtiendo los primeros 4 bits.

Entonces, el siguiente en la fila - es decir, un paquete de datos.

Todo aquí es básicamente igual que en el paquete. Simbólico, sólo que en lugar de la dirección del dispositivo y el número del punto final, aquí tenemos los datos transmitidos.

Nos queda por considerar Estado paquetes y paquetes SOF:

Aquí PID Sólo puede tomar dos valores:

  • El paquete se recibió correctamente. PID=0010
  • Error al recibir el paquete - PID = 1010

Y finalmente paquetes:

Aquí vemos un nuevo campo. Marco– contiene el número de la trama transmitida.

Veamos como ejemplo el proceso de escritura de datos en un dispositivo USB. Es decir, consideremos un ejemplo de la estructura de un cuadro de grabación.

El marco, como recordarás, consta de transacciones y tiene la siguiente forma:

¿Cuáles son todas estas transacciones? ¡Vamos a resolverlo ahora! Transacción CONFIGURACIÓN:

Transacción AFUERA:

De manera similar, al leer datos desde un dispositivo USB, el marco se ve así:

Transacción CONFIGURACIÓN Ya hemos visto, veamos la transacción. EN 😉

Como puede ver, todas estas transacciones tienen la misma estructura que comentamos anteriormente)

En general, creo que es suficiente por hoy 😉 Este es un artículo bastante largo, ¡espero que intentemos implementar la interfaz USB en la práctica en un futuro cercano!

Proporciona intercambio de datos entre el host y el dispositivo. A nivel de protocolo se resuelven tareas como garantizar la confiabilidad y confiabilidad de la transmisión y el control de flujo. Todo el tráfico en el bus USB se transfiere a través de transacciones; en cada transacción, el intercambio solo es posible entre el host y el dispositivo direccionado (su punto final).

Todas las transacciones (intercambios) con dispositivos USB constan de dos o tres paquetes; las secuencias típicas de paquetes en las transacciones se muestran en la Fig. 1. Cada transacción es programada e iniciada por el controlador del host, que envía un paquete de token de transacción. El token de transacción describe el tipo y la dirección de la transferencia, la dirección del dispositivo USB seleccionado y el número del punto final. El dispositivo direccionado por el marcador reconoce su dirección y se prepara para el intercambio. La fuente de datos identificada por el token transmite un paquete de datos. En este punto, se completan las transacciones relacionadas con transferencias isócronas; no hay acuse de recibo del paquete. Para otro tipo de transmisiones, existe un mecanismo de confirmación que asegura la entrega garantizada de los datos. Los formatos de paquete se muestran en la Fig. 2, los tipos de paquetes están en la tabla. En todos los campos de paquetes, excepto en el campo CRC, los datos se transmiten primero con el bit menos significativo (el bit menos significativo se muestra a la izquierda en los diagramas de tiempos). El paquete comienza con la secuencia de sincronización y termina con el terminador: EOP. El tipo de paquete está determinado por el campo PID. El propósito de los campos restantes se explica a continuación. La longitud de los campos Sync y EOP se especifica para transmisiones en FS/LS; para transmisiones de alta velocidad, el campo Sync se extiende a intervalos de 32 bits y el EOP a 8 (en paquetes SOF, el campo EOP tiene una longitud de 40 bits). ).

Todos los paquetes recibidos se verifican en busca de errores, ya que los formatos de paquetes aceptados y ciertas convenciones lo permiten:

  • un paquete comienza con una secuencia de sincronización seguida de su PID (Identificador de paquete). Al identificador le sigue su copia inversa: Verificar. Una discrepancia entre dos copias se considera un signo de error;
  • El cuerpo del paquete (todos los campos del paquete, excluyendo PID y el atributo EOP) está protegido por un código CRC: 5 bits para paquetes marcadores, 16 bits para paquetes de datos. Un CRC que no coincide con el valor esperado se considera un error;
  • el paquete termina con una señal EOP especial; Si el paquete contiene un número de bytes no entero, se considera erróneo. Un EOP falso, incluso en un límite de bytes, no permitirá que se reciba el paquete debido a un error de CRC casi inevitable en esta situación;
  • Los datos del paquete se transmiten a la capa física (al bus) mediante relleno de bits (se inserta un cero después de seis bits uno), lo que evita la pérdida de sincronización de bits durante una señal monótona. Recibir más de seis bits seguidos se considera un error (en HS, una señal del final de la trama).

La detección de cualquiera de estos errores en un paquete hace que el receptor lo considere inválido. Ni el dispositivo ni el controlador host responden a los paquetes recibidos con un error. En la transmisión isócrona, los datos de un paquete no válido simplemente deben ignorarse (se pierden); Para otros tipos de transmisiones, se utilizan medios que garanticen una entrega confiable.

Para detectar la falla del par al responder a un paquete, cada dispositivo tiene un contador de tiempo de espera que deja de esperar una respuesta después de que haya transcurrido un tiempo. USB tiene un límite en el tiempo de ida y vuelta del bus: el tiempo desde el final del EOP del paquete generado hasta que se recibe el comienzo del paquete de respuesta. Para el dispositivo final (y el controlador de host), se normaliza el retraso máximo de respuesta (tiempo de respuesta) desde el final del EOP visto hasta la introducción del comienzo del paquete. Para los concentradores, el retraso en la transmisión de paquetes está normalizado; para los cables, el retraso en la propagación de la señal está normalizado. El contador de tiempo de espera debe tener en cuenta el retraso máximo posible para una configuración de bus válida: hasta 5 hubs intermedios, hasta 5 metros cada cable. El valor de tiempo de espera permitido, expresado en intervalos de bits (bt), depende de la velocidad:

  • Para velocidades FS/LS, el retraso introducido por un segmento de cable es pequeño en comparación con el intervalo de bits (bt). En base a esto, USB 1.0 utiliza el siguiente modelo para calcular los retrasos permitidos. Se asigna un retraso permitido de 30 ns para cada segmento de cable y de 40 ns para el concentrador. Así, cinco concentradores intermedios con sus cables introducen un retraso de 700 ns durante una doble revolución, lo que corresponde a aproximadamente 8,5 bt en FS. Para un dispositivo FS, el retraso de respuesta no debe exceder los 6,5 bt (y teniendo en cuenta su cable, 7,5 bt). En base a esto, la especificación requiere que los transmisores en FS utilicen un contador de tiempo de espera de 16-18 bt;
  • a velocidad HS, el retraso en el segmento de cable es mucho mayor que el intervalo de bits, y en USB 2.0 el modelo de cálculo es ligeramente diferente. Aquí, se asignan 26 ns para cada segmento de cable y 4 ns más 36 bt para el concentrador. Por lo tanto, pasar dos veces por 6 segmentos de cable (2×6×26 = 312 ns ≈ 150 bt) y cinco concentradores (2×5×4 = 40 ns ≈ 19 bt más 2×5×36 = 360 bt) requiere hasta 529 por cierto. El retraso de respuesta del dispositivo es aceptable hasta 192 bt, y el retraso total teniendo en cuenta cables y concentradores será de hasta 721 bt. En base a esto, la especificación requiere que los transmisores en HS utilicen un contador de tiempo de espera de 736-816 bt.

El controlador de host tiene su propio contador de errores asociado con cada punto final de todos los dispositivos, que se restablece a cero cuando se programa cada transacción. Este contador cuenta todos los errores de protocolo (incluidos los errores de tiempo de espera) y, si la cantidad de errores excede el umbral (3), el canal con este punto final se detiene y se notifica a su propietario (controlador de dispositivo o USBD). Hasta que se supere el umbral, el host maneja los errores de transferencias no isócronas intentando reintentar las transacciones, sin notificar al software del cliente. Las transferencias isócronas no se repiten; el host informa de errores inmediatamente.

Los paquetes de protocolo de enlace se utilizan para reconocimiento, control de flujo y señalización de errores. De estos paquetes, el controlador del host solo puede enviar al dispositivo un paquete ACK, confirmando la recepción sin errores del paquete de datos. El dispositivo utiliza los siguientes paquetes de protocolo de enlace para responder al host:

ACK: confirmación (positiva) de la finalización exitosa de una transacción de salida o control;
NAK - confirmación negativa, es una señal de que el dispositivo no está listo para realizar esta transacción (no hay datos para transmitir al host, no hay espacio en el buffer para recepción, la operación de control no se ha completado). Esta es una respuesta normal que nadie conocerá excepto el controlador del host, que se ve obligado a repetir la transacción más tarde. En las transacciones de entrada, el dispositivo da una respuesta NAK en lugar de un paquete de datos si no están listos;
STALL es un mensaje de error grave que significa que sin la intervención de un software especial, trabajar con este punto final se vuelve imposible. Esta respuesta se comunica tanto al controlador USBD, que cancela transacciones adicionales con este punto, como al controlador del cliente, desde el cual se espera que la intervención del software desbloquee el punto. En las transacciones de control (Control), la respuesta STALL significa que la solicitud no se puede ejecutar; No es necesario desbloquear el punto.

El control del flujo de salida que se basa únicamente en la capacidad de responder con un NAK si el dispositivo no está listo es un uso muy ineficiente del ancho de banda del bus: se desperdicia un gran paquete de datos en el bus para garantizar que el dispositivo no esté listo. USB 2.0 evita este problema en transacciones Bulk-OUT y Control mediante el uso del protocolo Ping. El host puede sondear la preparación del dispositivo para recibir un tamaño máximo de paquete enviándole un token de sonda PING. El dispositivo puede responder a este token con un ACK (si está listo) o NAK (si no puede recibir el tamaño máximo de paquete). Una respuesta negativa obligará al host a intentarlo nuevamente más tarde, una respuesta positiva le permitirá realizar una transacción de salida. Ante una transacción de retiro después de una respuesta positiva a la prueba, las respuestas del dispositivo son más variadas:

  • ACK significa recepción exitosa y preparación para aceptar el siguiente paquete de tamaño completo;
  • NYET significa recepción exitosa pero no listo para el siguiente paquete;
  • NAK es una respuesta inesperada (contradice el éxito de la prueba), pero es posible si el dispositivo de repente deja de estar disponible temporalmente.

El dispositivo de alta velocidad en los descriptores de los puntos finales informa la posible intensidad de los envíos de NAK: el campo bInterval para los puntos finales Bulk y Control indica el número de microtramas por NAK (0 significa que el dispositivo nunca responderá con un NAK a una transacción de salida).

Las transferencias de matriz, interrupción y control garantizan una entrega de datos confiable. Después de recibir exitosamente el paquete, el receptor de datos envía un acuse de recibo: un paquete de acuse de recibo ACK. Si el receptor de datos detecta un error, el paquete se ignora y no se le envía ninguna respuesta. La fuente de datos considera que el siguiente paquete se ha transmitido con éxito cuando recibe un ACK del receptor. Si no llega la confirmación, en la siguiente transacción la fuente repite el envío del mismo paquete. Sin embargo, el paquete de confirmación puede perderse debido a interferencias; Para que en este caso el envío repetido del paquete por parte del receptor no se perciba como la siguiente porción de datos, los paquetes de datos se numeran. La numeración es módulo 2 (número de 1 bit): los paquetes se dividen en pares (con identificador DATA0) e impares (DATA1). Para cada punto final (excepto el isócrono), el host y el dispositivo tienen Toggle Bits, sus estados iniciales son consistentes de una forma u otra. Las transacciones IN y OUT transmiten y esperan paquetes de datos con identificadores DATA0 o DATA1, correspondientes al estado actual de estos bits. El receptor de datos conmuta su bit en caso de una recepción correcta de datos con el identificador esperado, la fuente de datos conmuta al recibir la confirmación. Si el receptor recibe un paquete sin errores con una ID inesperada, envía un ACK, pero ignora los datos del paquete porque el paquete es una retransmisión de datos que ya se han recibido.

Las transacciones para diferentes tipos de transferencias tienen diferencias de protocolo debido a la garantía o no garantía de rendimiento, tiempo de respuesta, confiabilidad de entrega y sincronización de entrada y salida. Dependiendo de estas características, las transacciones utilizan uno u otro de los mecanismos de protocolo descritos anteriormente. Tenga en cuenta que la detección de errores de transmisión funciona en todas las transacciones, por lo que los datos recibidos por error siempre se ignoran. Tanto el controlador del host (según el descriptor de punto final recibido previamente) como el dispositivo USB en el que se implementa este punto final “conocen” qué mecanismos de protocolo se utilizan en la transacción actual.

Las transacciones isócronas proporcionan tipos de cambio garantizados, pero no proporcionan una entrega confiable. Por esta razón, no hay reconocimientos en el protocolo, ya que la reproducción de paquetes hará que fallen los planes de entrega de datos. No existe un control de flujo basado en reconocimiento: el dispositivo debe mantener la tasa de tráfico declarada en el descriptor de punto final isócrono.

Las transacciones de salida isócronas constan de dos paquetes enviados por el controlador del host, un token de SALIDA y un paquete de datos de DATOS. En una transacción de entrada, el host envía un token IN, al que el dispositivo responde con un paquete de datos, posiblemente con una longitud de campo de datos de cero (si no hay datos listos). Cualquier otra respuesta del dispositivo (así como el "silencio") es considerada por el host como un error que conduce a la detención de este canal.

Con el intercambio isócrono, se controla la confiabilidad (descartando paquetes con errores) y la integridad de los datos (detectando la falta de un paquete). El control de integridad se basa en un estricto determinismo del tipo de cambio: según su descriptor, el punto espera una transacción con un período de 2bInterval-1 microframes. Para un punto final isócrono típico, solo es posible una transacción por microtrama, y ​​un error al recibir un paquete da como resultado que no se reciban datos en la microtrama en la que se esperaba. Por lo tanto, no se requiere la numeración de paquetes (conmutador de bits de conmutación). Los dispositivos de velocidad máxima y los controladores de host solo deben enviar paquetes del tipo DATA01. Para puntos finales isócronos de banda ancha (USB 2.0), se pueden transmitir hasta tres paquetes de datos en cada microtrama. Cualquiera de estos paquetes se puede perder y se requiere la numeración de paquetes dentro de la microtrama para detectar esta situación. Para esta numeración se han introducido dos nuevos tipos de paquetes de datos: DATA2 y MDATA. La variedad de tipos de paquetes, además de la numeración, también le permite informar a su interlocutor sobre sus planes para un microframe determinado. En las transacciones IN, el dispositivo indica mediante el identificador de paquete cuántos paquetes más pretende emitir en la misma microtrama, lo que permite al host evitar intentos de entrada innecesarios. Entonces, si un paquete se transmite en una microtrama, será DATA0; si son dos, la secuencia será DATOS1, DATOS0; tres: DATOS2, DATOS1, DATOS0. Las transacciones OUT utilizan un paquete MDATA (Más datos) para generar el último paquete en una microtrama, y ​​el último identificador de paquete indica cuántos paquetes se transmitieron antes. Entonces, con una transacción de salida se utiliza el paquete DATA0, con dos, la secuencia MDATA, DATA1, con tres, MDATA, MDATA, DATA2. Todas las transacciones, excepto la última en una microtrama, deben utilizar el tamaño máximo de paquete. Tenga en cuenta que otras transacciones pueden intercalarse entre transacciones de banda ancha en una microtrama.

Historia del surgimiento y desarrollo de los estándares Universal Serial Bus (USB)

    Antes de la primera implementación del bus USB, la configuración estándar de una computadora personal incluía un puerto paralelo, generalmente para conectar una impresora (puerto LPT), dos puertos de comunicación en serie (puertos COM), generalmente para conectar un mouse y un módem, y un puerto para un joystick (puerto GAME). Esta configuración era bastante aceptable en los primeros días de las computadoras personales y durante muchos años fue el estándar práctico para los fabricantes de equipos. Sin embargo, el progreso no se detuvo, la gama y la funcionalidad de los dispositivos externos se mejoraron constantemente, lo que finalmente llevó a la necesidad de revisar la configuración estándar, lo que limitó la capacidad de conectar dispositivos periféricos adicionales, que cada día eran más numerosos.

    Los intentos de aumentar la cantidad de puertos de E/S estándar no pudieron conducir a una solución fundamental al problema, y ​​surgió la necesidad de desarrollar un nuevo estándar que proporcionara una conexión simple, rápida y conveniente de una gran cantidad de dispositivos periféricos de varios propósitos a cualquier computadora de configuración estándar, lo que finalmente condujo a la llegada del Bus Serie Universal Bus serie universal (USB)

    Primera especificación de interfaz serie USB (bus serie universal), llamado USB 1.0, apareció en 1996, una versión mejorada basada en él, USB 1.1-V 1998 El ancho de banda de los buses USB 1.0 y USB 1.1 - hasta 12 Mbit/s (en realidad hasta 1 megabyte por segundo) era suficiente para dispositivos periféricos de baja velocidad, como un módem analógico o un ratón de ordenador, pero insuficiente para dispositivos con Altas tasas de transferencia de datos, que fue la principal desventaja de esta especificación. Sin embargo, la práctica ha demostrado que el bus serie universal es una solución muy exitosa, adoptada por casi todos los fabricantes de equipos informáticos como principal dirección de desarrollo de los periféricos informáticos.

EN 2000 hay una nueva especificación - USB 2.0, que ya ofrece velocidades de transferencia de datos de hasta 480 Mbit/s (en realidad, hasta 32 megabytes por segundo). La especificación suponía compatibilidad total con el estándar USB 1.X anterior y un rendimiento bastante aceptable para la mayoría de los dispositivos periféricos. Comienza un auge en la producción de dispositivos equipados con una interfaz USB. Las interfaces de entrada y salida "clásicas" fueron completamente suplantadas y se volvieron exóticas. Sin embargo, para algunos equipos periféricos de alta velocidad, incluso la exitosa especificación USB 2.0 siguió siendo un cuello de botella, lo que requirió un mayor desarrollo del estándar.

EN 2005 Se anunció la especificación para la implementación inalámbrica de USB: USB inalámbrico - WUSB, permitiéndole conectar dispositivos de forma inalámbrica a una distancia de hasta 3 metros con una velocidad máxima de transferencia de datos de 480 Mbit/s, y a una distancia de hasta 10 metros con una velocidad máxima de 110 Mbit/s. La especificación no se desarrolló rápidamente y no resolvió el problema de aumentar la velocidad real de transferencia de datos.

EN 2006 se anunció la especificación USB-OTG (USB oh norte- tél- GRAMO o, gracias al cual fue posible la comunicación entre dos dispositivos USB sin un host USB separado. El papel del host en este caso lo desempeña uno de los dispositivos periféricos. Los teléfonos inteligentes, las cámaras digitales y otros dispositivos móviles deben actuar como host y dispositivo periférico. Por ejemplo, cuando una cámara se conecta vía USB a una computadora, es un dispositivo periférico, y cuando se conecta una impresora, es un host. Soporte de especificaciones USB-OTG Poco a poco se convirtió en el estándar para dispositivos móviles.

En 2008 Ha aparecido la especificación final del nuevo estándar de bus serie universal: USB 3.0. Al igual que con las versiones anteriores de la implementación del bus, se garantiza la compatibilidad eléctrica y funcional con los estándares anteriores. La velocidad de transferencia de datos para USB 3.0 se ha multiplicado por 10, hasta 5 Gbps. Se agregaron 4 núcleos adicionales al cable de interfaz y sus contactos se colocaron por separado de los 4 contactos de los estándares anteriores, en una fila de contactos adicional. Además de la mayor velocidad de transferencia de datos, el bus USB también se caracteriza por una mayor intensidad de corriente en el circuito de alimentación en comparación con los estándares anteriores. La velocidad máxima de transferencia de datos a través del bus USB 3.0 se ha vuelto aceptable para casi cualquier equipo informático periférico producido en masa.

EN 2013 Se adoptó la siguiente especificación de interfaz: USB 3.1, cuya velocidad de transferencia de datos puede alcanzar los 10 Gbit/s. Además, ha aparecido un conector USB compacto de 24 pines. Tipo C, que es simétrico, permitiendo introducir el cable por ambos lados.

Con el lanzamiento del estándar USB 3.1, el USB Implementers Forum (USB-IF) anunció que los conectores USB 3.0 con velocidades de hasta 5 Gbps (SuperSpeed) ahora se clasificarán como USB 3.1 Gen 1, y los nuevos conectores USB 3.1 con velocidades a 10 Gbps s (SuperSpeed ​​​​USB 10Gbps), como USB 3.1 Gen 2. El estándar USB 3.1 es compatible con versiones anteriores de USB 3.0 y USB 2.0.

EN 2017 año, el USB Implementers Forum (USB-IF) publicó una especificación USB 3.2. La velocidad máxima de transferencia es de 10 Gbit/s. Sin embargo, USB 3.2 ofrece la posibilidad de agregar dos conexiones ( Operación de doble carril), lo que le permite aumentar el rendimiento teórico a 20 Gbit/s. La implementación de esta característica se hace opcional, es decir, su soporte a nivel de hardware dependerá del fabricante específico y de la necesidad técnica, que difiere, por ejemplo, para una impresora y un disco duro portátil. La posibilidad de implementar este modo se proporciona solo cuando se utiliza USB tipo C.

www.usb.org- Documentación de especificación USB para desarrolladores en inglés.

Cabe señalar que existía y todavía existe una alternativa al bus USB. Incluso antes de su introducción, Apple desarrolló una especificación de bus serie. alambre de fuego(otro nombre - iEnlace), que en 1995 fue estandarizado por el Instituto Americano de Ingenieros Eléctricos y Electrónicos (IEEE) con el número 1394. IEEE 1394 Puede funcionar en tres modos: con velocidades de transferencia de datos de hasta 100, 200 y 400 Mbit/s. Sin embargo, debido al alto costo y la implementación más compleja que USB, este tipo de bus serie de alta velocidad no se ha generalizado y está siendo reemplazado gradualmente por USB 2.0 - USB 3.2.

Principios generales de funcionamiento de los dispositivos periféricos Universal Serial Bus (USB)

    La interfaz USB resultó ser una solución tan exitosa que estaba equipada con casi todas las clases de dispositivos periféricos, desde un teléfono móvil hasta una cámara web o un disco duro portátil. Los dispositivos más extendidos (por ahora) son los que soportan USB 2.0. Sin embargo, USB 3.0 – 3.1 tiene más demanda en dispositivos de alta velocidad, donde se convierte en el principal, reemplazando gradualmente al USB 2.0.

    Los dispositivos periféricos con soporte USB, cuando se conectan a una computadora, son reconocidos automáticamente por el sistema (en particular, el software del controlador y el ancho de banda del bus) y están listos para funcionar sin intervención del usuario. Los dispositivos con bajo consumo de energía (hasta 500 mA) pueden no tener fuente de alimentación propia y se alimentan directamente desde el bus USB.

    El uso de USB elimina la necesidad de quitar la carcasa de la computadora para instalar periféricos adicionales y elimina la necesidad de realizar configuraciones complejas al instalarlos.

    USB elimina el problema de limitar la cantidad de dispositivos conectados. Cuando se usa USB, hasta 127 dispositivos pueden funcionar simultáneamente con una computadora.

    USB permite la conexión en caliente. Esto no requiere apagar primero la computadora, luego conectar el dispositivo, reiniciarla y configurar los dispositivos periféricos instalados. Para desconectar un dispositivo periférico, no es necesario seguir el procedimiento inverso descrito anteriormente.

En pocas palabras, USB le permite aprovechar virtualmente todos los beneficios de la tecnología moderna plug and play. Los dispositivos diseñados para USB 1.x pueden funcionar con controladores USB 2.0. y USB 3.0

Cuando se conecta un dispositivo periférico, se genera una interrupción de hardware y el controlador HCD recibe el control ( Controlador del controlador de host) Controlador USB ( Controlador de host USB - UHC), que actualmente está integrado en todos los chipsets de placas base fabricados. Sondea el dispositivo y recibe información de identificación del mismo, en función de la cual el control se transfiere al conductor que realiza el mantenimiento de este tipo de dispositivo. El controlador UHC tiene un concentrador raíz (Hub), que proporciona conexión al bus del dispositivo USB.

Concentrador (concentrador USB).

Los puntos de conexión se llaman puertos. Se puede conectar otro concentrador al puerto como dispositivo. Cada hub tiene un puerto de salida ( puerto aguas arriba), conectándolo al controlador principal y a los puertos descendentes ( puerto aguas abajo) para conectar dispositivos periféricos. Los concentradores pueden detectar, conectarse y desconectarse en cada puerto de enlace descendente y proporcionar distribución de energía a los dispositivos de enlace descendente. Cada uno de los puertos de enlace descendente se puede habilitar y configurar individualmente a velocidad máxima o baja. El hub consta de dos bloques: el controlador del hub y el repetidor del hub. Un repetidor es un conmutador controlado por protocolo entre un puerto de enlace ascendente y puertos de enlace descendente. El concentrador también contiene hardware para admitir el restablecimiento y pausa/reanudación de la conexión. El controlador proporciona registros de interfaz que permiten la transferencia de datos hacia y desde el controlador principal. Los comandos de control y estado del concentrador definidos permiten que el procesador host configure el concentrador y monitoree y administre sus puertos.


Los concentradores externos pueden tener su propia fuente de alimentación o alimentarse desde el bus USB.

Cables y conectores USB

Los conectores tipo A se utilizan para conectarse a una computadora o concentrador. Los conectores tipo B se utilizan para conectarse a dispositivos periféricos.

Todos los conectores USB que se pueden conectar entre sí están diseñados para funcionar juntos.

Todos los pines del conector USB 2.0 son eléctricamente compatibles con los pines correspondientes del conector USB 3.0. Al mismo tiempo, el conector USB 3.0 tiene contactos adicionales que no tienen correspondencia en el conector USB 2.0 y, por lo tanto, al conectar conectores de diferentes versiones, no se utilizarán los contactos “extra”, asegurando el normal funcionamiento del conexión versión 2.0. Todos los conectores y enchufes entre USB 3.0 Tipo A y USB 2.0 Tipo A están diseñados para funcionar juntos. El conector USB 3.0 tipo B es ligeramente más grande de lo que se necesitaría para un conector USB 2.0 tipo B y versiones anteriores. Al mismo tiempo, es posible conectar este tipo de enchufe a estas tomas. En consecuencia, para conectar un dispositivo periférico con un conector USB 3.0 tipo B a una computadora, puede usar ambos tipos de cables, pero para un dispositivo con un conector USB 2.0 tipo B, solo un cable USB 2.0. Los enchufes eSATAp, denominados eSATA/USB Combo, es decir, que tienen la posibilidad de conectarles un enchufe USB, tienen la posibilidad de conectar enchufes USB Tipo A: USB 2.0 y USB 3.0, pero en modo de velocidad USB 2.0.

Los conectores USB tipo C proporcionan conexiones tanto para periféricos como para computadoras, reemplazando los diversos conectores y cables tipo A y tipo B de estándares USB anteriores y brindando opciones de expansión futuras. El conector de doble cara de 24 pines es bastante compacto y tiene un tamaño similar al de los conectores micro-B del estándar USB 2.0. Las dimensiones del conector son 8,4 mm por 2,6 mm. El conector proporciona 4 pares de contactos para alimentación y tierra, dos pares diferenciales D+/D- para transmisión de datos a velocidades inferiores a SuperSpeed ​​(en cables tipo C solo se conecta uno de los pares), cuatro pares diferenciales para transmisión de señales SuperSpeed ​​​​de alta velocidad, dos contactos auxiliares (banda lateral), dos pines de configuración para determinar la orientación del cable, un canal de datos de configuración dedicado (codificación BMC - código de marca bifásica) y un pin de alimentación de +5 V para cables activos.

Contactos del conector y disposición del cable USB tipo C

Tipo C: enchufe y toma

Estafa. Nombre Descripción Estafa. Nombre Descripción
A1 Tierra Toma de tierra B12 Tierra Toma de tierra
A2 SSTXp1 Dif. par N° 1 SuperSpeed, transmisión, positivo B11 SSRXp1 Dif. par No. 2 SuperSpeed, recepción, positivo
A3 SSTXn1 Dif. par No. 1 SuperSpeed, transmisión, negativo B10 SSRXn1 Dif. par nº 2 SuperSpeed, recepción, negativo
A4 V autobús Nutrición B9 V autobús Nutrición
A5 CC1 Canal de configuración B8 SBU2 Banda lateral N° 2 (SBU)
A6 dp1 Dif. par no SuperSpeed, posición 1, positivo B7 Dn2 Dif. par no SuperSpeed, posición 2, negativo
A7 Dn1 Dif. par no SuperSpeed, posición 1, negativo B6 dp2 Dif. par no SuperSpeed, posición 2, positivo
A8 SBU1 Banda lateral N° 1 (SBU) B5 CC2 Canal de configuración
A9 V autobús Nutrición B4 V autobús Nutrición
A10 SSRXn2 Dif. par No. 4 SuperSpeed, transmisión, negativo B3 SSTXn2 Dif. par nº 3 SuperSpeed, recepción, negativo
A11 SSRXp2 Dif. par N° 4 SuperSpeed, transmisión, positivo B2 SSTXp2 Dif. par No. 3 SuperSpeed, recepción, positivo
A12 Tierra Toma de tierra B1 Tierra Toma de tierra
  1. Par diferencial sin blindaje, se puede utilizar para implementar USB de baja velocidad (1.0), velocidad completa (1.0), alta velocidad (2.0): hasta 480 Mbps
  2. El cable implementa solo uno de los pares diferenciales que no son SuperSpeed. Este contacto no se utiliza en el enchufe.
El propósito de los conductores en el cable USB 3.1 Tipo-C
Conector nº1 del cable Tipo C Cable Tipo C Conector nº 2 del cable Tipo C
Contacto Nombre Color de la funda del conductor Nombre Descripción Contacto Nombre
Trenza Pantalla Trenza de cable Pantalla Trenza de cable exterior Trenza Pantalla
A1, B1, A12, B12 Tierra estañado GND_PWRrt1
GND_PWRrt2
Tierra común> A1, B1, A12, B12 Tierra
A4, B4, A9, B9 V autobús Rojo PWR_VBUS 1
PWR_VBUS 2
Fuente de alimentación V-BUS A4, B4, A9, B9 V autobús
B5 CONECTOR V Amarillo
CONECTOR PWR_V Alimentación V CONN B5 CONECTOR V
A5 CC Azul CC Canal de configuración A5 CC
A6 dp1 Blanco UTP_Dp Par diferencial no blindado, positivo A6 dp1
A7 Dn1 Verde UTP_Dn Par diferencial no apantallado, negativo A7 Dn1
A8 SBU1 Rojo SBU_A Banda de datos A B8 SBU2
B8 SBU2 Negro SBU_B Banda de datos B A8 SBU1
A2 SSTXp1 Amarillo * SDPp1 Par diferencial blindado #1, positivo B11 SSRXp1
A3 SSTXn1 Marrón * SDPN1 Par diferencial blindado #1, negativo B10 SSRXn1
B11 SSRXp1 Verde * SDPp2 Par diferencial blindado #2, positivo A2 SSTXp1
B10 SSRXn1 Naranja * SDPn2 Par diferencial blindado #2, negativo A3 SSTXn1
B2 SSTXp2 Blanco * SDPp3 Par diferencial blindado #3, positivo A11 SSRXp2
B3 SSTXn2 Negro * SDPn3 Par diferencial blindado #3, negativo A10 SSRXn2
A11 SSRXp2 Rojo * SDPp4 Par diferencial blindado #4, positivo B2 SSTXp2
A10 SSRXn2 Azul * SDPn4 Par diferencial blindado #4, negativo B3 SSTXn2
* Los colores del revestimiento de los conductores no están especificados en la norma.

Para conectar dispositivos antiguos a computadoras equipadas con un conector USB tipo C, será necesario un cable o adaptador que tenga un enchufe o conector tipo A o tipo B en un extremo y un enchufe USB tipo C en el otro extremo. El estándar no permite adaptadores con conector USB tipo C, ya que su uso podría crear “muchas combinaciones de cables incorrectas y potencialmente peligrosas”.

Los cables USB 3.1 con dos enchufes tipo C en los extremos deben cumplir plenamente con la especificación: contener todos los conductores necesarios, deben estar activos, incluir un chip de identificación electrónica que enumere identificadores de funciones según la configuración del canal y mensajes definidos por el proveedor (VDM). de la especificación USB Power Delivery 2.0. Los dispositivos con conector USB tipo C pueden admitir opcionalmente rieles de alimentación con una corriente de 1,5 o 3 amperios con un voltaje de 5 voltios además de la fuente de alimentación principal. Las fuentes de alimentación deben anunciar la capacidad de entregar corrientes aumentadas a través del canal de configuración, o ser totalmente compatibles con la especificación USB Power Delivery a través del pin de configuración (codificación BMC) o señales más antiguas codificadas como BFSK a través del pin VBUS. Los cables USB 2.0 que no son compatibles con el bus SuperSpeed ​​no pueden contener un chip de identificación electrónica a menos que puedan transportar 5 amperios de corriente.

La versión 1.0 de la especificación del conector USB Type-C fue publicada por el USB Developers Forum en agosto de 2014. Fue desarrollado casi al mismo tiempo que la especificación USB 3.1.

El uso de un conector USB tipo C no significa necesariamente que el dispositivo implemente el estándar USB 3.1 Gen1/Gen2 de alta velocidad o el protocolo USB Power Delivery.

    El Universal Serial Bus es la interfaz informática para dispositivos periféricos más extendida y probablemente la de mayor éxito en toda la historia del desarrollo de los equipos informáticos, como lo demuestra la gran cantidad de dispositivos USB, algunos de los cuales pueden parecer algo

A finales de 2008. Como era de esperar, el nuevo estándar ha aumentado el rendimiento, aunque el aumento no es tan significativo como el aumento de 40 veces en la velocidad al pasar de USB 1.1 a USB 2.0. En cualquier caso, un aumento de 10 veces en el rendimiento es bienvenido. USB 3.0 apoya Velocidad máxima de transferencia de 5 Gbit/s. El rendimiento es casi el doble que el estándar Serial ATA moderno (3 Gbit/s, teniendo en cuenta la transferencia de información redundante).

Logotipo USB 3.0

Todo entusiasta puede confirmar que la interfaz USB 2.0 es el principal cuello de botella de los ordenadores y portátiles modernos, ya que su rendimiento “neto” máximo oscila entre 30 y 35 MB/s. Pero los discos duros modernos de 3,5” para PC de sobremesa ya tienen velocidades de transferencia superiores a 100 MB/s (también están apareciendo modelos de 2,5” para portátiles que se acercan a este nivel). Las unidades de estado sólido de alta velocidad han superado con éxito el umbral de 200 MB/s. Y 5 Gbit/s (o 5120 Mbit/s) corresponden a 640 MB/s.

No creemos que los discos duros se acerquen a los 600 MB/s en el futuro previsible, pero la próxima generación de SSD podría superar esa cifra en tan sólo unos años. El aumento del rendimiento se vuelve cada vez más importante a medida que aumenta la cantidad de información y, en consecuencia, aumenta el tiempo necesario para realizar copias de seguridad. Cuanto más rápido funcione el almacenamiento, más corto será el tiempo de copia de seguridad y más fácil será crear "ventanas" en el programa de copia de seguridad.

Tabla comparativa de velocidades USB 1.0 – 3.0

Las cámaras de vídeo digitales actuales pueden grabar y almacenar gigabytes de datos de vídeo. La proporción de cámaras de vídeo HD está aumentando y requieren un almacenamiento mayor y más rápido para grabar grandes cantidades de datos. Si utiliza USB 2.0, transferir varias decenas de gigabytes de datos de vídeo a una computadora para editarlos requerirá un tiempo considerable. USB Implementers Forum cree que el ancho de banda seguirá siendo fundamentalmente importante y USB 3.0 será suficiente para todos los dispositivos de consumo durante los próximos cinco años.

Codificación de 8/10 bits

Para garantizar una transferencia de datos fiable Interfaz USB 3.0 utiliza codificación de 8/10 bits, que nos resulta familiar, por ejemplo, de Serial ATA. Se transmite un byte (8 bits) utilizando una codificación de 10 bits, lo que mejora la confiabilidad de la transmisión a expensas del rendimiento. Por lo tanto, la transición de bits a bytes se realiza con una proporción de 10:1 en lugar de 8:1.

Comparación de ancho de banda USB 1.x – 3.0 y competidores

Modos de ahorro de energía

Ciertamente, objetivo principal interfaz USB 3.0 es aumentar el ancho de banda disponible, sin embargo, la nueva norma efectivamente optimiza el consumo de energía. La interfaz USB 2.0 sondea constantemente la disponibilidad del dispositivo, lo que consume energía. Por el contrario, USB 3.0 tiene cuatro estados de conexión, denominados U0-U3. El estado de conexión U0 corresponde a la transferencia de datos activa y U3 pone el dispositivo en "suspensión".

Si la conexión está inactiva, en el estado U1 se desactivará la capacidad de recibir y transmitir datos. State U2 va un paso más allá al desactivar el reloj interno. En consecuencia, los dispositivos conectados pueden pasar al estado U1 inmediatamente después de que se complete la transferencia de datos, lo que se espera que proporcione importantes ventajas en el consumo de energía en comparación con USB 2.0.

Mayor corriente

Además de los diferentes estados de consumo de energía, el estándar USB 3.0 es diferente desde USB 2.0 y corriente soportada más alta. Si USB 2.0 proporcionaba un umbral de corriente de 500 mA, en el caso del nuevo estándar la limitación se cambió a 900 mA. La corriente de inicio de conexión se ha aumentado de 100 mA para USB 2.0 a 150 mA para USB 3.0. Ambos parámetros son bastante importantes para los discos duros portátiles, que normalmente requieren corrientes ligeramente más altas. Anteriormente, el problema se podía resolver usando un enchufe USB adicional, obteniendo energía de dos puertos, pero usando solo uno para la transferencia de datos, aunque esto violaba las especificaciones USB 2.0.

Nuevos cables, conectores, codificación de colores.

El estándar USB 3.0 es compatible con versiones anteriores de USB 2.0, es decir, los enchufes parecen ser los mismos que los enchufes tipo A normales. Los pines USB 2.0 permanecen en el mismo lugar, pero ahora hay cinco pines nuevos ubicados en lo profundo del conector. Esto significa que debe insertar el conector USB 3.0 completamente en un puerto USB 3.0 para garantizar el funcionamiento del USB 3.0, lo que requiere clavijas adicionales. De lo contrario, obtendrás velocidad USB 2.0. USB Implementers Forum recomienda que los fabricantes utilicen el código de colores Pantone 300C en el interior del conector.

La situación fue similar para el conector USB tipo B, aunque las diferencias son visualmente más notorias. Un conector USB 3.0 se puede identificar mediante cinco pines adicionales.

USB 3.0 no utiliza fibra óptica, porque es demasiado caro para el mercado masivo. Por lo tanto, tenemos el viejo cable de cobre. Sin embargo, ahora tendrá nueve cables en lugar de cuatro. La transmisión de datos se realiza a través de cuatro de los cinco cables adicionales en modo diferencial (SDP – Par Diferencial Blindado). Un par de cables es responsable de recibir información y el otro de transmitir. El principio de funcionamiento es similar al Serial ATA, y los dispositivos reciben todo el ancho de banda en ambas direcciones. El quinto cable es "tierra".