Comme presque tous les autres types d'interfaces de communication, l'USB est implémenté comme une pile de protocoles. Les niveaux de cette pile qui sont communs à tous ou à plusieurs types de périphériques sont définis par les normes USB elles-mêmes, ce qui permet à la fois la compatibilité et empêche chaque périphérique de faire une conception de protocole redondante. De plus, chaque couche du protocole résume les détails dont la couche suivante n'a pas à s'inquiéter. Ainsi, lorsque vous écrivez réellement la couche spécifique au périphérique, vous n'avez que des fonctions génériques d'envoi et de réception qui récupèrent les données du point de terminaison A au point de terminaison B. En tant que concepteur de périphérique, vous n'avez pas à vous soucier de comment cela se produit. En outre, des niveaux inférieurs au sein de la pile de protocoles peuvent modifier l'implémentation tant qu'ils exposent une interface commune à la couche au-dessus d'eux. De cette façon, lorsqu'une partie de la pile de protocoles change, le reste de la pile ne doit pas nécessairement changer.quel protocole est utilisé à un niveau inférieur de la pile. De manière générale, chaque couche consécutive dans la pile encapsulera le message produit par la couche la plus élevée suivante dans son propre champ de charge utile pendant l'envoi d'un message. Lorsqu'un message est reçu, chaque couche décolle la partie pertinente pour cette couche et transmet sa charge utile à la couche appropriée suivante de la pile. C'est le cas non seulement de l'USB, mais de presque tous les bus de communication. La pile TCP / IP / Ethernet est probablement la plus couramment utilisée, par exemple. Les tâches dont les couches données sont généralement responsables sont décrites dans des modèles, tels que le modèle OSI .
En USB, il existe un protocole de couche physique qui définit les états de tension / synchronisation / etc. sur le fil et comment ils doivent être interprétés. Ce protocole doit évidemment faire partie des normes USB elles-mêmes, non spécifiques à un appareil donné (d'autant plus que l'hôte n'a aucun moyen de savoir quel type d'appareil est sur le point d'être branché sur un port USB donné.)
Ensuite, il y a un protocole de gestion de bus, utilisé pour décrire qui peut parler sur le bus quand. C'est ce qu'on appelle la couche d'accès aux médias dans le modèle OSI. En USB, cette couche peut être résumée à peu près comme «le périphérique peut transmettre lorsque l'hôte lui dit de le faire», il n'y a donc pas de protocole particulièrement compliqué à cette couche en USB.
Ensuite, il y a un protocole standard pour décrire un paquet de données et comment il doit être acheminé de l'expéditeur au récepteur. Cette couche doit également faire partie de la norme USB elle-même, afin que la communication initiale pour découvrir quel type de périphérique a été connecté puisse se produire avant que le type spécifique de périphérique ne soit réellement connu par l'hôte. En plus de chaque périphérique ayant un ID particulier à cette couche, il existe également le concept en USB d'un ID de point de terminaison. Cela permet à tout périphérique donné d'avoir plusieurs points de terminaison USB, qui sont multiplexés et démultiplexés par la pile USB standard, de la même manière que les sockets sont multiplexés et démultiplexés par la pile TCP / IP standard. Une application peut traiter chacun de ces points de terminaison comme des flux de données distincts.
Enfin, il y a le protocole défini pour l'appareil lui-même. Notez qu'il existe en fait certains modèles préconçus communs inclus dans le cadre de la norme USB pour les cas d'utilisation courants, tels que les périphériques de stockage de masse, les souris, les claviers, etc., de sorte que chaque fabricant de périphérique n'a pas à réinventer le roue. Cependant, les appareils plus compliqués sont libres de concevoir leur propre protocole personnalisé au niveau de cette couche. La sortie de cette couche pour une transmission donnée est transmise en tant que charge utile d'un paquet de données à la couche précédente. Notez que, pour les périphériques suffisamment compliqués, la partie spécifique au périphérique du protocole peut elle-même être divisée en plusieurs couches indépendantes, mais les niveaux inférieurs n'ont pas à le savoir ou à s'en soucier. Tout ce qu'ils doivent savoir, c'est qu'ils doivent transmettre un ensemble d'octets donné de l'hôte à un point de terminaison de périphérique particulier ou d'un point de terminaison de périphérique particulier à l'hôte. Encore une fois, avoir l'interface standard entre les couches permet de séparer les préoccupations, de sorte qu'une couche n'a pas à se soucier du fonctionnement interne d'une autre couche, mais uniquement des données spécifiques qu'elle doit transmettre ou s'attendre à recevoir des couches immédiatement au-dessus ou en dessous dans la pile.