Compartir a través de


Descriptores USB estándar

Un dispositivo USB proporciona información sobre sí misma en estructuras de datos denominadas descriptores USB. En esta sección se proporciona información sobre los descriptores de dispositivo, configuración, interfaz y punto de conexión y formas de recuperarlos de un dispositivo USB.

Descriptores USB asignados al diseño del dispositivo

El software host obtiene descriptores de un dispositivo conectado mediante el envío de varias solicitudes de control estándar al punto de conexión predeterminado (Obtener solicitudes de descriptor, consulte la sección 9.4.3 de la especificación USB). Esas solicitudes especifican el tipo de descriptor que se va a recuperar. En respuesta a estas solicitudes, el dispositivo envía descriptores que incluyen información sobre el dispositivo, sus configuraciones, interfaces y los puntos de conexión relacionados. Los descriptores de dispositivo contienen información sobre todo el dispositivo. Los descriptores de configuración contienen información sobre cada configuración de dispositivo. Los descriptores de cadena contienen cadenas de texto Unicode.

Cada dispositivo USB expone un descriptor de dispositivo que indica la información de clase del dispositivo, los identificadores de proveedor y producto y el número de configuraciones. Cada configuración expone su descriptor de configuración que indica el número de interfaces y características de energía. Cada interfaz expone un descriptor de interfaz para cada uno de sus valores alternativos que contiene información sobre la clase y el número de puntos de conexión. Cada punto de conexión de cada interfaz expone descriptores de punto de conexión que indican el tipo de punto de conexión y el tamaño máximo del paquete.

Por ejemplo, vamos a considerar el diseño del dispositivo de placa OSR FX2 (consulte Diseño del dispositivo USB). En el nivel de dispositivo, el dispositivo expone un descriptor de dispositivo y un descriptor de punto de conexión para el punto de conexión predeterminado. En el nivel de configuración, el dispositivo expone un descriptor de configuración para La configuración 0. En el nivel de interfaz, expone un descriptor de interfaz para la configuración alternativa 0. En el nivel de punto de conexión, expone tres descriptores de punto de conexión.

Diagrama de clases del diseño del descriptor de dispositivo USB.

Descriptor de dispositivo USB

Cada dispositivo de bus serie universal (USB) debe ser capaz de proporcionar un único descriptor de dispositivo que contenga información relevante sobre el dispositivo. Windows usa esa información para derivar varios conjuntos de información. Por ejemplo, los campos idVendor e idProduct especifican identificadores de proveedor y producto, respectivamente. Windows usa esos valores de campo para construir un identificador de hardware para el dispositivo. Para ver el identificador de hardware de un dispositivo determinado, abra Administrador de dispositivos y vea las propiedades del dispositivo. En la pestaña Detalles , el valor de la propiedad Ids de hardware indica el identificador de hardware ("USB\XXX") generado por Windows. El campo bcdUSB indica la versión de la especificación USB a la que se ajusta el dispositivo. Por ejemplo, 0x0200 indica que el dispositivo está diseñado según la especificación USB 2.0. El valor bcdDevice indica el número de revisión definido por el dispositivo. La pila de controladores USB usa bcdDevice, junto con idVendor e idProduct, para generar identificadores de hardware y compatibles para el dispositivo. Puede ver esos identificadores en Administrador de dispositivos. El descriptor de dispositivo también indica el número total de configuraciones que admite el dispositivo.

El host obtiene el descriptor de dispositivo a través de una transferencia de control. Microsoft proporciona interfaces de programación para obtener el descriptor.

Si está escribiendo un... Llamar...
Aplicación para UWP que usa Windows.Devices.Usb UsbDevice.DeviceDescriptor
Aplicación de escritorio Win32 que usa funciones de WinUSB WinUsb_GetDescriptor
Controlador de cliente basado en UMDF IWDFUsbTargetDevice::RetrieveDescriptor
Controlador cliente basado en KMDF WdfUsbTargetDeviceGetDeviceDeviceDescriptor
Controlador de cliente basado en WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_DESCRIPTOR_REQUEST

Descriptor de configuración USB

Una configuración USB contiene una serie de interfaces. Cada interfaz consta de una o varias configuraciones alternativas, y cada configuración alternativa se compone de un conjunto de puntos de conexión (consulte Diseño del dispositivo USB). Un descriptor de configuración describe toda la configuración, entre las que se incluyen sus interfaces, opciones alternativas y sus puntos de conexión. Cada una de esas entidades también se describe en su formato descriptor. Un descriptor de configuración también puede incluir descriptores personalizados definidos por el fabricante del dispositivo.

Por lo tanto, solo la parte inicial de un descriptor de configuración es fija, 9 bytes. El resto es variable en función del número de interfaces y su configuración alternativa, y los puntos de conexión admitidos por el dispositivo. En este conjunto de documentación, los 9 bytes iniciales se conocen como descriptor de configuración. Los dos primeros bytes del descriptor indican la longitud total.

En la tabla siguiente se muestra el descriptor de configuración para el dispositivo cámara web USB:

Campo Valor
wTotalLength 0x02CA
bNumInterfaces 0x02
bConfigurationValue 0x01
iConfiguration 0x00
bmAttributes 0x80 (con tecnología de bus)
MaxPower 0xFA (500 mA)

