Um descritor contém informações como tipo de dispositivo, ID do fornecedor, versão USB compatível, número de configurações suportadas pelo dispositivo, número de endpoints, etc. O periférico USB deve responder com descritores quando solicitado pelo host. Durante a enumeração, o host usa transferência de controle para solicitar descritores ao dispositivo.
Tipos de descritores
Existem principalmente cinco tipos de descritores
• Descritores de dispositivos
• Descritores de configuração
• Descritores de Interface
• Descritores de endpoint
• Descritores de strings
Durante a enumeração, o host solicita os descritores de nível superior. À medida que a enumeração avança, os descritores de nível superior informam o host sobre os descritores de nível inferior (se houver). Os descritores contêm vários campos e a maioria deles usa prefixo para indicar o formato ou tipo de conteúdo. Os prefixos comuns são: b = byte (8 bits), c = palavra (16 bits), BCD = decimal codificado em binário, bm = bitmap (matriz de bits), eu = índice, eu ia = identificador.
Cada descritor contém uma série de campos e segue um formato comum. O primeiro byte especifica o comprimento do descritor enquanto o segundo byte indica o tipo de descritor.
bDescriçãoType – Este campo indica o tipo de descritor.
Descritores de dispositivos
O descritor do dispositivo fornece informações básicas sobre o dispositivo. Ele representa todo o dispositivo USB. É o primeiro descritor lido pelo host. O host recebe este descritor após enviar Get_Descriptor solicitar.
O descritor contém campos contendo informações específicas do dispositivo, como versão USB, classe do dispositivo, ID do produto, ID do fornecedor, número de configurações suportadas pelo dispositivo, etc. Confira a tabela abaixo para saber mais sobre os campos comuns incluídos nos descritores de dispositivos.
Descritores Device_qualifier
Os dispositivos USB que suportam os modos de velocidade total e alta devem ter um descritor device_qualifier. Quando o dispositivo USB muda de modo de velocidade, os valores em alguns campos são alterados no descritor do dispositivo. O descritor device_qualifier fornece informações apenas sobre os valores dos campos que são alterados quando o dispositivo alterna para um modo de velocidade alternativo. Este descritor contém os seguintes campos, dos quais os dois primeiros são comuns, enquanto outros são alterados especificamente para o dispositivo.
Descritores de configuração
Um dispositivo USB pode ter uma ou mais configurações. A maioria dos dispositivos possui apenas uma configuração. A configuração fornece informações relacionadas à fonte de energia, consumo de energia e número de interfaces.
O bNumConfigurações no descritor do dispositivo informa ao host sobre o número de configurações possíveis. O anfitrião usa Conjunto_Configuração solicitação para selecionar uma configuração e Obter_Configuração solicitação para ler a configuração atualmente selecionada.
O descritor de configuração contém os campos a seguir.
Descritores Other_speed_configuration
Este descritor é para dispositivos que suportam os modos de velocidade total e alta. Retorna a configuração do modo de velocidade atualmente não ativo. A estrutura é a mesma do descritor de configuração, exceto pelo valor do campo para bDescritor tipo, que é 0x07.
Descritores de interface
Uma configuração pode ter uma ou mais interfaces que podem ser consideradas recursos ou funções implementadas pelo dispositivo. O descritor de interface fornece informações relacionadas a recursos específicos do dispositivo, como classe, subclasse, protocolo e número de usos da interface de terminais.
O bNumInterfaces no descritor de configuração informa ao host sobre o número de interfaces possíveis. Depois de selecionar uma configuração, o host usa Conjunto_Interface solicitação para selecionar uma interface e Obter_Interface solicitação para ler a interface atualmente selecionada.
Descritores de endpoint
O Endpoint Descriptor descreve os endpoints associados a uma interface. Não há descritor para o endpoint zero padrão. O endpoint zero é o endpoint de controle e é configurado antes mesmo da solicitação de qualquer descritor. As informações contidas neste descritor são utilizadas para determinar a largura de banda exigida pelo barramento USB.
Este descritor inclui os seguintes campos –:
Descritores de string
Os descritores de string contêm textos legíveis por humanos. Eles geralmente são usados para fornecer informações. Outros descritores contêm valores de índice que apontam para strings contendo informações de fabricante, produto, número de série, configuração, interface. Outros descritores como Class e Vendor Specific podem conter índices para descritores de string
As Strings são codificadas no formato Unicode e vários idiomas são suportados. O host pode obter a lista de idiomas suportados usando Get_Descriptor solicitação com 0 em wIndex campo. O dispositivo retorna o descritor String contendo códigos para diferentes idiomas. Os primeiros 2 campos são obrigatórios e os outros campos contêm códigos de idioma.
Depois disso, todos os descritores de string subsequentes (além do índice 0) terão conteúdo de string e deverão estar em conformidade com o formato a seguir.

Outros descritores padrão
De acordo com as especificações USB 2.0, existem descritores adicionais para outros fins específicos. São os seguintes:
Descritor interface_association: Isso se aplica a dispositivos compostos que possuem mais de uma interface para uma única função ou recurso.
Descritor Interface_power: Foi proposto pela Microsoft em 1998, mas não foi implementado. O objetivo ao propor este descritor foi dar às interfaces a capacidade de gerenciar seu próprio consumo de energia individualmente.
Descritor OTG: Este descritor é necessário para dispositivos que suportam OTG Host Negotiation Protocol (HNP) ou Session Request Protocol.
Descritores de depuração: O descritor de depuração é usado por dispositivos de depuração para fins de depuração.
Na próxima parte da série USB, discutiremos as solicitações USB e os estágios de transferência de controle.