Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein USB-Gerät stellt Informationen über sich selbst in Datenstrukturen bereit, die als USB-Deskriptoren bezeichnet werden. Dieser Abschnitt enthält Informationen zu Geräte-, Konfigurations-, Schnittstellen- und Endpunktdeskriptoren und Möglichkeiten zum Abrufen von Geräten von einem USB-Gerät.
USB-Deskriptoren, die dem Gerätelayout zugeordnet sind
Die Host-Software ruft Deskriptoren von einem angeschlossenen Gerät ab, durch das Senden verschiedener Standardkontrollanforderungen an den Standardendpunkt (Get Descriptor-Anforderungen, siehe Abschnitt 9.4.3 der USB-Spezifikation). Diese Anforderungen geben den Typ des abzurufenden Deskriptors an. Als Reaktion auf solche Anforderungen sendet das Gerät Deskriptoren, die Informationen über das Gerät, seine Konfigurationen, Schnittstellen und die zugehörigen Endpunkte enthalten. Gerätedeskriptoren enthalten Informationen über das gesamte Gerät. Konfigurationsdeskriptoren enthalten Informationen zu jeder Gerätekonfiguration. Zeichenfolgendeskriptoren enthalten Unicode-Textzeichenfolgen.
Jedes USB-Gerät macht einen Gerätedeskriptor verfügbar, der die Klasseninformationen, Anbieter- und Produkt-IDs des Geräts sowie die Anzahl der Konfigurationen angibt. Jede Konfiguration macht die Konfigurationsbeschreibung verfügbar, die die Anzahl der Schnittstellen und Leistungsmerkmale angibt. Jede Schnittstelle macht einen Schnittstellendeskriptor für jede der alternativen Einstellungen verfügbar, die Informationen zur Klasse und die Anzahl der Endpunkte enthält. Jeder Endpunkt innerhalb jeder Schnittstelle macht Endpunktdeskriptoren verfügbar, die den Endpunkttyp und die maximale Paketgröße angeben.
Betrachten wir beispielsweise das Layout des OSR FX2-Boardgeräts (siehe USB-Gerätelayout). Auf Geräteebene macht das Gerät einen Gerätedeskriptor und einen Endpunktdeskriptor für den Standardendpunkt verfügbar. Auf Konfigurationsebene macht das Gerät einen Konfigurationsdeskriptor für Configuration 0 verfügbar. Auf Schnittstellenebene wird ein Schnittstellendeskriptor für alternative Einstellung 0 verfügbar gemacht. Auf Endpunktebene werden drei Endpunktdeskriptoren verfügbar gemacht.
USB-Gerätedeskriptor
Jedes USB-Gerät (Universal Serial Bus) muss einen einzelnen Gerätedeskriptor bereitstellen können, der relevante Informationen zum Gerät enthält. Windows verwendet diese Informationen, um verschiedene Informationssätze abzuleiten. Die Felder "idVendor" und " idProduct " geben z. B. Lieferanten- bzw. Produkt-IDs an. Windows verwendet diese Feldwerte, um eine Hardware-ID für das Gerät zu erstellen. Um die Hardware-ID eines bestimmten Geräts anzuzeigen, öffnen Sie den Geräte-Manager, und zeigen Sie geräteeigenschaften an. Auf der Registerkarte "Details " gibt der Wert der Hardware-IDs-Eigenschaft die Hardware-ID ("USB\XXX") an, die von Windows generiert wird. Das BcdUSB-Feld gibt die Version der USB-Spezifikation an, der das Gerät entspricht. Beispielsweise gibt 0x0200 an, dass das Gerät gemäß der USB 2.0-Spezifikation entworfen wurde. Der bcdDevice-Wert gibt die vom Gerät definierte Revisionsnummer an. Der USB-Treiberstapel verwendet bcdDevice zusammen mit idVendor und idProduct, um Hardware und kompatible IDs für das Gerät zu generieren. Sie können diese Bezeichner im Geräte-Manager anzeigen. Der Gerätedeskriptor gibt auch die Gesamtanzahl der Konfigurationen an, die das Gerät unterstützt.
Der Host ruft den Gerätedeskriptor über eine Steuerungsübertragung ab. Microsoft stellt Programmierschnittstellen bereit, um den Deskriptor abzurufen.
| Wenn Sie einen... | Rufen... |
|---|---|
| UWP-App, die Windows.Devices.Usb verwendet | UsbDevice.DeviceDescriptor |
| Win32-Desktop-App, die WinUSB-Funktionen verwendet | WinUsb_GetDescriptor |
| UMDF-basierter Clienttreiber | IWDFUsbTargetDevice::RetrieveDescriptor |
| KMDF-basierter Clienttreiber | WdfUsbTargetDeviceGetDeviceDescriptor |
| WDM-basierter Clienttreiber |
UsbBuildGetDescriptorRequest _URB_CONTROL_DESCRIPTOR_REQUEST |
USB-Konfigurationsdeskriptor
Eine USB-Konfiguration enthält eine Reihe von Schnittstellen. Jede Schnittstelle besteht aus einer oder mehreren alternativen Einstellungen, und jede alternative Einstellung besteht aus einer Reihe von Endpunkten (siehe USB-Gerätelayout). Ein Konfigurationsdeskriptor beschreibt die gesamte Konfiguration einschließlich seiner Schnittstellen, alternativen Einstellungen und deren Endpunkte. Jede dieser Entitäten wird auch im Deskriptorformat beschrieben. Ein Konfigurationsdeskriptor kann auch benutzerdefinierte Deskriptoren enthalten, die vom Gerätehersteller definiert werden.
Daher ist nur der anfängliche Teil eines Konfigurationsdeskriptors fest, 9 Byte. Der Rest ist abhängig von der Anzahl der Schnittstellen und deren alternativen Einstellungen und Endpunkten, die vom Gerät unterstützt werden, variabel. In diesem Dokumentationssatz werden die ersten 9 Bytes als Konfigurationsdeskriptor bezeichnet. Die ersten beiden Bytes des Deskriptors geben die Gesamtlänge an.
Die folgende Tabelle zeigt den Konfigurationsdeskriptor für das USB-Webcamgerät:
| Feld | Wert |
|---|---|
| wTotalLength | 0x02CA |
| bNumInterfaces | 0x02 |
| bConfigurationValue | 0x01 |
| iConfiguration | 0x00 |
| bmAttributes | 0x80 (busbetrieben) |
| MaxPower | 0xFA (500 mA) |
Das Feld "bConfigurationValue " gibt die Nummer für die konfiguration an, die in der Firmware des Geräts definiert ist. Eine USB-Konfiguration gibt auch bestimmte Leistungsmerkmale an. Die bmAttributes enthält eine Bitmaske, die angibt, ob die Konfiguration das Remote-Wake-Up-Feature unterstützt und ob das Gerät busbetrieben oder selbstbetrieben ist. Das Feld "MaxPower " gibt die maximale Leistung (in Milliampeinheiten) an, die das Gerät vom Host zeichnen kann, wenn das Gerät busbetrieben ist. Der Konfigurationsdeskriptor gibt auch die Gesamtanzahl der Schnittstellen (bNumInterfaces) an, die das Gerät unterstützt.
| Wenn Sie einen... | Rufen... |
|---|---|
| UWP-App, die Windows.Devices.Usb verwendet |
UsbDevice.ConfigurationDescriptor, um den festen Längenabschnitt abzurufen. UsbConfiguration.Descriptors zum Abrufen des gesamten Konfigurationssatzes. |
| Win32-Desktop-App, die WinUSB-Funktionen verwendet | WinUsb_GetDescriptor |
| UMDF-basierter Clienttreiber | IWDFUsbTargetDevice::RetrieveDescriptor |
| KMDF-basierter Clienttreiber | WdfUsbTargetDeviceRetrieveConfigDescriptor |
| WDM-basierter Clienttreiber |
UsbBuildGetDescriptorRequest _URB_CONTROL_GET_CONFIGURATION_REQUEST |
USB-Schnittstellendeskriptor
Ein Schnittstellendeskriptor enthält Informationen zu einer alternativen Einstellung einer USB-Schnittstelle.
Die folgende Tabelle zeigt den Schnittstellendeskriptor für alternative Einstellung 0 der Schnittstelle 0 für das Webcamgerät:
| Feld | Wert |
|---|---|
| bInterfaceNumber | 0x00 |
| bAlternativeEinstellung | 0x00 |
| bNumEndpoints | 0x01 |
| bInterfaceClass | 0x0E |
| bInterfaceSubClass | 0x02 |
| bInterfaceProtocol | 0x00 |
| iInterface | 0x02 |
| 0x0409 | "Microsoft LifeCam VX-5000" |
| 0x0409 | "Microsoft LifeCam VX-5000" |
Beachten Sie im vorherigen Beispiel die Werte von bInterfaceNumber und bAlternateSetting. Diese Felder enthalten Indexwerte, die der Host zum Aktivieren der Schnittstelle und einer seiner alternativen Einstellungen verwendet. Für die Aktivierung gibt eine Anwendung oder ein Treiber den Indexwert im Funktionsaufruf an. Basierend auf diesen Informationen erstellt der USB-Treiberstapel dann eine Standardsteuerungsanforderung (SET INTERFACE) und sendet sie an das Gerät. Beachten Sie das Feld "bInterfaceClass ". Der Schnittstellendeskriptor oder der Deskriptor für eine der alternativen Einstellungen gibt einen Klassencode, eine Unterklasse und ein Protokoll an. Der Wert von 0x0E gibt an, dass sich die Schnittstelle für die Videogeräteklasse befindet. Beachten Sie außerdem das iInterface-Feld . Dieser Wert gibt an, dass an den Schnittstellendeskriptor zwei Zeichenfolgendeskriptoren angefügt sind. Zeichenfolgendeskriptoren enthalten Unicode-Beschreibungen, die während der Geräteaufzählung verwendet werden, um die Funktionalität zu identifizieren.
| Wenn Sie einen... | Rufen... |
|---|---|
| UWP-App, die Windows.Devices.Usb verwendet |
UsbInterfaceSetting.Descriptors zum Abrufen eines bestimmten Deskriptors für eine bestimmte alternative Einstellung. UsbInterface.Descriptors zum Abrufen von Deskriptoren für alle Einstellungen einer Schnittstelle. |
| Win32-Desktop-App, die WinUSB-Funktionen verwendet | WinUsb_GetDescriptor |
| UMDF-basierter Clienttreiber | IWDFUsbInterface::GetInterfaceDescriptor |
| KMDF-basierter Clienttreiber | WdfUsbInterfaceGetDescriptor |
| WDM-basierter Clienttreiber |
UsbBuildGetDescriptorRequest _URB_CONTROL_GET_CONFIGURATION_REQUEST und dann jeden Schnittstellendeskriptor analysieren. Weitere Informationen finden Sie unter Auswählen einer Konfiguration für ein USB-Gerät. |
USB-Endpunktdeskriptor
Jeder Endpunkt in einer Schnittstelle beschreibt einen einzelnen Eingabe- oder Ausgabedatenstrom für das Gerät. Ein Gerät, das Datenströme für verschiedene Arten von Funktionen unterstützt, verfügt über mehrere Schnittstellen. Ein Gerät, das mehrere Datenströme unterstützt, die sich auf eine Funktion beziehen, kann mehrere Endpunkte auf einer einzigen Schnittstelle unterstützen.
Alle Endpunkttypen (mit Ausnahme des Standardendpunkts) müssen Endpunktdeskriptoren bereitstellen, damit der Host Informationen über den Endpunkt abrufen kann. Ein Endpunktdeskriptor enthält Informationen, z. B. die Adresse, den Typ, die Richtung und die Datenmenge, die der Endpunkt verarbeiten kann. Die Datenübertragungen an den Endpunkt basieren auf diesen Informationen.
Die folgende Tabelle zeigt einen Endpunktdeskriptor für das Webcamgerät:
| Feld | Wert |
|---|---|
| bEndpointAddress | 0x82 IN |
| bmAttributes | 0x01 |
| wMaxPacketSize | 0x0080 (128) |
| bInterval | 0x01 |
Das Feld "bEndpointAddress " gibt die eindeutige Endpunktadresse an, die die Endpunktnummer (Bits 3..0) und die Richtung des Endpunkts (Bit 7) enthält. Durch Das Lesen dieser Werte im vorherigen Beispiel können wir bestimmen, dass der Deskriptor einen IN-Endpunkt beschreibt, dessen Endpunktnummer 2 ist. Das bmAttributes-Attribut gibt an, dass der Endpunkttyp isochron ist. Das wMaxPacketSizefield gibt die maximale Anzahl von Bytes an, die der Endpunkt in einer einzelnen Transaktion senden oder empfangen kann. Bits 12..11 geben die Gesamtzahl der Transaktionen an, die pro Mikroframe gesendet werden können. Der bInterval gibt an, wie oft der Endpunkt Daten senden oder empfangen kann.
| Wenn Sie einen... | Rufen... |
|---|---|
| UWP-App, die Windows.Devices.Usb verwendet | UsbEndpointDescriptor |
| Win32-Desktop-App, die WinUSB-Funktionen verwendet | WinUsb_GetDescriptor |
| UMDF-basierter Clienttreiber | WDFUsbTargetPipe::GetInformation |
| KMDF-basierter Clienttreiber | WdfUsbTargetPipeGetInformation |
| WDM-basierter Clienttreiber |
UsbBuildGetDescriptorRequest _URB_CONTROL_GET_CONFIGURATION_REQUEST und anschließend jeden Endpunktdeskriptor analysieren. Weitere Informationen finden Sie unter Auswählen einer Konfiguration für ein USB-Gerät. |