El campo bConfigurationValue indica el número de la configuración definida en el firmware del dispositivo. Una configuración USB también indica ciertas características de energía. BmAttributes contiene una máscara de bits que indica si la configuración admite la característica de reactivación remota y si el dispositivo está alimentado por bus o autopropulsado. El campo MaxPower especifica la potencia máxima (en unidades de miliamp) que el dispositivo puede extraer del host, cuando el dispositivo está alimentado por bus. El descriptor de configuración también indica el número total de interfaces (bNumInterfaces) que admite el dispositivo.

Si está escribiendo un... Llamar...
Aplicación para UWP que usa Windows.Devices.Usb UsbDevice.ConfigurationDescriptor para obtener la parte de longitud fija.
UsbConfiguration.Descriptors para obtener todo el conjunto de configuración.
Aplicación de escritorio Win32 que usa funciones de WinUSB WinUsb_GetDescriptor
Controlador de cliente basado en UMDF IWDFUsbTargetDevice::RetrieveDescriptor
Controlador cliente basado en KMDF WdfUsbTargetDeviceRetrieveConfigDescriptor
Controlador de cliente basado en WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST

Descriptor de interfaz USB

Un descriptor de interfaz contiene información sobre una configuración alternativa de una interfaz USB.

En la tabla siguiente se muestra el descriptor de interfaz para configuración alternativa 0 de interfaz 0 para el dispositivo webcam:

Campo Valor
bInterfaceNumber 0x00
bAlternateSetting 0x00
bNumEndpoints 0x01
bInterfaceClass 0x0E
bInterfaceSubClass 0x02
bInterfaceProtocol 0x00
iInterface 0x02
0x0409 "Microsoft LifeCam VX-5000"
0x0409 "Microsoft LifeCam VX-5000"

En el ejemplo anterior, observe los valores de campo bInterfaceNumber y bAlternateSetting . Estos campos contienen valores de índice que el host usa para activar la interfaz y una de sus opciones alternativas. Para la activación, una aplicación o un controlador especifica el valor de índice en la llamada de función. En función de esa información, la pila del controlador USB compila una solicitud de control estándar (SET INTERFACE) y la envía al dispositivo. Anote el campo bInterfaceClass . El descriptor de interfaz o el descriptor de cualquiera de sus valores alternativos especifica un código de clase, una subclase y un protocolo. El valor de 0x0E indica que la interfaz es para la clase de dispositivo de vídeo. Además, observe el campo iInterface . Ese valor indica que hay dos descriptores de cadena anexados al descriptor de interfaz. Los descriptores de cadena contienen descripciones Unicode que se usan durante la enumeración del dispositivo para identificar la funcionalidad.

Si está escribiendo un... Llamar...
Aplicación para UWP que usa Windows.Devices.Usb UsbInterfaceSetting.Descriptors para obtener un descriptor determinado para una configuración alternativa determinada.
UsbInterface.Descriptors para obtener descriptores para toda la configuración de una interfaz.
Aplicación de escritorio Win32 que usa funciones de WinUSB WinUsb_GetDescriptor
Controlador de cliente basado en UMDF IWDFUsbInterface::GetInterfaceDescriptor
Controlador de cliente basado en KMDF WdfUsbInterfaceGetDescriptor
Controlador de cliente basado en WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST y, a continuación, analizar para cada descriptor de interfaz. Para obtener más información, consulte Cómo seleccionar una configuración para un dispositivo USB.

Descriptor de punto de conexión USB

Cada punto de conexión, en una interfaz, describe una única secuencia de entrada o salida para el dispositivo. Un dispositivo que admite secuencias para diferentes tipos de funciones tiene varias interfaces. Un dispositivo que admite varias secuencias que pertenecen a una función puede admitir varios puntos de conexión en una sola interfaz.

Todos los tipos de puntos de conexión (excepto el punto de conexión predeterminado) deben proporcionar descriptores de punto de conexión para que el host pueda obtener información sobre el punto de conexión. Un descriptor de punto de conexión incluye información, como su dirección, tipo, dirección y la cantidad de datos que puede controlar el punto de conexión. Las transferencias de datos al punto de conexión se basan en esa información.

En la tabla siguiente se muestra un descriptor de punto de conexión para el dispositivo webcam:

Campo Valor
bEndpointAddress 0x82 IN
bmAttributes 0x01
wMaxPacketSize 0x0080 (128)
bInterval 0x01

El campo bEndpointAddress especifica la dirección del punto de conexión único que contiene el número de punto de conexión (Bits 3..0) y la dirección del punto de conexión (Bit 7). Al leer esos valores en el ejemplo anterior, podemos determinar que el descriptor describe un punto de conexión IN cuyo número de punto de conexión es 2. El atributo bmAttributes indica que el tipo de punto de conexión es isócrono. wMaxPacketSizefield indica el número máximo de bytes que el punto de conexión puede enviar o recibir en una sola transacción. Los bits 12..11 indican el número total de transacciones que se pueden enviar por microframe. bInterval indica la frecuencia con la que el punto de conexión puede enviar o recibir datos.

Si está escribiendo un... Llamar...
Aplicación para UWP que usa Windows.Devices.Usb UsbEndpointDescriptor
Aplicación de escritorio Win32 que usa funciones de WinUSB WinUsb_GetDescriptor
Controlador de cliente basado en UMDF WDFUsbTargetPipe::GetInformation
Controlador de cliente basado en KMDF WdfUsbTargetPipeGetInformation
Controlador de cliente basado en WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST y, a continuación, analice para cada descriptor de punto de conexión. Para obtener más información, consulte Cómo seleccionar una configuración para un dispositivo USB.