Partilhar via


Descritores USB padrão

Um dispositivo USB fornece informações sobre si mesmo em estruturas de dados chamadas descritores USB. Esta seção fornece informações sobre dispositivos, configurações, interface e descritores de ponto final e maneiras de recuperá-los de um dispositivo USB.

Descritores USB mapeados para o layout do dispositivo

O software host obtém descritores de um dispositivo conectado enviando várias solicitações de controle padrão para o ponto de extremidade padrão (Obter solicitações de descritor, consulte a seção 9.4.3 da especificação USB). Essas solicitações especificam o tipo de descritor a ser recuperado. Em resposta a tais solicitações, o dispositivo envia descritores que incluem informações sobre o dispositivo, suas configurações, interfaces e os pontos finais relacionados. Os descritores do dispositivo contêm informações sobre todo o dispositivo. Os descritores de configuração contêm informações sobre cada configuração de dispositivo. Os descritores de cadeia de caracteres contêm cadeias de texto Unicode.

Cada dispositivo USB expõe um descritor de dispositivo que indica as informações de classe do dispositivo, identificadores de fornecedor e produto e número de configurações. Cada configuração expõe seu descritor de configuração que indica o número de interfaces e características de energia. Cada interface expõe um descritor de interface para cada uma de suas configurações alternativas que contém informações sobre a classe e o número de pontos de extremidade. Cada ponto de extremidade dentro de cada interface expõe descritores de ponto de extremidade que indicam o tipo de ponto de extremidade e o tamanho máximo do pacote.

Por exemplo, vamos analisar o esquema do dispositivo da placa OSR FX2 (ver o esquema do dispositivo USB). No nível do dispositivo, o dispositivo expõe um descritor de dispositivo e um descritor de ponto de extremidade para o ponto de extremidade padrão. No nível de configuração, o dispositivo expõe um descritor de configuração para a Configuração 0. No nível da interface, ele expõe um descritor de interface para a Configuração Alternativa 0. No nível do ponto final, ele expõe três descritores de ponto final.

Diagrama de classes do layout do descritor do dispositivo USB.

Descritor de dispositivo USB

Cada dispositivo USB (Universal Serial Bus) deve ser capaz de fornecer um único descritor de dispositivo que contenha informações relevantes sobre o dispositivo. O Windows usa essas informações para derivar vários conjuntos de informações. Por exemplo, os campos idVendor e idProduct especificam identificadores de fornecedor e produto, respectivamente. O Windows usa esses valores de campo para construir uma ID de hardware para o dispositivo. Para visualizar o ID de hardware de um dispositivo específico, abra o Gestor de Dispositivos e veja as propriedades do dispositivo. Na guia Detalhes , o valor da propriedade Ids de Hardware indica a ID de hardware ("USB\xxx") gerada pelo Windows. O campo bcdUSB indica a versão da especificação USB à qual o dispositivo está em conformidade. Por exemplo, 0x0200 indica que o dispositivo foi concebido de acordo com a especificação USB 2.0. O valor bcdDevice indica o número de revisão definido pelo dispositivo. A pilha de drivers USB usa bcdDevice, juntamente com idVendor e idProduct, para gerar hardware e IDs compatíveis para o dispositivo. Você pode exibir esses identificadores no Gerenciador de dispositivos. O descritor do dispositivo também indica o número total de configurações suportadas pelo dispositivo.

O host obtém o descritor do dispositivo através de uma transferência de controle. A Microsoft fornece interfaces de programação para obter o descritor.

Se você está escrevendo um... Ligar...
Aplicativo UWP que usa Windows.Devices.Usb UsbDevice.DeviceDescritor
Aplicativo de área de trabalho Win32 que usa funções WinUSB WinUsb_GetDescriptor
Driver de cliente baseado em UMDF IWDFUsbTargetDevice::RetrieveDescriptor
Driver de cliente baseado em KMDF WdfUsbTargetDeviceGetDeviceDescriptor
Driver de cliente baseado em WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_DESCRIPTOR_REQUEST

Descritor de configuração USB

Uma configuração USB contém uma série de interfaces. Cada interface consiste em uma ou mais configurações alternativas, e cada configuração alternativa é composta por um conjunto de pontos finais (consulte o layout do dispositivo USB). Um descritor de configuração descreve toda a configuração incluindo suas interfaces, configurações alternativas e seus pontos de extremidade. Cada uma dessas entidades também é descrita em seu formato de descritor. Um descritor de configuração também pode incluir descritores personalizados que são definidos pelo fabricante do dispositivo.

Portanto, apenas a parte inicial de um descritor de configuração é fixa, 9 bytes. O resto é variável, dependendo do número de interfaces, das suas configurações alternativas e dos endpoints suportados pelo dispositivo. Neste conjunto de documentação, os 9 bytes iniciais são referidos como o descritor de configuração. Os dois primeiros bytes do descritor indicam o comprimento total.

A tabela a seguir mostra o descritor de configuração para o dispositivo de webcam USB:

Campo Valor
wTotalLength 0x02CA
bNumInterfaces 0x02
bConfigurationValue 0x01
iConfiguração 0x00
bmAttributes 0x80 (alimentado por barramento)
Potência máxima 0xFA (500 mA)

