Tab. 11-28 USB: Beispieltastatur - Prinzipieller Ablauf Konfiguration und Betrieb
1. Einschalten Hub
Kommando (Host-Aktion) Antwort (Geräte-Aktion)
1.1 Host erzeugt SE0 für > 2.5 us Hub führt RESET aus
1.2 GetDeviceDescriptor (Device) HUB.E0 DEVICE DESCRIPTOR HUB
1.3 SetDeviceAddress HUB.E0 Hub nimmt zugeteilte Adresse an
1.4 GetDeviceDescriptor (Configuration) HUB.E0 CONFIGURATION DESCRIPTOR HUB
INTERFACE DESCRIPTOR HUB
HUB DESCRIPTOR HUB
ENDPOINT DESCRIPTOR HUB.E1
2. Einschalten Tastatur
Kommando (Host-Aktion) Antwort (Geräte-Aktion)
2.1 Interrupt IN HUB.E1 StatusChange (PORT1) = 1 (Änderung entdeckt)
2.2 GetPortStatus (PORT1) HUB.E0 wPortStatus (PORT_CONNECT, PORT1) = 1
wPortChange (C_PORT_CONNECT, PORT1) =1
2.3 ClearPortFeature (C_PORT_CONNECT, PORT1) HUB.E0 StatusChange (PORT1) = 0
wPortChange (C_PORT_CONNECT, PORT1) =0
Verzögerung
2.4 SetPortFeature (PORT_RESET, PORT1) HUB.E0 Tastatur führt Reset aus
Interrupt IN HUB.E1 StatusChange (PORT1) = 1 (Änderung entdeckt)
2.5 GetPortStatus (PORT1) HUB.E0 wPortStatus (PORT_ENABLE, PORT1) = 1
wPortChange (C_PORT_ENABLE, PORT1) =1
2.6 ClearPortFeature (C_PORT_CONNECT, PORT1) HUB.E0 StatusChange (PORT1) = 0
wPortChange (C_PORT_ENABLE, PORT1) =0
2.7 GetDeviceDescriptor (Device) TAST.E0 DEVICE DESCRIPTOR TAST
2.8 SetDeviceAddress TAST.E0 Tastatur nimmt zugeteilte Adresse an
2.9 GetDeviceDescriptor (Configuration) TAST.E0 CONFIGURATION DESCRIPTOR TAST
INTERFACE DESCRIPTOR KEYBOARD.I0
HID DESCRIPTOR KEYBOARD
ENDPOINT DESCRIPTOR KEYBOARD E1
INTERFACE DESCRIPTOR MOUSE.I1
HID DESCRIPTOR MOUSE
ENDPOINT DESCRIPTOR MOUSE.E2
2.10 GetHIDDescriptor (Report) TAST.E0 REPORT DESCRIPTOR KEYBOARD
2.11 GetHIDDescriptor (Report) TAST.E0 REPORT DESCRIPTOR MOUSE
2.12 GetDeviceDescriptor (String) TAST.E0 STRING DESCRIPTOR Sprach-ID
GetDeviceDescriptor (String) TAST.E0 STRING DESCRIPTOR Hersteller
GetDeviceDescriptor (String) TAST.E0 STRING DESCRIPTOR Produktname
GetDeviceDescriptor (String) TAST.E0 STRING DESCRIPTOR Seriennummer
3. Betrieb Tastatur
Kommando (Host-Aktion) Antwort (Geräte-Aktion)
Interrupt IN HUB.E1 NAK (Keine Statusänderung)
Interrupt IN KEYBOARD.E1 IN REPORT KEYBOARD
Interrupt IN MOUSE.E2 IN REPORT MOUSE
Interrupt IN HUB.E1 NAK (Keine Statusänderung)
Interrupt IN KEYBOARD.E1 IN REPORT KEYBOARD
Interrupt IN MOUSE.E2 IN REPORT MOUSE
SetReport (Output, Keyboard) TAST.E0 OUT REPORT LEDs
 
 
DEVICE_DESCRIPTOR (Hub)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 12 h
bDescriptorType Deskriptor Typ (= Device) 01
bcdUSB USB Spezifikation Version 1.1 01 01 h
bDeviceClass Klassencode (hier HUB =09) 09
bSubDeviceClass Unterklasse (hier 00) 00
bDeviceProtocol Protokoll (hier nicht verwendet) 00
bMaxPacketSize () Maximale Paketgröße für Endpunkt 0 (8, 16, 32, 64) 08
idVendor Hersteller ID (von USB vergeben; willkürliches Beispiel) 07 A6 h
idProduct Produkt ID (vom Hersteller vergeben; willkürliches Beispiel) 00 05 h
bcdDevice Geräte-Versionsnummer (vom Hersteller vergeben; willkürliches Beispiel) 02 07 h
iManufacturer Index des String Descriptor "Hersteller" 00
iProduct Index des String Descriptor "Produkt" 00
iSerialNumber Index des String Descriptor "Seriennummer" 00
bNumConfigurations Anzahl der möglichen Konfigurationen 01
 
