Partager via


Descripteurs USB standard

Un périphérique USB fournit des informations sur lui-même dans les 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 appareil USB.

Descripteurs USB associés à la configuration de l'appareil

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 les demandes de descripteur, consultez la section de 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, le fournisseur et les identificateurs de produit de l’appareil, ainsi que le nombre de configurations. Chaque configuration expose le descripteur de configuration qui indique le nombre d’interfaces et de 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 les descripteurs de point de terminaison qui indiquent le type de point de terminaison et la taille maximale des paquets.

Par exemple, considérons la configuration de la carte de l'appareil OSR FX2 (voir la configuration de l'appareil 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 le paramètre alternatif 0. Au niveau du point de terminaison, il expose trois descripteurs de point de terminaison.

Diagramme de classes de disposition du descripteur d’appareil USB.

Descripteur d’appareil 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 Device Manager 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 des ID matériels et compatibles pour l’appareil. Vous pouvez afficher ces identificateurs dans Device Manager. 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 via 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 basé sur 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 plusieurs paramètres alternatifs, et chaque autre paramètre est constitué d’un ensemble de points de terminaison (voir disposition de périphérique USB). Un descripteur de configuration décrit l’intégralité de la configuration, notamment ses interfaces, ses autres paramètres et leurs points de terminaison. Chacune de ces entités est également décrite dans leur 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 autres paramètres et points de terminaison pris en charge par l’appareil. Dans ce jeu 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 montre le descripteur de configuration pour le périphérique webcam USB :

Terrain Valeur
wTotalLength 0x02CA
bNumInterfaces 0x02
bConfigurationValue 0x01
iConfiguration 0x00
bmAttributes 0x80 (alimenté par le 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 de puissance. 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 bus ou auto-alimenté. Le champ MaxPower spécifie la puissance maximale (en unités milliamp) que l’appareil peut tirer de l’hôte, lorsque l’appareil est alimenté par 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 basé sur 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 le paramétrage alternatif 0 de l’interface 0 de l’appareil photo de la webcam :

Terrain 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 de champ 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. En fonction de ces informations, la pile de pilotes USB génère ensuite une demande de contrôle standard (SET INTERFACE) et l’envoie à l’appareil. 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 correspond à la classe d’appareil vidéo. Notez également le champ iInterface . Cette valeur indique qu’il existe deux descripteurs de chaîne ajoutés au descripteur d’interface. Les descripteurs de chaîne contiennent des descriptions Unicode utilisées pendant 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 basé sur WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST , puis analysez 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 seul flux 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 relatifs à 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 :

Terrain 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 isochronous. Le champ 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 qui peuvent ê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 basé sur WDM UsbBuildGetDescriptorRequest
_URB_CONTROL_GET_CONFIGURATION_REQUEST , puis analysez chaque descripteur de point de terminaison. Pour plus d’informations, consultez Comment sélectionner une configuration pour un périphérique USB.