Grundlagen der USB-Schnittstelle


Aufbau eines Device-Deskriptors


Der Sinn des Device-Deskriptors ist für das System zu sehen, welches Gerät angeschlossen ist. Dies hat viele Vorteile, denn in einigen Fällen verrät der Klassen-Code (bDeviceClass), dass das Gerät zu einer bestimmten Klasse gehört, für das das Betriebssystem selbst Treiber bereithält. So braucht der Anwender z.B. für eine USB-Maus keinen besonderen Treiber mehr, denn die maus gehört zur Klasse "Human Interface Device" (HID). Mit Hilfe dieser Informationen wird das Gerät in Betrieb genommen und im Gerätemanager eingetragen. Wenn das Gerät zu einer Klasse gehört, kann es in bDeviceSubClass und bDeviceProtocoll näher beschrieben werden.

Der Eintrag "bMaxPacketSize()" beschreibt die Größe des Endpoint-0-FIFOs. Dieser Control-Endpoint muss bei jedem USB-Gerät vorhanden sein, da über ihn die Standard-Requests laufen, mit denen das System z.B. alle Deskriptoren abfragt. Der Control-Endpoint nimmt eine Sonderstellung ein, da er immer beide Datenrichtungen unterstützt. Deshalb ist die Angabe der maximalen Größe eines Datenpakets im Device-Deskriptor die einzige erforderliche Information. Für Lowspeed.Geräte gilt eine Größe von 8 Bytes, während Fullspeed-Geräte größere Endpoint-0-FIFOs haben können.
Mit den beiden 16-Bit-Zahlen Vendor-ID und Produkt-ID wird das Gerät eindeutig identifiziert und erlaubt die Auswahl des entsprechenden Treibers. Die ID-Zahlen befinden sich auch in der INF-Datei zum jeweiligen Treiber und ermöglichen die Zuordnung. In bcdDevice kann zusätzlich eine Versionsnummer für das Gerät eingetragen sein.
Die Deskriptoren besitzen eine hierarchische Struktur, die für jedes Gerät unterschiedliche Einstellungen und Eigenschaften beschreiben kann:


Aus der Hierarchie des Deskriptors ist leicht zu ersehen, dass mehrere Interfaces exisitieren können. Zum Beispiel kann eine USB-Tastatur gleichzeitig ein Joystick-Interface und ein mausartiges Gerät enthalten. In diesem Fall teilen sich die Interfaces die Endpoints.

Ausser dem Device-Deskriptor wird noch der Configuration-Deskriptor, einer oder mehrere Interface-Deskriptoren, Endpoint-Deskriptoren und optional String-Deskriptoren abgefragt. So erfährt das System mehr und mehr über das Gerät, z.B. wieviele Endpoints mit welcher FIFO-Größe es hat, ob es mehrere Konfigurationen unterstützt, mehrere Interfaces hat und wieviele Alternate-Settings jedes Interface besitzt.




Dieses Projekt wird gefördert durch den BMBF
Last Updated by Dr. Allwissend on 15.06.2001
© 2001 by Prof. Dr. Volker Schubert and Dipl.Ing.Volker Rödig, University of Paderborn, Germany