zum Directory-modus

USB-Schnittstelle

Enumeration

Der große Vorteil von USB ist die automatische Erkennung (Plug and Play) neu angeschlossener Geräte. Das Betriebssystem muß hierfür in der Lage sein, Informationen von einem Gerät abzufragen, die es erlauben, den passenden Gerätetreiber zu laden. Ein neues Gerät wird dabei angemeldet (Enumeration). Es erhält eine Bus-Adresse und wird durch einen speziellen Treiber unterstützt.

Enumeration bedeutet also, dass das Betriebssystem von einer neu angeschlossenen Hardware bestimmte Informationen in Form von Deskriptoren abfragt. Es handelt sich dabei um genau definierte Datenblöcke von wenigen Bytes. Die Enumeration wird selbstständig vom Betriebssystem ausgeführt. Nur unter bestimmten Umständen kann es vorkommen, dass beim Erstanschluss eines Gerätes vom System ein passender Treiber verlangt wird. Viele Treiber sind jedoch bereits im System vorhanden und werden automatisch gefunden.

Beim Anschluss eines neuen Gerätes erkennt das System an einer belegten Datenleitung, dass ein neues Gerät vorhanden ist. Im Einzelnen laufen folgende Schritte ab:

  1. Hub informiert den Host über das neue angeschlossene Gerät.
  2. Host befragt den Hub, an welchen Port das Gerät angeschlossen wurde
  3. Host erhält Informationen, an welchem Port das neue Gerät angeschlossen wurde. Host gibt daraufhin den Befehl, diesen Port einzuschalten und einen Bus-Reset auszuführen.
  4. Hub erzeugt ein Reset-Signal mit einer Länge von 10 ms. Er gibt 100 mA Versorgungsstrom für das Gerät frei. Das Gerät ist nun bereit und antwortet auf der Default-Adresse 0.
  5. Bevor das USB-Gerät seine eigene Bus-Adresse erhält, kann es über die Default-Adresse Null angesprochen werden. Der Host liest die ersten Bytes des Device-Deskriptors, um festzulegen, welche Länge die Datenpakete haben können.
  6. Host weist dem Gerät eine eigene Bus-Adresse zu.
  7. Host liest unter der neuen Busadresse alle Konfigurationsinformationen des Geräts aus.
  8. Host weist dem Gerät eine der möglichen Konfigurationen zu. Das Gerät darf soviel Strom entnehmen, wie in seinem Configuration-Deskriptor angegeben ist. Es ist damit bereit für den Einsatz.

Der Host startet nun eine Control-Anfrage (Request), die vom Mikrocontroller des USB-Gerätes beantwortet wird. Durch einen Interrupt erkennt der Host die eingetroffenen Daten. Diese werden analysiert und es wird festgestellt, um welche Art der Anfrage es sich handelt, wobei Schlüsselbytes im Datenpaket die Anforderung des Device-Deskriptors definieren. Nun liest der Mikrocontroller das Gerätes die entsprechenden Daten aus seinem ROM und schreibt sie in das Ausgabe-FIFO, von wo sie an den Host zurückgesandt werden.

Tab.1
Beispiel für eine Abfrageanforderung
FeldnameLänge, BeschreibungBeispiel
BLength1, Größe des Deskriptors in Byte12h
bDescriptorType1, Deskriptortyp (01h=Device Descriptor)01h
BcdUSB2, USB-Version (V.1.0)00h,01h
bDeviceClass1, Klassen-Code00h
bDeviceSubClass1, Subklassen-Code00h
bDeviceProtocol1, Protokoll-Code00h
bMaxPacketSize()1, Größe des EP0-FIFO08h
IdVendor2, Vendor-ID (04B4h=Cypress)B4h,04h
IdProduct2, Produkt-ID (02=Thermometer)02h,00h
bcdDevice2, Versionsnummer (V.09)09h,00h
iManufacturer1, String-Index für "Hersteller"01h
iProduct2, Produkt-ID (02=Thermometer)02h
iSerialNumber1, String-Index für "Seriennummer"00h
bNumConfigurations1, Anzahl möglicher Konfigurationen01h
Seite 5 von 7