Wie fast jede andere Art von Kommunikationsschnittstelle ist USB als Protokollstack implementiert. Die Ebenen in diesem Stack, die für alle oder mehrere Gerätetypen gelten, werden durch die USB-Standards selbst definiert. Dies ermöglicht sowohl die Kompatibilität als auch die Vermeidung eines redundanten Protokolldesigns für jedes Gerät. Darüber hinaus abstrahiert jede Schicht des Protokolls Details, um die sich die nächste Schicht nicht kümmern muss. Wenn Sie also tatsächlich die gerätespezifische Ebene schreiben, haben Sie nur generische Sende- und Empfangsfunktionen, mit denen Daten vom Endpunkt A zum Endpunkt B geleitet werden. Sie als Gerätedesigner müssen sich nicht darum kümmern wie das passiert Darüber hinaus können niedrigere Ebenen innerhalb des Protokollstapels die Implementierung ändern, solange sie der darüber liegenden Ebene eine gemeinsame Schnittstelle bieten. Auf diese Weise muss sich der Rest des Stapels nicht unbedingt ändern, wenn sich ein Teil des Protokollstapels ändert.welches Protokoll auf einer niedrigeren Ebene des Stacks verwendet wird. Im Allgemeinen kapselt jede nachfolgende Schicht im Stapel die Nachricht, die von der nächsthöheren Schicht in ihrem eigenen Nutzdatenfeld erzeugt wird, wenn eine Nachricht gesendet wird. Wenn eine Nachricht empfangen wird, zieht sich jede Schicht von dem für diese Schicht relevanten Teil ab und leitet ihre Nutzlast an die nächste geeignete Schicht im Stapel weiter. Dies gilt nicht nur für USB, sondern für fast jeden Kommunikationsbus. Der TCP / IP / Ethernet-Stack ist beispielsweise wahrscheinlich der am häufigsten verwendete. Die Aufgaben, für die bestimmte Ebenen allgemein verantwortlich sind, werden in Modellen beschrieben, z. B. im OSI-Modell .
Bei USB gibt es ein Physical Layer-Protokoll, das Spannungszustände / Timing usw. definiert. auf dem Draht und wie sie interpretiert werden sollten. Dieses Protokoll muss natürlich Teil des USB-Standards selbst sein, nicht spezifisch für ein bestimmtes Gerät (vor allem, da der Host nicht wissen kann, welches Gerät gerade an einen bestimmten USB-Anschluss angeschlossen wird.)
Als nächstes gibt es ein Bus-Management-Protokoll, mit dem beschrieben wird, wer wann am Bus sprechen darf. Dies wird im OSI-Modell als Medienzugriffsschicht bezeichnet. In USB kann diese Schicht ziemlich gut zusammengefasst werden, da "das Gerät übertragen kann, wenn der Host es dazu auffordert", so dass es in dieser Schicht in USB kein besonders kompliziertes Protokoll gibt.
Als nächstes gibt es ein Standardprotokoll, um ein Datenpaket zu beschreiben und wie es vom Sender zum Empfänger geleitet werden soll. Diese Schicht muss auch Teil des USB-Standards selbst sein, damit die erste Kommunikation zum Ermitteln des angeschlossenen Gerätetyps erfolgen kann, bevor der bestimmte Gerätetyp dem Host tatsächlich bekannt ist. Neben jedem Gerät mit einer bestimmten ID auf dieser Ebene gibt es auch das Konzept einer Endpunkt-ID in USB. Auf diese Weise kann jedes Gerät über mehrere USB-Endpunkte verfügen, die vom Standard-USB-Stack gemultiplext und demultiplext werden. Dies geschieht auf die gleiche Weise, wie die Sockel vom Standard-TCP / IP-Stack gemultiplext und demultiplext werden. Eine Anwendung kann jeden dieser Endpunkte als separate Datenströme behandeln.
Schließlich gibt es noch das für das Gerät selbst definierte Protokoll. Beachten Sie, dass es einige übliche vordefinierte Standard-USB-Standards für häufige Anwendungsfälle wie Massenspeichergeräte, Mäuse, Tastaturen usw. gibt, sodass der Gerätehersteller das Gerät nicht neu erfinden muss Rad. Kompliziertere Geräte können jedoch auf dieser Ebene ihr eigenes Protokoll erstellen. Die Ausgabe dieser Schicht für eine gegebene Übertragung wird als Nutzlast eines Datenpakets in der vorherigen Schicht übergeben. Beachten Sie, dass für ausreichend komplizierte Geräte der gerätespezifische Teil des Protokolls selbst in mehrere unabhängige Schichten unterteilt sein kann, aber die unteren Ebenen müssen dies nicht wissen oder beachten. Sie müssen nur wissen, dass sie eine bestimmte Menge von Bytes vom Host an einen bestimmten Geräteendpunkt oder von einem bestimmten Geräteendpunkt an den Host übergeben müssen. Wenn die Standardschnittstelle zwischen den Schichten vorhanden ist, können die Bedenken getrennt werden, sodass sich eine Schicht nicht um die inneren Abläufe einer anderen Schicht kümmern muss, sondern nur um die spezifischen Daten, die sie von den unmittelbar darüber liegenden Ebenen übertragen soll oder erwartet darunter im Stapel.