CONFIGURATION_DESCRIPTOR (Hub)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 09
bDescriptorType Deskriptor Typ (= Configuration) 02
wTotalLength Gesamtlänge der Antwort, mit allen zugehörigen Deskriptoren 00 21 h
bNumInterfaces Anzahl der Interfaces für diese Konfiguration 01
bConfigurationValue SetConfiguration verwendet diesen Wert zur Auswahl 01
iConfiguration Index String Descriptor für Konfiguration (hier ohne) 00
bmAttributes BusPowered, SelfPowered, RemoteWakeUp, 0, 0, 0, 0, 0 60 h
MaxPower Maximaler Stromverbrauch vom Bus (Einheit 2 mA) FA h
 
INTERFACE_DESCRIPTOR (Hub)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 09
bDescriptorType Deskriptor Typ (= Interface) 04
bInterfaceNumber Nummer des Interface innerhalb der Konfiguration 00
bAlternateSetting zur Auswahl von AlternateSetting 00
bNumEndpoints Anzahl weiterer Endpunkte (ohne E0) (hier 1) 01
bInterfaceClass Klassencode (hier HUB) 09
bInterfaceSubClass Unterklasse 00
bInterfaceProtocol Protokoll 00
iInterface Index für String Descriptor für Interface (hier ohne) 00
 
HUB_DESCRIPTOR
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 08
bDescriptorType Deskriptor Typ (= HUB) 29 h
bNbrPorts Anzahl vorhandener Downstream-Ports (hier 2) 02
wHubCharacteristics Stromversorgung, Verbundgerät, überstromschutz 00
bPwrOn2PwrGood Einschwingzeit der Stromversorgung (Einheit 2 ms) 32 h
bHubContrCurrent Maximaler Strombedarf des Hub Controller (in mA) 32 h
DeviceRemovable Port-Bits gesetzt für nicht entfernbare Geräte 00
PortPwrCtrlMask (vorhanden wegen Kompatibilität zu V. 1.0) FF h
 
ENDPOINT_DESCRIPTOR (Hub)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 07
bDescriptorType Deskriptor Typ (= Endpoint) 05
bEndpointAddress Direction, 0, 0, 0, EndpointNumber 81 h
bmAttributes 0,0,0,0,0,0,TransferTyp (0 Control,1 Isoch.,2 Bulk,3 Interr.) 03
wMaxPacketSize Maximale Paketgröße für diesen Endpunkt 00 08
bInterval Intervall für Datenabfrage (Einheit 1 ms) (hier max.) FF h
 
