Descriptores USB y sus tipos (Parte 3/6)

Ahora que hemos analizado los detalles básicos del protocolo USB, que abarcan los tipos de paquetes y transferencias USB, el siguiente tema de la serie son los descriptores USB. En el contexto de la interfaz USB, los descriptores son bloques formateados de información a través de los cuales el dispositivo anfitrión aprende sobre el periférico. Ayuda con la identificación y configuración de dispositivos periféricos.

Un descriptor contiene información como el tipo de dispositivo, ID del proveedor, versión de USB compatible, cantidad de configuraciones admitidas por el dispositivo, cantidad de puntos finales, etc. El periférico USB debe responder con descriptores cuando lo solicite el host. Durante la enumeración, el host utiliza la transferencia de control para solicitar descriptores del dispositivo.

Tipos de descriptores

Existen principalmente cinco tipos de descriptores.

• Descriptores de dispositivos

• Descriptores de configuración

• Descriptores de interfaz

• Descriptores de puntos finales

• Descriptores de cadena

Durante la enumeración, el host solicita los descriptores de nivel superior. A medida que avanza la enumeración, los descriptores de nivel superior informan al host sobre los descriptores de nivel inferior (si los hay). Los descriptores contienen varios campos y la mayoría utiliza un prefijo para indicar el formato o tipo de contenido. Los prefijos comunes son: b = byte (8 bits), c = palabra (16 bits), BCD = decimal codificado en binario, bm = mapa de bits (matriz de bits), l = índice, id = identificador.

Cada descriptor contiene una serie de campos y sigue un formato común. El primer byte especifica la longitud del descriptor mientras que el segundo byte indica el tipo de descriptor.

Tipos de descritores

Longitud : este campo proporciona la longitud del descriptor en bytes.

bDescriptionType : este campo indica el tipo de descriptor.

tipo de descritor.

Descriptores de dispositivos

El descriptor del dispositivo proporciona información básica sobre el dispositivo. Representa todo el dispositivo USB. Es el primer descriptor leído por el anfitrión. El host recibe este descriptor después de enviar la solicitud Get_Descriptor .

El descriptor contiene campos que contienen información específica del dispositivo, como la versión de USB, la clase de dispositivo, la identificación del producto, la identificación del proveedor, la cantidad de configuraciones admitidas por el dispositivo, etc. Consulte la siguiente tabla para obtener más información sobre los campos comunes incluidos en los descriptores de dispositivos.

descritores de dispositivos

Descriptores de calificador de dispositivo

Los dispositivos USB que admiten modos de velocidad completa y alta deben tener un descriptor de calificador de dispositivo. Cuando el dispositivo USB cambia los modos de velocidad, los valores en algunos campos cambian en el descriptor del dispositivo. El descriptor device_qualifier proporciona información solo sobre los valores de los campos que cambian cuando el dispositivo cambia a un modo de velocidad alternativo. Este descriptor contiene los siguientes campos, de los cuales los dos primeros son comunes, mientras que otros se modifican específicamente para el dispositivo.

Descritores Device_qualifier

Descriptores de configuración

Un dispositivo USB puede tener una o más configuraciones. La mayoría de los dispositivos sólo tienen una configuración. La configuración proporciona información relacionada con la fuente de energía, el consumo de energía y la cantidad de interfaces.

bNumConfigurations en el descriptor del dispositivo informa al host sobre la cantidad de configuraciones posibles. El host utiliza la solicitud Set_Configuration para seleccionar una configuración y la solicitud Get_Configuration para leer la configuración seleccionada actualmente.

El descriptor de configuración contiene los siguientes campos.

Descritores de configuração

Otros descriptores de configuración_velocidad

Este descriptor es para dispositivos que admiten modos de velocidad completa y alta. Devuelve la configuración del modo de velocidad actualmente inactivo. La estructura es la misma que la del descriptor de configuración, excepto por el valor del campo para el tipo bDescriptor , que es 0x07.

Descriptores de interfaz

Una configuración puede tener una o más interfaces que pueden considerarse recursos o funciones implementadas por el dispositivo. El descriptor de interfaz proporciona información relacionada con características específicas del dispositivo, como clase, subclase, protocolo y número de usos de la interfaz del punto final.

bNumInterfaces en el descriptor de configuración le informa al host sobre la cantidad de interfaces posibles. Después de seleccionar una configuración, el host utiliza la solicitud Set_Interface para seleccionar una interfaz y la solicitud Get_Interface para leer la interfaz seleccionada actualmente.

Es posible activar varias interfaces al mismo tiempo para una configuración. Los dispositivos en los que hay múltiples interfaces activas se conocen como dispositivos compuestos.

Descritores de interface

Descriptores de punto final

El descriptor de punto final describe los puntos finales asociados con una interfaz. No hay ningún descriptor para el punto final cero predeterminado. El punto final cero es el punto final de control y se configura incluso antes de que se solicite cualquier descriptor. La información contenida en este descriptor se utiliza para determinar el ancho de banda requerido por el bus USB.

Este descriptor incluye los siguientes campos:

Descritores de endpoint

Descriptores de cadena

Los descriptores de cadena contienen texto legible por humanos. Generalmente se utilizan para proporcionar información. Otros descriptores contienen valores de índice que apuntan a cadenas que contienen información del fabricante, producto, número de serie, configuración e interfaz. Otros descriptores como Class y Vendor Specific pueden contener índices para descriptores de cadenas.

Las cadenas están codificadas en formato Unicode y se admiten varios idiomas. El anfitrión puede obtener la lista de idiomas admitidos mediante la solicitud Get_Descriptor con 0 en el campo wIndex . El dispositivo devuelve el descriptor de cadena que contiene códigos para diferentes idiomas. Los primeros 2 campos son obligatorios y los otros campos contienen códigos de idioma.

Descritores de string

Después de eso, todos los descriptores de cadena posteriores (más allá del índice 0) tendrán contenido de cadena y deberán ajustarse al siguiente formato.

Formato do descritor de string

Otros descriptores estándar

Según las especificaciones de USB 2.0, existen descriptores adicionales para otros fines específicos. Son los siguientes:

Descriptor de asociación_interfaz: esto se aplica a dispositivos compuestos que tienen más de una interfaz para una sola función o característica.

Descriptor interface_power: fue propuesto por Microsoft en 1998, pero no se implementó. El objetivo al proponer este descriptor era dar a las interfaces la capacidad de gestionar su propio consumo de energía de forma individual.

Descriptor OTG: este descriptor es necesario para dispositivos que admiten el Protocolo de negociación de host (HNP) OTG o el Protocolo de solicitud de sesión.

Descriptores de depuración: los dispositivos de depuración utilizan el descriptor de depuración con fines de depuración.

En la siguiente parte de la serie USB, analizaremos las solicitudes de USB y las etapas de transferencia de control.

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.