Para entender el funcionamiento del USB, es necesario estudiar la especificación de este bus. Los fabricantes involucrados en la norma crearon un documento que constituye la referencia. Aunque en estos momentos se está creando la versión 3.0 del bus, en el presente capítulo se va a tratar la versión 2.0 ya que es la más rápida y es la que posee la familia de PICs 18Fxx5x.
Ya que la norma es muy extensa, aquí se han traducido las partes que se han creído más importantes para una comprensión fácil y rápida de este bus.
Uno de los motivos por los que el USB se haya extendido tan velozmente es que se ha creado mediante un convenio de grandes empresas del sector informático: Compac, Hewlett-Packard, Intel, Lucent, Microsoft; NEC y Philips. Adoptando las mejores características de los diferentes tipos de comunicación de cada empresa.
Motivación
Las motivaciones que han inspirado la creación del Universal Serial Bus ver. 1.0 son tres: conexión del PC al teléfono, facilidad de uso y expansión de entrada/salida.
Las motivaciones a mejorar la versión y crear así la 2.0 han sido: la evolución de los ordenadores y de su velocidad, la mejora de los periféricos, la demanda de las imágenes digitales y la necesidad de una mayor velocidad de transmisión de datos.
Las periódicas revisiones de la norma se realizan para que los desarrolladores no fabriquen unos periféricos con una interfaz obsoleta.
Vocabulario
El vocabulario aquí expuesto es una lista de términos informáticos muy utilizados en la comunicación por USB. No se incluyen todos los que aparecen en la norma, sino los que el autor ha creído oportunos por su dificultad o por no estar muy difundidos.
Paced Locked Loop (PLL): Circuito que detecta la fase para poner el oscilador en fase con una frecuencia actual.
Pipe: Una unión abstracta entre el Endpoint y el software del host.
Endpoint o Device Endpoint: La porción direccionable de un dispositivo USB que es la fuente o el lugar de llegada de la comunicación entre el host y el dispositivo.
Dirección del Endpoint: Combinación del número del Endpoint y del sentido en un dispositivo USB. Cada dirección del Endpoint soporta transferencias de datos en una dirección.
Sentido del Endpoint: Es el sentido de los datos transferidos por el USB. Puede ser IN (entrada) u OUT (salida). IN se refiere a la transferencia del host y OUT a la transferencia desde el host.
Número del Endpoint: Es un valor de 4bits de 0h a Fh incluidos, asociado a un Endpoint de un dispositivo.
Endpoint de control: Una pareja de Device Endpoint con el mismo número de Endpoint.
Dirección del dispositivo: Es un valor de 7bits que representa la dirección del dispositivo del USB. La dirección del dispositivo tiene el valor por defecto (00H) cuando el dispositivo USB se alimenta por primera vez o se resetea. El software del sistema del USB asigna una única dirección del dispositivo.
Handshake Packet: Un paquete que reconoce o rechaza una condición específica.
ACK: Trama de reconocimiento positivo.
NAK: Trama de reconocimiento negativo.
Message Pipe: Un pipe bidireccional que transfiere datos usando una norma respuesta/dato/estado. Los datos tienen una estructura impuesta que permite respuestas correctas a la identificación y comunicación.
MSb: Bit más significativo.
MSB: Byte más significativo.
LSb: Bit menos significativo.
LSB: Byte menos significativo.
Protocolo: Conjunto específico de reglas, procedimientos o conversaciones relacionadas con el formato y el tiempo de transmisión de datos entre dos dispositivos.
Sample: Unidad más pequeña con la que puede operar un Endpoint.
Sample Rate (Fs): Número de samples por segundo, expresado en hercios (Hz).
Start-Of-Frame (SOF): Primera transacción de cada frame. Un SOF permite al Endpoint identificar el principio del frame y sincronizar el reloj interno del Endpoint con el host.
Frame: Tiempo base de 1ms establecido en los buses de baja/media velocidad (low/full speed).
Paquete Token: Tipo de paquete que identifica que transmisión se realiza en el bus.
Clase: La clase indica el tipo de dispositivo USB.
Paquete ID (PID): Un campo de un paquete USB que indica el tipo de paquete, y el formato del paquete y el tipo de error de detección aplicado.
Descriptor: Los dispositivos dan a conocer sus atributos por medio de los descriptores. Un descriptor es una estructura de datos con un formato determinado. Cada descriptor empieza con un campo de un byte de ancho que contiene el número de bytes en el descriptor, seguido por otro campo de un byte de ancho que identifica el tipo de descriptor.
Campo de direccionamiento (ADDR): la utilidad del campo de direccionamiento es especificar la función, por esta dirección, que va a ser la fuente o el destino de este paquete, dependiendo del valor del token PID.
Hay un total de 128 direcciones especificadas en ADDR<6:0>.
El campo ADDR es único para los token IN, SETUP y OUT y para los token especiales PING y SPLIT.
Cada valor de ADDR define una única función.
En un reset o reinicio, la dirección por defecto es cero y la tiene que programar el host durante el proceso de enumeración. La dirección cero está reservada como dirección por defecto y no se puede asignar para otro uso.
LSb |
|
|
|
|
MSb |
Addr 0 |
Addr 1 |
Addr 2 |
Addr 3 |
Addr 4 |
Addr 5 |
Campo del Endpoint (ENDP): Los 4bits del campo del Endpoint permiten una mayor flexibilidad en el direccionamiento de funciones en las que s necesita más de un Endpoint.
Excepto el Endpoint 0, los números de los Endpoint son funciones específicas.
El campo del Endpoint se define en los tokens IN, SETUP y OUT y en el especial PING.
Todas las funciones tienen que soportar un pipe de control en el Endpoint 0.
Los dispositivos de baja velocidad soportan un máximo de tres pipes por función: un pipe de control con el Endpoint 0 y otras 2 adicionales (otras 2 de control, una de control y un Endpoint interrupción o dos Endpoint interrupción).
Las funciones de media y alta velocidad soportan un máximo de 16 Endpoints IN y OUT.
LSb |
|
|
MSb |
Endp 0 |
Endp 1 |
Endp 2 |
Endp 5 |
Historia
El USB se ha concebido como un estándar industrial de expansión para el PC, en particular en el ámbito de la telefonía y productos de consumo.
Los criterios para la definición de su arquitectura son:
-
facilidad de uso para la expansión de un periférico del ordenador.
-
bajo coste, pero soportando altas velocidades de transferencia (480Mb/s).
-
soporte total en tiempo real de voz, audio y video comprimido.
-
protocolo flexible que permite la transferencia en modo mixed síncrono (audio, video) o asíncrona (mensajes).
-
fácil integración en las nuevas tecnologías de periféricos.
-
compatibilidad con las configuraciones del PC.
-
estándares de interfaz para una difusión rápida del producto.
-
posibilidad de crear nuevas clases de periféricos con el fin de aumentar la capacidad del PC.
Utilización Prevista
En su versión de 1,5Mbits/s, el USB se sitúa en la zona de baja velocidad (low speed). Las aplicaciones son, entre otras, gestión del teclado, del ratón, de los periféricos de juegos… En general, de la clase HID (dispositivos de interacción con el humano).
Este tipo de periférico debe ser barato, conectable y desconectable en caliente (en funcionamiento) y fácil de utilizar. Asimismo, se podrán conectar varios dispositivos al mismo tiempo.
En su versión de 12Mbits/s, el USB se sitúa en la zona de “toda velocidad” (full speed). Las aplicaciones son, entre otras, ISDN (RDSI, teléfono digital), PBX (teléfono), audio…
Para este tipo de periférico, además de las características mencionadas anteriormente, tiene que ofrecer garantías sobre el tiempo de tránsito de la información y la banda de paso. El tipo de transmisión síncrona permite garantizar estos criterios.
Y, en su última versión, 480Mbits/s, el USB se sitúa en la zona de alta velocidad (high speed). Las aplicaciones son, video de calidad, imágenes, almacenamiento masivo…
Con este tipo de periférico se necesitan todas las características anteriores más una ancha banda de paso, para una alta velocidad.
Como conclusión de este apartado, se incluye una lista de las principales características del bus:
-
banda de paso desde algunos kilobits hasta centenas de megabits.
-
transferencia síncrona y asíncrona en el mismo bus.
-
varios tipos de periféricos en el mismo bus.
-
posibilidad de conectar hasta 127 periféricos.
-
tiempo de respuesta garantizado.
-
flexibilidad a nivel de la banda de paso.
-
fiabilidad, control de errores.
-
perfectamente integrado en el PC, plug and play (conectar y usar).
-
coste reducido.
-
posibilidad de expansión.
Arquitectura
Descripción Del Sistema USB
El USB es un sistema punto a punto: dado que el lugar de partida es el host (PC o hub), el destino es un periférico u otro hub. Sólo hay un host.
Los periféricos comparten la banda de paso del USB. El protocolo se basa en el llamado paso de testigo (token). El ordenador proporciona el testigo al periférico seleccionado y seguidamente, éste le devuelve el testigo en su respuesta.
Este bus permite la conexión y desconexión en caliente, sin apagar el equipo.
Arquitectura Del Bus
La figura muestra la topología del bus, que viene a estar representado por un árbol, en donde el PC sería la raíz y los periféricos las hojas.
Interfaz Física
Aspecto Eléctrico
A nivel eléctrico el cable USB transfiere la señal y la alimentación sobre cuatro hilos.
A nivel de señal, se trata de un par tranzado con una impedancia característica de 90Ω. La velocidad puede ser de 480Mbits/s, 12Mbits/s o 1,5Mbits/s. La sensibilidad del receptor debe ser, al menos, 200mV y debe poder admitir un buen factor de rechazo en modo común (CCMR, es la tensión diferencial entre la tensión común). El reloj se transmite en el flow de datos, la codificación es de tipo NRZI, existiendo un dispositivo que genera el bit e relleno (bit stuffing) que garantiza que la frecuencia del reloj permanezca constante. Cada paquete va precedido de un campo de sincronismo.
A nivel de alimentación, el cable proporciona la tensión nominal de 5V. Es necesario definir bien el diámetro del hilo con el fin de que no se produzca una caída de tensión demasiado importante en el cable. Una resistencia de terminación instalada en la línea de datos permite detectar el puerto conocer su configuración (1,5Mbits/s ó 12Mbits/s), si no lleva resistencia indica 480Mbits/s.
Existen dos tipos de tomas (A y B), con el fin de evitar la configuración en bucle. Se distinguen fácilmente: el tipo A es plano y rectangular, mientras que el tipo B es cuadrado. La base para el tipo A se encuentra en el PC o hub, existiendo en el periférico una base de tipo B. Los cables son de tipo AB.
En el conector, el punto de masa está algo adelantado con respecto a los puntos de señal, de este modo, cuando se enchufa, la masa siempre hace contacto antes.
Alimentación
La especificación abarca dos aspectos de consumo: distribución en función del consumo especificado por cada periférico USB y control de consumo integrado en la gestión global del PC.
Consumo
Cada sección puede proporcionar una determinada potencia máxima siendo el PC el encargado de suministrar la energía. Además, el periférico puede estar autoalimentado (self powered).
Por otro lado, el hub puede distribuir la corriente procedente del PC a los periféricos.
Control De Consumo
El ordenador controla el consumo, teniendo capacidad de poner en reposo (suspend) o en marcha a un periférico USB. En reposo, éste reduce su consumo (si puede), quedando la parte del USB siempre funcional. Esta gestión está orientada específicamente a los equipos portátiles.
Protocolo Del USB
Una transacción sobre el bus necesita al menos tres paquetes. Cada transacción comienza por el envío por parte del host de un paquete que indica el tipo, la dirección de la transacción, la dirección del USB y su punto terminal (Endpoint) . Este paquete recibe el nombre de token packet (paquete testigo).
A continuación, el transmisor envía su paquete de datos, o indica que no tiene paquetes que transmitir, por último, el destinatario envía un paquete indicando que ha recibido bien el paquete de datos.
Recibe el nombre de pipe el enlace virtual entre el host y un periférico USB, con su Endpoint (un periférico puede tener varios Endpoints).
Existen dos tipos de enlaces virtuales (pipe): stream y message. En el caso de stream, se trata de un flujo sin estructura; en el otro caso, si tiene una. Cada enlace está caracterizado por su banda de paso, su tipo de servicio, el número del Endpoint y el tamaño de los paquetes. Estos enlaces se definen durante la inicialización del USB. Siempre existe un enlace virtual 0 que permite tener acceso a la información de configuración del periférico USB (estado, control e información).
En el ordenador, el driver se encarga del encaminamiento de los paquetes sobre el bus.
Robustez
El sistema es fiable y robusto, garantizando la integridad de los datos gracias a las siguientes características:
-
señal diferencial, en donde la pantalla (blindaje) protege los hilos.
-
CRC (control) sobre la información de control y datos.
-
detección de conexión y desconexión del periférico
-
recuperación automática en cado de error, gestión del tiempo de recuperación (timeout).
-
gestión del flujo de datos, de los buffers y del modo síncrono.
-
construcción que le hace independiente de las funciones, de los datos y del control.
Detección De Errores
La detección de errores se basa en el control CRC, efectuado sobre los datos y sobre la información de control, de modo que un CRC incorrecto indica un error en el paquete. El CRC permite detectar el 100% de los errores, en caso de errores simples o dobles.
En caso de error, al tercer intento fallido de recuperación, la información de error se transfiere al nivel superior (aplicación).
Gestión De Errores
El protocolo puede controlar los errores por hardware o por software.
Las capas inferiores intentan tres veces la recuperación antes de informar a la capa superior del problema.
Configuración Del Sistema
Un periférico puede ser enchufado o desenchufado en cualquier momento.
La enumeración (búsqueda de los periféricos) no sólo se hace al arrancar, sino que está funcionando continuamente. Cuando se enchufa o retira un dispositivo, el hub detecta el cambio y avisa al host.
Cuando se enchufa un nuevo dispositivo, el host (vía hub) direcciona el periférico con una dirección por defecto. Mediante un paquete de control, le da su dirección. Si se trata de un hub, el procedimiento es el mismo para el propio hub, después para cada uno de los periféricos conectados al hub y declarados por él al host.
En cuanto a la descripción del hub, esta “multitoma” es un dispositivo activo, que incluye un microprocesador, la memoria y todas las interfaces necesarias para la gestión de los otros puertos (que vayan hacia un periférico USB o hacia otro hub).
Los hubs activos proporcionan la alimentación a partir de una fuente externa, mientras que los hubs pasivos proporcionan la alimentación a partir de la fuente procedente del USB raíz.
Tipos De Transferencia
El enlace virtual (pipe) puede ser de cuatro tipos:
-
Control: modo utilizado para realizar configuraciones: existe sobre el Endpoint 0.
-
Bulk: modo utilizado para la transmisión de datos voluminosos, pero con pocas restricciones a nivel de duración de la transmisión; por ejemplo, durante una impresión.
-
Interrupt: modo utilizado para transmisiones de pequeños paquetes rápidos, orientado a percepciones humanas (ratón, puntero…)
-
Isochronous o flujo en tiempo real: modo utilizado para la transferencia de audio o video. Es necesario negociar la banda de paso.
Un pipe sólo soporta uno de los tipos anteriores.
Tipo Control
Los datos de control sirven para configurar el periférico en el momento de conectarse al USB. Algunos drivers específicos pueden utilizar este enlace para transmitir su propia información de control. Este enlace no tiene pérdida de datos, puesto que los dispositivos de detección de recuperación de errores están activos a nivel USB.
Tipo Bulk
Este modo se utiliza para la transmisión de importantes cantidades de información. Como el tipo Control, este enlace no tiene pérdida de datos. La banda de paso otorgada a este tipo de transmisión depende de los demás periféricos, siendo la menos prioritaria.
Tipo Interrupt
Este tipo de transmisión garantiza la transferencia de pequeñas cantidades de datos. El tiempo de respuesta no puede ser inferior al valor especificado por la interfaz. El ratón o cualquier otro dispositivo apuntador es una aplicación típica de este modo de transmisión.
Tipo Isochronous
Este tipo de transmisión funciona en tiempo real. La banda de paso así como el retardo están garantizados. Es el modo de mayor prioridad.
La transmisión de la voz es un ejemplo de esta aplicación. Si esta no se transmite correctamente, pueden llegar a oírse parásitos (glitch) y la aplicación puede detectar ciertos errores de los llamados underruns.
Asignación De La Banda De Paso
La banda de paso se asigna en función de las pipes.
Los periféricos deben contar con memoria intermedia de datos (buffers) , tanto mayores cuanto más grande sea el ancho de banda requerido. El objetivo es garantizar que, a pesar de los buffers, el retardo de encaminamiento sea tan solo de unos cuantos milisegundos.
La asignación queda bloqueada, es decir, si una nueva asignación pudiera llegar a perturbar las asignaciones existentes, esta no será autorizada (bloqueada).
Cuando finaliza un pipe, la banda de paso puede asignarse a oro periférico.
USB Device
Los periféricos (devices) se clasifican en función de las operaciones que pueden realizar: class hub, para los periféricos de extensión; class text, para las interfaces de texto (impresoras)…
Características De Un Periférico
El Endpoint 0 proporciona esta información por medio de los descriptores. Se encuentran clasificadas en tres grupos:
-
Estándar: comunes a todos los periféricos (identificación del fabricante, clase del producto, consumo, descripción de los Endpoints.
-
Clase: específicas del tipo de periférico.
-
Fabricante: específicas del producto; el fabricante puede incluir la información que desee.
Formatos De Los Paquetes
En este apartado se profundiza en la descripción del protocolo.
Token
Un paquete token consiste en un PID, especificando el tipo de paquete IN, OUT o SETUP y los campos ADDR y ENDP.
El paquete token especial PING tiene los mismos campos que un token normal.
En las transacciones OUT y SETUP, los campos de dirección y de Endpoint solamente identifican el Endpoint que recibirá el paquete siguiente de datos. En las transacciones IN, estos campos sólo indican el Endpoint que transmitirá el paquete de datos. En las transacciones PING, estos campos indican el Endpoint que responderá con un paquete de protocolo de intercambio. El host es el único que puede emitir paquetes token.
Un PID IN define una transacción de datos de una función al host. Los PIDs OUT y SETUP definen una transacción de datos del host a la función. Un PID PING define un protocolo de intercambio de la función al host.
Los paquetes token tienen cinco bits CRC que cubren los campos dirección y Endpoint. El CRC no cubre el PID, su propósito es chequea el campo. Los paquetes token y SOF están delimitados por un EOP después de tras bytes de paquete de datos. Si un paquete se decodifica como otro token o SOF valido pero no termina con un EOP después de tres bytes, esto se tiene que considerar inválido y el receptor lo tiene que ignorar.
Token Especial: Transacción Split
El USB define un token especial para las transacciones Split. Es un paquete token de 4 bytes. Esta transacción split proporciona tipos de transferencia y envío de información adicionales. El token de transacciones Split se utiliza para que se soporte el intercambio de archivos entre el host comunicándose con el hub que opera a high-speed con dispositivos full-/low-speed en alguno de sus puertos. Hay dos tipos de split: una transacción split de inicio (start-split) (SSPLIT) y transacción split completa (complete-split) (CSPLIT). Un campo en el token especial SPLIT, define las siguientes secciones.
Transacciones Split
Una transacción Split high-speed se utiliza solamente entre el host y el hub cuando el hub tiene dispositivos low-/full-speed unidos. Las Split high-speed se utilizan para inicializar el intercambio low-/full-speed a través del hub y algún Endpoint del dispositivo low-/full-speed. Las Split permiten que el hub reciba el estado de transacción completa. Con esto puede que el host comience una transacción full-/low-speed a través de una high-speed sin tener que esperar a que procese/complete la de baja velocidad.
Una transacción high-speed tiene dos partes: una start-speed y otra complete-speed. Las transacciones Split sólo se definen para usarse entre el host y el hub. Ningún otro dispositivo high-speed o low-/full-speed puede usar este tipo de intercambio.
Los paquetes genéricos start-split se componen de dos paquetes en la fase token: el token especial SPLIT y el token full-/low-speed. Dependiendo de la dirección de transferencia de datos y de cómo está definido el protocolo de intercambio, después de la fase de token está, opcionalmente, un paquete de datos y otro de protocolo. La transacción start-split puede ser de 2, 3 ó 4 paquetes determinados por el tipo de transferencia específica y la dirección de los datos.
La transacción genérica complete-split se compone de: la fase token que tiene dos paquetes: el token especial SPLIT y el token full-/low-speed. El siguiente paquete es uno de datos o uno de protocolo dependiendo de la dirección y el tipo especificado de transacción. Las complete-split pueden ser de 2 ó 3 paquetes determinados por el tipo de transferencia específica y la dirección.
El resultado de una transacción Split se devuelve con una transacción complete-split. El host emite una start-split (indicado con 1) al hub que puede proceder con otra transacción high-speed. El start-split provoca que el hub mande un Token IN full-/low-speed algo después (indicado con 2). El dispositivo responde al Token IN (en el ejemplo con un paquete de datos) y el hub responde con un protocolo al hub. Finalmente, el host, algo después, envía un complete-split (indicado con 3) para recibir los datos enviados, por el dispositivo. Darse cuenta de que en el ejemplo, el hub proporciona un protocolo full-/low-speed (ACK en este caso) al Endpoint del dispositivo antes del complete-split y el complete-split no proporciona un protocolo high-speed al hub.
Una transacción OUT normal full-/low-speed es similar a “invertir” una start-split y complete-split.
Ejemplo de transferencia interrupción OUT: el host envía una transacción start-split consistente en un paquete token especial SSPLIT, un token OUT y un paquete de datos. El hub, algo después manda el token OUT y el paquete de datos al bus full-/low-speed. El dispositivo responde con un protocolo. Algo después, el host envía la transacción complete-split y el hub responde con los resultados (datos full-/low-speed o protocolo) que el dispositivo ha cedido.
Paquetes Start-Of-Frame (SOF)
El host envía los SOF con un ratio nominal cada 1,00ms±0,0005ms en un bus full-speed y 125μs±0,0625μs en uno high-speed. Los paquetes SOF consisten en un PID indicando el tipo de paquete seguido de un número de frame de 11bits.
El token SOF comprende la transacción token-only que distribuye un marcador SOF y acompaña el FrameNumber con intervalos de tiempo precisos al comienzo de cada frame. Todas las funciones high-speed y full-speed, incluyendo los hubs, reciben el paquete SOF. El token SOF no provoca la función recepción para generar un paquete de retorno, por tanto, un envío SOF a una función no tiene garantías.
El paquete SOF entrega dos trozos de información de tiempo. Una función informa que ha ocurrido un SOF cuando este detecta el PID SOF.
En el Apéndice A del archivo de la norma del USB2.0 hay más información sobre el orden de transferencia de paquetes en las transmisiones USB.
Estados Del USB
Los distintos pasos hasta que el dispositivo se pueda utilizar son:
Unido |
Alimentado |
Por Defecto |
Direccionado |
Configurado |
Reposo |
|
No |
- |
- |
- |
- |
- |
USB no unido |
Si |
No |
- |
- |
- |
- |
USB sin alimentación |
Si |
Si |
No |
- |
- |
- |
USB unido, con alimentación pero no reseteado |
Si |
Si |
Si |
No |
- |
- |
No tiene dirección, el dispositivo responde con la dirección por defecto |
Si |
Si |
Si |
Si |
No |
- |
Tiene una única dirección pero no se ha configurado |
Si |
Si |
Si |
Si |
Si |
No |
El host puede usar el dispositivo |
Si |
Si |
- |
- |
- |
Si |
Dispositivo al mínimo. Unido, alimentado y sin actividad en 3ms. Puede estar direccionado y configurado. Se ha puesto en reposo porque el host no ha mandado órdenes. |
Por Defecto
Después de alimentar el dispositivo, puede que no responda ante una transacción hasta que reciba un reset por el bus. Después del reset, el dispositivo tiene la dirección por defecto.
Cuando se completa el reset, el dispositivo funciona con su velocidad correcta. La elección de la velocidad para, low- y full-speed (baja y media velocidad), se determina con las resistencias de terminación.
Un dispositivo que permita operaciones a high-speed (alta velocidad), determina que puede operar a esta velocidad en el reset.
Un dispositivo que puede funcionar a high-speed se tiene que resetear correctamente a full-speed cuando se trabaja en un entorno full-speed. Después del reset, el dispositivo debe responder correctamente a la configuración del dispositivo y a las preguntas de los descriptores y devolver la información adecuada.
Direccionado
Todos los dispositivos USB utilizan la dirección por defecto cuando se alimentan inicialmente o después de un reset. A cada dispositivo le asigna una única dirección el host al unirlo o después de un reset. El dispositivo mantiene esta dirección cuando se pone en reposo.
Un dispositivo USB responde por la pipe por defecto cuando se le asigna una dirección o está en una por defecto.
Configuración
Antes de utilizar el dispositivo, se tiene que configurar. Desde el punto de vista del dispositivo, la configuración involucra la respuesta a un SetConfiguration() con un valor de configuración distinto de cero.
Al configurar o reconfigurar un dispositivo se logran todos los estados y valores de configuración asociados a los Endpoint en la interfaz.
Enumeración Del Bus
Cuando se une o se quita un dispositivo USB del bus, el host realiza un proceso conocido como enumeración del bus para identificar y controlar los cambios necesarios en el estado del dispositivo. Cuando se conecte un dispositivo USB a un puerto alimentado, transcurren las siguientes acciones:
-
El hub al que se a unido el dispositivo informa al host por medio de una respuesta del cambio de la pipe. En este punto, el dispositivo USB está en el estado “Alimentado” y el puerto al que se ha unido desactivado.
-
El host determina la naturaleza exacta preguntando al hub.
-
Ahora el host conoce el puerto al cual está conectado el dispositivo, el host espera 100ms para que se complete el proceso de inserción y para que la alimentación del dispositivo se vuelva estable. El host activa el puerto y manda un reset al mismo.
-
El hub realiza el proceso requerido para el reset en este puerto. Cuando la señal de reset se ha completado, el puerto se activa. El dispositivo USB está en el estado “por defecto” y no puede consumir más de 100mA del VBUS . Todos estos registros y estados se han reseteado y responden al estado “Por Defecto”.
-
El host asigna una dirección única al dispositivo USB, trasladando al dispositivo al estado “Direccionado”.
-
Antes de que el dispositivo tenga una única dirección, se accede a la pipe de control por defecto por la dirección por defecto. El host lee el descriptor del dispositivo para determinar cual es el máximo del tamaño de los datos útiles que utiliza el dispositivo en la pipe por defecto.
-
El host lee la información de configuración del dispositivo leyendo la configuración de 0 hasta n-1, donde n es el número de configuraciones. Este proceso puede tardar varios milisegundos.
-
Basándose en la información de configuración y cómo se debe usar el dispositivo USB, el host asigna un valor de configuración al dispositivo. El dispositivo está en el estado “Configurado” y todos los Endpoints de esta configuración están como se indica en sus características. El dispositivo USB puede que no tenga la energía que indica en sus características. Desde el punto de vista del dispositivo, está listo para usarse.
Si quieres más información entra aquí usb.org