O campo bConfigurationValue indica o número para a configuração definida no firmware do dispositivo. Uma configuração USB também indica determinadas características de energia. O bmAttributes contém uma máscara de bits que indica se a configuração suporta a funcionalidade de ativação remota e se o dispositivo é alimentado por barramento ou autoalimentado. O campo MaxPower especifica a potência máxima (em unidades de miliamperes) que o dispositivo pode extrair do host, quando o dispositivo é alimentado por barramento. O descritor de configuração também indica o número total de interfaces (bNumInterfaces) que o dispositivo suporta.

Se você está escrevendo um... Ligar...
Aplicativo UWP que usa Windows.Devices.Usb UsbDevice.ConfigurationDescriptor para obter a parte de comprimento fixo.
UsbConfiguration.Descriptors para obter todo o conjunto de configurações.
Aplicativo de área de trabalho Win32 que usa funções WinUSB WinUsb_GetDescriptor
Driver de cliente baseado em UMDF IWDFUsbTargetDevice::RetrieveDescriptor
Driver de cliente baseado em KMDF WdfUsbTargetDeviceRetrieveConfigDescriptor
Driver de cliente baseado em WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST

Descritor de interface USB

Um descritor de interface contém informações sobre uma configuração alternativa de uma interface USB.

A tabela a seguir mostra o descritor de interface para a configuração alternativa 0 da interface 0 para o dispositivo da webcam:

Campo Valor
bNúmero da interface 0x00
bConfiguração alternativa 0x00
bNumEndpoints 0x01
bInterfaceClass 0x0E
bInterfaceSubClass 0x02
bInterfaceProtocol 0x00
iInterface 0x02
0x0409 "Microsoft LifeCam VX-5000"
0x0409 "Microsoft LifeCam VX-5000"

No exemplo anterior, observe os valores dos campos bInterfaceNumber e bAlternateSetting . Esses campos contêm valores de índice que o host usa para ativar a interface e uma de suas configurações alternativas. Para ativação, um aplicativo ou um driver especifica o valor de índice na chamada de função. Com base nessas informações, a pilha de drivers USB cria uma solicitação de controle padrão (SET INTERFACE) e a envia para o dispositivo. Observe o campo bInterfaceClass . O descritor de interface ou o descritor para qualquer uma de suas configurações alternativas especifica um código de classe, subclasse e protocolo. O valor de 0x0E indica que a interface é para a classe de dispositivo de vídeo. Observe também o campo iInterface . Esse valor indica que existem dois descritores de cadeia de caracteres anexados ao descritor de interface. Os descritores de cadeia de caracteres contêm descrições Unicode que são usadas durante a enumeração de dispositivos para identificar a funcionalidade.

Se você está escrevendo um... Ligar...
Aplicativo UWP que usa Windows.Devices.Usb UsbInterfaceSetting.Descriptors para obter um descritor específico para uma configuração alternativa específica.
UsbInterface.Descriptors para obter descritores para todas as configurações de uma interface.
Aplicativo de área de trabalho Win32 que usa funções WinUSB WinUsb_GetDescriptor
Driver de cliente baseado em UMDF IWDFUsbInterface::GetInterfaceDescriptor
Driver de cliente baseado em KMDF WdfUsbInterfaceGetDescriptor
Driver de cliente baseado em WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST e, em seguida, analise cada descritor de interface. Para obter mais informações, consulte Como selecionar uma configuração para um dispositivo USB.

Descritor de ponto final USB

Cada ponto de extremidade, em uma interface, descreve um único fluxo de entrada ou saída para o dispositivo. Um dispositivo que suporta fluxos para diferentes tipos de funções tem várias interfaces. Um dispositivo que suporta vários fluxos que pertencem a uma função pode suportar vários pontos finais em uma única interface.

Todos os tipos de pontos de extremidade (exceto o ponto de extremidade padrão) devem fornecer descritores de ponto de extremidade para que o host possa obter informações sobre o ponto de extremidade. Um descritor de ponto de extremidade inclui informações, como endereço, tipo, direção e a quantidade de dados que o ponto de extremidade pode manipular. As transferências de dados para o ponto de extremidade são baseadas nessas informações.

A tabela a seguir mostra um descritor de ponto de extremidade para o dispositivo de webcam:

Campo Valor
bEndereço do ponto final 0x82 EM
bmAttributes 0x01
wMaxPacketSize 0x0080 (128)
bIntervalo 0x01

O campo bEndpointAddress especifica o endereço de ponto de extremidade exclusivo que contém o número do ponto de extremidade (Bits 3..0) e a direção do ponto de extremidade (Bit 7). Ao ler esses valores no exemplo anterior, podemos determinar que o descritor descreve um ponto de extremidade IN cujo número de ponto de extremidade é 2. O atributo bmAttributes indica que o tipo de ponto final é isócrono. O wMaxPacketSizefield indica o número máximo de bytes que o ponto de extremidade pode enviar ou receber em uma única transação. Os bits 12..11 indicam o número total de transações que podem ser enviadas por microframe. O bInterval indica a frequência com que o ponto de extremidade pode enviar ou receber dados.

Se você está escrevendo um... Chamada
Aplicativo UWP que usa Windows.Devices.Usb UsbEndpointDescritor
Aplicativo de área de trabalho Win32 que usa funções WinUSB WinUsb_GetDescriptor
Driver de cliente baseado em UMDF WDFUsbTargetPipe::GetInformation
Driver de cliente baseado em KMDF WdfUsbTargetPipeGetInformation
Driver de cliente baseado em WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST e, em seguida, analise cada descritor de ponto final. Para obter mais informações, consulte Como selecionar uma configuração para um dispositivo USB.