Proyección ilustrada del modelo de red OSI en el bus serie universal.
Pila USB no muy útil
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.
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!
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;Y aquí hay otro:
Personal transmitido por transmisión de bits en serie utilizando el método NRZI.
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.
Aquí está uno de ellos.
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 :-)
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 etiquetasEl 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:
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:
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:
Por eso dije esto...) Dependiendo del tipo de paquete, el valor del campo PID V Simbólico El paquete puede tomar los siguientes valores:
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:
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:
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:
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:
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.
    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.
    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.
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.
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.
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 |
||
|
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.
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
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.
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.
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".