Wie fast jede andere Art von Kommunikationsschnittstelle ist USB als Protokollstapel implementiert. Die Ebenen in diesem Stapel, die allen oder mehreren Gerätetypen gemeinsam sind, werden durch die USB-Standards selbst definiert. Dies ermöglicht die Kompatibilität und verhindert, dass jedes Gerät redundante Protokolle erstellt. Darüber hinaus abstrahiert jede Ebene des Protokolls Details, um die sich die nächste Ebene nicht kümmern muss. Wenn Sie also die gerätespezifische Ebene schreiben, stehen Ihnen nur allgemeine Sende- und Empfangsfunktionen zur Verfügung, mit denen Sie Daten von Endpunkt A zu Endpunkt B übertragen können wie das passiert. Darüber hinaus können niedrigere Ebenen innerhalb des Protokollstapels die Implementierung ändern, solange sie eine gemeinsame Schnittstelle zu der darüber liegenden Schicht bereitstellen. Auf diese Weise muss sich der Rest des Stapels nicht unbedingt ändern, wenn sich ein Teil des Protokollstapels ändert.Welches Protokoll wird auf einer niedrigeren Ebene des Stapels verwendet? Im Allgemeinen kapselt jede aufeinanderfolgende Schicht im Stapel die Nachricht, die von der nächsthöheren Schicht in ihrem eigenen Nutzdatenfeld erzeugt wird, während eine Nachricht gesendet wird. Wenn eine Nachricht empfangen wird, schält jede Schicht den Teil ab, der für diese Schicht relevant ist, und leitet seine Nutzlast an die nächste geeignete Schicht auf dem 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 gemeinsam verantwortlich sind, werden in Modellen wie dem OSI-Modell beschrieben .
In USB gibt es ein Protokoll der physikalischen Schicht, das Spannungszustände / Timing / etc definiert. auf dem Draht und wie sie interpretiert werden sollten. Dieses Protokoll muss natürlich Teil der USB-Standards selbst sein, nicht spezifisch für ein bestimmtes Gerät (zumal der Host nicht weiß, welche Art von Gerät an einen bestimmten USB-Anschluss angeschlossen werden soll).
Als nächstes gibt es ein Busverwaltungsprotokoll, mit dem beschrieben wird, wer wann im Bus sprechen kann. Dies wird im OSI-Modell als Medienzugriffsschicht bezeichnet. In USB lässt sich diese Schicht so ziemlich wie folgt zusammenfassen: "Das Gerät kann senden, wenn der Host dies anfordert." Daher gibt es in USB auf dieser Schicht kein besonders kompliziertes Protokoll.
Als nächstes gibt es ein Standardprotokoll zur Beschreibung eines Datenpakets und wie es vom Absender zum Empfänger weitergeleitet werden soll. Diese Schicht muss auch Teil des USB-Standards selbst sein, damit eine erste Kommunikation stattfinden kann, um festzustellen, welcher Gerätetyp angeschlossen wurde, bevor der Host den spezifischen Gerätetyp tatsächlich kennt. Zusätzlich zu 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 mehrere USB-Endpunkte haben, die vom Standard-USB-Stack gemultiplext und demultiplext werden, ähnlich wie Sockets vom Standard-TCP / IP-Stack gemultiplext und demultiplext werden. Eine Anwendung kann jeden dieser Endpunkte als separaten Datenstrom behandeln.
Schließlich gibt es das Protokoll, das für das Gerät selbst definiert ist. Beachten Sie, dass der USB-Standard einige häufig verwendete vordefinierte Standards für häufig verwendete Anwendungsfälle enthält, z. B. Massenspeichergeräte, Mäuse, Tastaturen usw., damit nicht jeder Gerätehersteller das neu erfinden muss Rad. Kompliziertere Geräte können jedoch auf dieser Ebene ihr eigenes benutzerdefiniertes Protokoll entwerfen. Die Ausgabe dieser Schicht für eine gegebene Übertragung wird als die Nutzlast eines Datenpakets auf der vorherigen Schicht weitergeleitet. Beachten Sie, dass bei ausreichend komplizierten Geräten der gerätespezifische Teil des Protokolls selbst in mehrere unabhängige Ebenen unterteilt sein kann, die unteren Ebenen müssen dies jedoch nicht wissen oder sich darum kümmern. Sie müssen lediglich 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. Auch hier ermöglicht die Standardschnittstelle zwischen den Ebenen die Trennung von Bedenken, sodass sich eine Ebene nicht um das Innenleben einer anderen Ebene kümmern muss, sondern nur um die spezifischen Daten, die sie an die unmittelbar darüber liegenden oder darüber liegenden Ebenen weiterleiten oder von diesen empfangen soll darunter im Stapel.