Jak prawie każdy inny typ interfejsu komunikacyjnego, USB jest implementowany jako stos protokołów. Poziomy w tym stosie, które są wspólne dla wszystkich lub wielu typów urządzeń, są określone przez same standardy USB, co zarówno umożliwia kompatybilność, jak i uniemożliwia każdemu urządzeniu wykonanie redundantnego protokołu. Co więcej, każda warstwa protokołu streszcza szczegóły, o które nie musi się martwić kolejna warstwa. Tak więc, kiedy faktycznie piszesz warstwę specyficzną dla urządzenia, masz po prostu ogólne funkcje wysyłania i odbierania, które pobierają dane z punktu końcowego A do punktu końcowego B. Jako projektant urządzenia nie musisz się tym przejmować jak to się dzieje. Ponadto niższe poziomy w stosie protokołów mogą zmieniać implementację, o ile ujawniają wspólny interfejs dla warstwy nad nimi. W ten sposób, gdy jedna część stosu protokołu zmienia się, reszta stosu niekoniecznie musi się zmieniać.który protokół jest używany na pewnym niższym poziomie stosu. Ogólnie rzecz biorąc, każda kolejna warstwa w dół stosu będzie otaczać komunikat wytworzony przez następną najwyższą warstwę w swoim własnym polu ładunku, gdy wiadomość jest wysyłana. Po otrzymaniu wiadomości każda warstwa odrywa część związaną z tą warstwą i przesyła swój ładunek do następnej odpowiedniej warstwy w górę stosu. Dotyczy to nie tylko USB, ale prawie każdej magistrali komunikacyjnej. Na przykład najczęściej używany jest stos TCP / IP / Ethernet. Zadania, za które zwykle odpowiadają poszczególne warstwy, opisano w modelach, takich jak model OSI .
W USB istnieje protokół warstwy fizycznej, który określa stany napięcia / czas / etc. na drutach i jak należy je interpretować. Ten protokół oczywiście musi być częścią samych standardów USB, a nie specyficzny dla danego urządzenia (zwłaszcza, że host nie ma możliwości dowiedzenia się, jakie urządzenie ma zostać podłączone do danego portu USB).
Następnie jest protokół zarządzania magistralą, używany do opisywania, kto może rozmawiać w autobusie, kiedy. Nazywa się to warstwą dostępu do mediów w modelu OSI. W USB tę warstwę można z grubsza podsumować, ponieważ „urządzenie może transmitować, kiedy host każe to zrobić”, więc nie ma specjalnie skomplikowanego protokołu na tej warstwie w USB.
Następnie znajduje się standardowy protokół opisujący pakiet danych i sposób, w jaki powinien on być kierowany od nadawcy do odbiorcy. Warstwa ta musi również stanowić część samego standardu USB, aby początkowa komunikacja w celu odkrycia, jaki typ podłączonego urządzenia mogła się zdarzyć, zanim dany typ urządzenia zostanie faktycznie rozpoznany przez host. Oprócz każdego urządzenia posiadającego określony identyfikator na tej warstwie, istnieje również koncepcja USB identyfikatora punktu końcowego w USB. Dzięki temu dowolne urządzenie może mieć wiele punktów końcowych USB, które są multipleksowane i demultipleksowane przez standardowy stos USB, podobnie jak gniazda są multipleksowane i demultipleksowane przez standardowy stos TCP / IP. Aplikacja może traktować każdy z tych punktów końcowych jako osobne strumienie danych.
Wreszcie istnieje protokół zdefiniowany dla samego urządzenia. Należy pamiętać, że w rzeczywistości istnieją pewne typowe, wstępnie zaprojektowane elementy stanowiące część standardu USB dla typowych przypadków użycia, takie jak urządzenia pamięci masowej, myszy, klawiatury itp., Dzięki czemu każdy producent urządzeń nie musi ponownie wymyślać koło. Bardziej skomplikowane urządzenia mogą jednak zaprojektować własny protokół na tej warstwie. Dane wyjściowe tej warstwy dla danej transmisji są przekazywane jako ładunek pakietu danych na poprzedniej warstwie. Zauważ, że w przypadku wystarczająco skomplikowanych urządzeń, część protokołu specyficzna dla urządzenia może być podzielona na wiele niezależnych warstw, ale niższe poziomy nie muszą o tym wiedzieć ani się tym przejmować. Wszystko, co muszą wiedzieć, to to, że muszą przekazać dany zestaw bajtów z hosta do określonego punktu końcowego urządzenia lub z określonego punktu końcowego urządzenia do hosta. Ponownie, mając standardowy interfejs między warstwami, można rozdzielić obawy, więc jedna warstwa nie musi przejmować się wewnętrznym działaniem innej warstwy, a jedynie konkretnymi danymi, które powinna przekazać lub oczekiwać od warstw bezpośrednio powyżej lub pod nim w stosie.