DEVICE_DESCRIPTOR (Tastatur)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 12 h
bDescriptorType Deskriptor Typ (= Device) 01
bcdUSB USB HID Spezifikation Version 1.0 01 00 h
bDeviceClass Klassencode (hier nicht verwendet) 00
bSubDeviceClass Unterklasse (hier nicht verwendet) 00
bDeviceProtocol Protokoll (hier nicht verwendet) 00
bMaxPacketSize () Maximale Paketgröße für Endpunkt 0 (8, 16, 32, 64) 08
idVendor Hersteller ID (von USB vergeben; willkürliches Beispiel) FF FF h
idProduct Produkt ID (vom Hersteller vergeben; willkürliches Beispiel) 00 01 h
bcdDevice Geräte-Versionsnummer (vom Hersteller vergeben; willkürliches Beispiel) 01 00 h
iManufacturer Index des String Descriptor "Hersteller" 04
iProduct Index des String Descriptor "Produkt" 12 h
iSerialNumber Index des String Descriptor "Seriennummer" 26 h
bNumConfigurations Anzahl der möglichen Konfigurationen 01
 
CONFIGURATION_DESCRIPTOR (Tastatur)
bLength Länge dieses Deskriptors 09
bDescriptorType Deskriptor Typ (= Configuration) 02
wTotalLength Gesamtlänge der Antwort, mit allen zugehörigen Deskriptoren 00 3B h
bNumInterfaces Anzahl der Interfaces für diese Konfiguration 02
bConfigurationValue SetConfiguration verwendet diesen Wert zur Auswahl 01
iConfiguration Index String Descriptor für Konfiguration (hier ohne) 00
bmAttributes BusPowered, SelfPowered, RemoteWakeUp, 0, 0, 0, 0, 0 A0 h
MaxPower Maximaler Stromverbrauch vom Bus (Einheit 2 mA) 32 h
 
INTERFACE_DESCRIPTOR (Keyboard)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 09
bDescriptorType Deskriptor Typ (= Interface) 04
bInterfaceNumber Nummer des Interface innerhalb der Konfiguration 00
bAlternateSetting zur Auswahl von AlternateSetting 00
bNumEndpoints Anzahl weiterer Endpunkte (ohne E0) 01
bInterfaceClass Klassencode (hier HID) 03
bInterfaceSubClass Unterklasse (0 ohne, 1 Boot Interface) 01
bInterfaceProtocol Protokoll (0 ohne, 1 Tastatur, 2 Maus) 01
iInterface Index für String Descriptor für Interface (hier ohne) 00
 
HID_DESCRIPTOR (Keyboard)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 09
bDescriptorType Deskriptor Typ (= HID) 21 h
bcdHID USB HID Spezifikation Version 1.0 01 00 h
bCountryCode Von Hardware unterstützter Ländercode 00
bNumDescriptors Anzahl der folgenden HID Class Descriptoren 01
bDescriptorType Deskriptor Typ (= Report) 22 h
wDescriptorLength Gesamtlänge Report Deskriptor 00 39 h
 
ENDPOINT_DESCRIPTOR (Keyboard)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 07
bDescriptorType Deskriptor Typ (= Endpoint) 05
bEndpointAddress Direction, 0, 0, 0, EndpointNumber 81 h
bmAttributes 0,0,0,0,0,0,TransferTyp (0 Control,1 Isoch.,2 Bulk,3 Interr.) 03
wMaxPacketSize Maximale Paketgröße für diesen Endpunkt 00 08
bInterval Intervall für Datenabfrage (Einheit 1 ms) 0A h
 
INTERFACE_DESCRIPTOR (Mouse)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 09
bDescriptorType Deskriptor Typ (= Interface) 04
bInterfaceNumber Interface-Nummer 01
bAlternateSetting Wert für Auswahl eines Parametersatzes 00
bNumEndpoints Anzahl weiterer Endpunkte (ohne E0) 01
bInterfaceClass Klassencode (= HID) 03
bInterfaceSubClass Unterklasse (= Boot interface) 01
bInterfaceProtocol Interface Protokoll (= Mouse) 02
iInterface Index für String Descriptor für Interface (hier ohne) 00
 
HID_DESCRIPTOR (Mouse)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 09
bDescriptorType Deskriptor Typ (= HID) 21 h
bcdHID USB HID Spezifikation Version 1.0 01 00 h
bCountryCode Von Hardware unterstützter Ländercode 00
bNumDescriptors Anzahl der folgenden HID Class Descriptoren 01
bDescriptorType Descriptor Typ (= Report) 22 h
wDescriptorLength Gesamtlänge Report Deskriptor 00 32 h
 
