Partager via


Descripteurs USB standard

Un périphérique USB fournit des informations sur lui-même dans des structures de données appelées descripteurs USB. Cette section fournit des informations sur les descripteurs d’appareil, de configuration, d’interface et de point de terminaison et les moyens de les récupérer à partir d’un périphérique USB.

Descripteurs USB mappés à la disposition des appareils

Le logiciel hôte obtient des descripteurs à partir d’un appareil attaché en envoyant diverses demandes de contrôle standard au point de terminaison par défaut (Obtenir des demandes de descripteur, voir la section spécification USB 9.4.3). Ces demandes spécifient le type de descripteur à récupérer. En réponse à ces demandes, l’appareil envoie des descripteurs qui incluent des informations sur l’appareil, ses configurations, ses interfaces et les points de terminaison associés. Les descripteurs d’appareil contiennent des informations sur l’ensemble de l’appareil. Les descripteurs de configuration contiennent des informations sur chaque configuration d’appareil. Les descripteurs de chaîne contiennent des chaînes de texte Unicode.

Chaque périphérique USB expose un descripteur d’appareil qui indique les informations de classe de l’appareil, les identificateurs de fournisseur et de produit, ainsi que le nombre de configurations. Chaque configuration expose son descripteur de configuration qui indique le nombre d’interfaces et les caractéristiques de puissance. Chaque interface expose un descripteur d’interface pour chacun de ses autres paramètres qui contient des informations sur la classe et le nombre de points de terminaison. Chaque point de terminaison au sein de chaque interface expose des descripteurs de point de terminaison qui indiquent le type de point de terminaison et la taille maximale du paquet.

Par exemple, considérons la disposition des périphériques de carte OSR FX2 (voir Disposition des périphériques USB). Au niveau de l’appareil, l’appareil expose un descripteur d’appareil et un descripteur de point de terminaison pour le point de terminaison par défaut. Au niveau de la configuration, l’appareil expose un descripteur de configuration pour Configuration 0. Au niveau de l’interface, il expose un descripteur d’interface pour un autre paramètre 0. Au niveau du point de terminaison, il expose trois descripteurs de point de terminaison.

Diagramme de classes de la disposition du descripteur de périphérique USB.

Descripteur de périphérique USB

Chaque périphérique USB (Universal Serial Bus) doit être en mesure de fournir un descripteur d’appareil unique qui contient des informations pertinentes sur l’appareil. Windows utilise ces informations pour dériver différents ensembles d’informations. Par exemple, les champs idVendor et idProduct spécifient respectivement les identificateurs de fournisseur et de produit. Windows utilise ces valeurs de champ pour construire un ID matériel pour l’appareil. Pour afficher l’ID matériel d’un appareil particulier, ouvrez Gestionnaire de périphériques et affichez les propriétés de l’appareil. Sous l’onglet Détails , la valeur de la propriété Id de matériel indique l’ID matériel (« USB\XXX ») généré par Windows. Le champ bcdUSB indique la version de la spécification USB à laquelle l’appareil est conforme. Par exemple, 0x0200 indique que l’appareil est conçu conformément à la spécification USB 2.0. La valeur bcdDevice indique le numéro de révision défini par l’appareil. La pile de pilotes USB utilise bcdDevice, ainsi que idVendor et idProduct, pour générer du matériel et des ID compatibles pour l’appareil. Vous pouvez afficher ces identificateurs dans Gestionnaire de périphériques. Le descripteur d’appareil indique également le nombre total de configurations que l’appareil prend en charge.

L’hôte obtient le descripteur d’appareil par le biais d’un transfert de contrôle. Microsoft fournit des interfaces de programmation pour obtenir le descripteur.

Si vous écrivez un... Appeler...
Application UWP qui utilise Windows.Devices.Usb UsbDevice.DeviceDescriptor
Application de bureau Win32 qui utilise des fonctions WinUSB WinUsb_GetDescriptor
Pilote client basé sur UMDF IWDFUsbTargetDevice ::RetrieveDescriptor
Pilote client basé sur KMDF WdfUsbTargetDeviceGetDeviceDescriptor
Pilote client wdm UsbBuildGetDescriptorRequest
_URB_CONTROL_DESCRIPTOR_REQUEST

Descripteur de configuration USB

Une configuration USB contient une série d’interfaces. Chaque interface se compose d’un ou de plusieurs paramètres alternatifs, et chaque autre paramètre est constitué d’un ensemble de points de terminaison (voir Disposition des périphériques USB). Un descripteur de configuration décrit l’ensemble de la configuration, y compris ses interfaces, ses autres paramètres et leurs points de terminaison. Chacune de ces entités est également décrite dans son format de descripteur. Un descripteur de configuration peut également inclure des descripteurs personnalisés définis par le fabricant de l’appareil.

Par conséquent, seule la partie initiale d’un descripteur de configuration est fixe, 9 octets. Le reste est variable en fonction du nombre d’interfaces et de leurs paramètres alternatifs, ainsi que des points de terminaison pris en charge par l’appareil. Dans cet ensemble de documentation, les 9 octets initiaux sont appelés descripteur de configuration. Les deux premiers octets du descripteur indiquent la longueur totale.

Le tableau suivant présente le descripteur de configuration pour le périphérique de webcam USB :

Champ Valeur
wTotalLength 0x02CA
bNumInterfaces 0x02
bConfigurationValue 0x01
iConfiguration 0x00
bmAttributes 0x80 (alimenté par bus )
MaxPower 0xFA (500 mA)

