USB hat mehrere Ebenen, die in der USB 2.0-Spezifikation beschrieben sind . Wenn Sie mit dem OSI-Netzwerkmodell mit mehreren Ebenen vertraut sind, können Sie es sich folgendermaßen vorstellen:
- Sitzungsschicht = Kapitel 10 USB-Host-Hardware und -Software (Gerätetreiber)
- Transportschicht = Kapitel 9 USB Device Framework
- Netzwerkschicht = Kapitel 8 Protokollschicht (Bitstream)
- Datenverbindungsschicht = Kapitel 7 Elektrik (Schaltung)
- Physikalische Schicht = Kapitel 6 Mechanisch (Kabel und Stecker)
Konzeptionell basiert USB auf Datenströmen, Endpunkten genannt , die entweder IN (zum Host) oder OUT (vom Host) sein können. Jedes Gerät verfügt über Endpunkt 0, der für die Steuerung und den Status verwendet wird. Ein Gerät verfügt möglicherweise über zusätzliche Endpunkte für Anwendungsdaten. Jeder Endpunkt verhält sich wie ein FIFO-Puffer.
Daten werden auf einem Endpunkt entweder als Bulk (wie TCP / IP, garantiert, dass jedes Byte ankommt und in der richtigen Reihenfolge) oder als Isochronous (wie UDP / IP, garantiert, dass sie aktuell sind, aber möglicherweise Pakete verwerfen) übertragen. Es gibt einen irreführend als " Interrupt " bezeichneten Übertragungstyp, der wirklich nur vom Host abgefragt wird.
USB 2.0 verwendet ein differentielles Paar für die Datenverbindung. Ich werde nicht weiter ins Detail gehen, da dies in Kapitel 7 der USB 2.0-Spezifikation behandelt wird. Im Allgemeinen behandeln wir dies auf der Leiterplatte als ein differentielles Paar mit angepasster Länge und stecken die für jeden USB-PHY (physikalisch) erforderlichen Vorwiderstände in die Reihe Schnittstelle) wird verwendet. USB-Peripheriegeräte verwenden einen hohen Widerstand an einer der D + - oder D- -Leitungen, um den Host zu benachrichtigen, dass es sich um Hochgeschwindigkeits- oder Niedriggeschwindigkeits-Peripheriegeräte handelt.
Sobald der USB-Host feststellt, dass ein Gerät vorhanden ist, fordert er eine Reihe von Deskriptoren vom Gerät an. Dies erledigt der FTDI-Chip hinter den Kulissen. Die Deskriptionen sind in Kapitel 9.5 beschrieben . Dazu gehören Device Descriptor , Configuration Descriptor , Interface Descriptors , Endpoint Descriptors , String Descriptors und möglicherweise sogar HID Report Descriptors .
Der Geräte-Deskriptor enthält die USB- VID- (Vendor Identification) und die PID- Nummer (Product Identification). Das Betriebssystem verwendet dieses Zahlenpaar, VID_PID, um zu bestimmen, welcher Gerätetreiber für dieses Gerät verwendet werden soll. Beachten Sie, dass die VID-Nummer durch eine Mitgliedschaft im Forum für USB-Implementierer vergeben wird. Wenn Sie also ein einzelner Erfinder sind, ist dies ein Problem.
Zusätzlich gibt es den HID-Klassentreiber (Human Interface Device), der eine etwas generische Eingabe für Tastatur / Maus / usw. sowie eine generische Eingabe / Ausgabe bereitstellt. Ein Vorteil von HID besteht darin, dass kein benutzerdefinierter Gerätetreiber bereitgestellt werden muss, der Durchsatz jedoch im Vergleich zu einem benutzerdefinierten Massentreiber etwas eingeschränkt ist. Es gibt ein ganz anderes Spezifikationsdokument über die HID-Deskriptoren; und ein HID Usage Table- Dokument , in dem alle Codenummern aufgeführt sind, die die verschiedenen Funktionen beschreiben, die für ein bestimmtes Gerät mit menschlicher Schnittstelle verfügbar sind.
Ein FTDI-Chip wie das Datenblatt FT220X enthält die USB-Schnittstelle (nicht zu verwechseln mit der seriellen Schnittstelle SPI oder der seriellen Schnittstelle RS232). Dies erledigt die meisten der in den Kapiteln 6, 7 und 8 beschriebenen Low-Level-Aufgaben.
FTDI verwendet ein EEPROM (Off-Chip beim FT2232H, On-Chip beim FT220X), um ein kleines Stück der Informationen zu enthalten, die in die Deskriptoren eingehen. Sie können die VID / PID-Werte anpassen und benutzerdefinierte Beschreibungszeichenfolgen bereitstellen.