ENDPOINT_DESCRIPTOR (Mouse)
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 07
bDescriptorType Deskriptor Typ (= Endpoint) 05
bEndpointAddress Direction, 0, 0, 0, EndpointNumber 82 h
bmAttributes 0,0,0,0,0,0,TransferTyp (0 Control,1 Isoch.,2 Bulk,3 Interr.) 03
wMaxPacketSize Maximale Paketgröße für diesen Endpunkt 00 08
bInterval Intervall für Datenabfrage (Einheit 1 ms) 0A h
 
 
REPORT_DESCRIPTOR (Keyboard)
Item Typ Item Parameter Kommentar Wert (Hex)
Usage Page (Generic Desktop) 05 01
Usage (Keyboard) 09 06
Collection (Application) A1 01
      Usage Page (Key Codes) 05 07
      Usage Minimum (224) 19 E0
      Usage Maximum (231) 29 E7
      Logical Minimum (0) 15 00
      Logical Maximum (1) 25 01
      Report Size (1) 75 01
      Report Count (8) 95 08
      Input (Data, Variable, Absolute) 8 Bitfelder für Zustände der Umschalttasten 81 02
      Report Count (5) 95 05
      Report Size (1) 75 01
      Usage Page (Page # für LEDs) 05 08
      Usage Minimum (1) 19 01
      Usage Maximum (5) 29 05
      Output (Data, Variable, Absolute) 5 Bitfelder für LEDs 91 02
      Report Count (1) 95 01
      Report Size (3) 75 03
      Output (Constant) 3 Leerbits auffüllen 91 01
      Report Count (6) 95 06
      Report Size (8) 75 08
      Logical Minimum (0) 15 00
      Logical Maximum (101) 25 65
      Usage Page (Key Codes) 05 07
      Usage Minimum (0) 19 00
      Usage Maximum (101) 29 65
      Input (Data, Array) 6 Bytefelder für Indizes gleichzeitig gedrückter Tasten 81 00
End Collection C0
 
REPORT_DESCRIPTOR (Mouse)
Item Typ Item Parameter Kommentar Wert (Hex)
Usage Page (Generic Desktop) 05 01
Usage (Mouse) 09 02
Collection (Application) A1 01
      Usage (Pointer) 09 01
      Collection (Physical) A1 00
            Usage Page (Buttons) 05 09
            Usage Minimum (01) 19 01
            Usage Maximum (03) 29 03
            Logical Minimum (0) 15 00
            Logical Maximum (1) 25 01
            Report Count (3) 95 03
            Report Size (1) 75 01
            Input (Data, Variable, Absolute) 3 Bitfelder für Zustand der Maustasten 81 02
            Report Count (1) 95 01
            Report Size (5) 75 05
            Input (Constant) 5 Leerbits auffüllen 81 01
            Usage Page (Generic Desktop) 05 01
            Usage (X) 09 30
            Usage (Y) 09 31
            Logical Minimum (-127) 15 81
            Logical Maximum (127) 25 7F
            Report Size (8) 75 08
            Report Count (2) 95 02
            Input (Data, Variable, Relative) 2 Bytefelder für relative X- und Y-Koordinaten 81 06
      End Collection C0
End Collection C0
 
 
STRING_DESCRIPTOR
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 04
bDescriptorType Deskriptor Typ (= String) 03
bString Liste der Sprachen (hier deutsch) ??
 
STRING_DESCRIPTOR
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 0E
bDescriptorType Deskriptor Typ (= String) 03
bString Hersteller (hier 12 Byte für 6 Unicode-Characters) "HESSEL"
 
STRING_DESCRIPTOR
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 14
bDescriptorType Deskriptor Typ (= String) 03
bString Produktname (Unicode) "heskey105"
 
STRING_DESCRIPTOR
Feld Beschreibung Beispiel
bLength Länge dieses Deskriptors 12
bDescriptorType Deskriptor Typ (= String) 03
bString Seriennummer HK5-1000