Le champ bConfigurationValue indique le numéro de la configuration définie dans le microprogramme de l’appareil. Une configuration USB indique également certaines caractéristiques d’alimentation. Le bmAttributes contient un masque de bits qui indique si la configuration prend en charge la fonctionnalité de mise en éveil à distance, et si l’appareil est alimenté par le bus ou auto-alimenté. Le champ MaxPower spécifie la puissance maximale (en milliampères) que l’appareil peut tirer de l’hôte, lorsque l’appareil est alimenté par le bus. Le descripteur de configuration indique également le nombre total d’interfaces (bNumInterfaces) prises en charge par l’appareil.

Si vous écrivez un... Appeler...
Application UWP qui utilise Windows.Devices.Usb UsbDevice.ConfigurationDescriptor pour obtenir la partie de longueur fixe.
UsbConfiguration.Descriptors pour obtenir l’ensemble de la configuration.
Application de bureau Win32 qui utilise des fonctions WinUSB WinUsb_GetDescriptor
Pilote client basé sur UMDF IWDFUsbTargetDevice ::RetrieveDescriptor
Pilote client basé sur KMDF WdfUsbTargetDeviceRetrieveConfigDescriptor
Pilote client wdm UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST

Descripteur d’interface USB

Un descripteur d’interface contient des informations sur un autre paramètre d’une interface USB.

Le tableau suivant montre le descripteur d’interface pour l’autre paramètre 0 de l’interface 0 pour l’appareil webcam :

Champ Valeur
bInterfaceNumber 0x00
bAlternateSetting 0x00
bNumEndpoints 0x01
bInterfaceClass 0x0E
bInterfaceSubClass 0x02
bInterfaceProtocol 0x00
iInterface 0x02
0x0409 « Microsoft LifeCam VX-5000 »
0x0409 « Microsoft LifeCam VX-5000 »

Dans l’exemple précédent, notez les valeurs des champs bInterfaceNumber et bAlternateSetting . Ces champs contiennent des valeurs d’index que l’hôte utilise pour activer l’interface et l’un de ses autres paramètres. Pour l’activation, une application ou un pilote spécifie la valeur d’index dans l’appel de fonction. Sur la base de ces informations, la pile de pilotes USB génère ensuite une demande de contrôle standard (SET INTERFACE) et l’envoie au périphérique. Notez le champ bInterfaceClass . Le descripteur d’interface ou le descripteur pour l’un de ses autres paramètres spécifie un code de classe, une sous-classe et un protocole. La valeur de 0x0E indique que l’interface est destinée à la classe d’appareil vidéo. Notez également le champ iInterface . Cette valeur indique que deux descripteurs de chaîne sont ajoutés au descripteur d’interface. Les descripteurs de chaîne contiennent des descriptions Unicode utilisées lors de l’énumération de l’appareil pour identifier les fonctionnalités.

Si vous écrivez un... Appeler...
Application UWP qui utilise Windows.Devices.Usb UsbInterfaceSetting.Descriptors pour obtenir un descripteur particulier pour un autre paramètre particulier.
UsbInterface.Descriptors pour obtenir des descripteurs pour tous les paramètres d’une interface.
Application de bureau Win32 qui utilise des fonctions WinUSB WinUsb_GetDescriptor
Pilote client basé sur UMDF IWDFUsbInterface ::GetInterfaceDescriptor
Pilote client basé sur KMDF WdfUsbInterfaceGetDescriptor
Pilote client wdm UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST , puis analyser pour chaque descripteur d’interface. Pour plus d’informations, consultez Comment sélectionner une configuration pour un périphérique USB.

Descripteur de point de terminaison USB

Chaque point de terminaison, dans une interface, décrit un flux unique d’entrée ou de sortie pour l’appareil. Un appareil qui prend en charge les flux pour différents types de fonctions a plusieurs interfaces. Un appareil qui prend en charge plusieurs flux qui se rapportent à une fonction peut prendre en charge plusieurs points de terminaison sur une seule interface.

Tous les types de points de terminaison (à l’exception du point de terminaison par défaut) doivent fournir des descripteurs de point de terminaison afin que l’hôte puisse obtenir des informations sur le point de terminaison. Un descripteur de point de terminaison inclut des informations, telles que son adresse, son type, sa direction et la quantité de données que le point de terminaison peut gérer. Les transferts de données vers le point de terminaison sont basés sur ces informations.

Le tableau suivant montre un descripteur de point de terminaison pour l’appareil webcam :

Champ Valeur
bEndpointAddress 0x82 IN
bmAttributes 0x01
wMaxPacketSize 0x0080 (128)
bInterval 0x01

Le champ bEndpointAddress spécifie l’adresse de point de terminaison unique qui contient le numéro de point de terminaison (Bits 3..0) et la direction du point de terminaison (Bit 7). En lisant ces valeurs dans l’exemple précédent, nous pouvons déterminer que le descripteur décrit un point de terminaison IN dont le numéro de point de terminaison est 2. L’attribut bmAttributes indique que le type de point de terminaison est isochroque. Le wMaxPacketSizefield indique le nombre maximal d’octets que le point de terminaison peut envoyer ou recevoir dans une seule transaction. Les bits 12..11 indiquent le nombre total de transactions pouvant être envoyées par microframe. BInterval indique la fréquence à laquelle le point de terminaison peut envoyer ou recevoir des données.

Si vous écrivez un... Appeler...
Application UWP qui utilise Windows.Devices.Usb UsbEndpointDescriptor
Application de bureau Win32 qui utilise des fonctions WinUSB WinUsb_GetDescriptor
Pilote client basé sur UMDF WDFUsbTargetPipe ::GetInformation
Pilote client basé sur KMDF WdfUsbTargetPipeGetInformation
Pilote client wdm UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST , puis analyser pour chaque descripteur de point de terminaison. Pour plus d’informations, consultez Comment sélectionner une configuration pour un périphérique USB.