14Aug

Existe-t-il un protocole de communication USB réel?

La plupart d'entre nous ne réfléchissons jamais à nos périphériques USB, il suffit de les brancher et de les oublier. Mais que faire si vous êtes le type curieux qui veut en savoir plus sur le fonctionnement de l'USB?Le SuperUser Q & A d'aujourd'hui a les réponses aux questions d'un lecteur curieux.

Question d'aujourd'hui &La session de réponse nous est offerte par SuperUser, une subdivision de Stack Exchange, un regroupement communautaire de sites Web Q & A.

Photo publiée avec l'aimable autorisation de Evilelka Kowalski( Flickr).

La question

SuperUser lecteur smeeb veut savoir s'il existe vraiment un véritable protocole de communication USB:

Selon Wikipedia, USB:

  • Définit les câbles, connecteurs et protocoles de communication utilisés dans un bus pour la connexion, la communication et l'alimentation entreordinateurs et appareils électroniques.

Mais existe-t-il un ?Ma compréhension est la suivante:

  1. Vous connectez un périphérique USB à une machine( Ubuntu ou tout autre type de Linux par exemple).
  2. Linux trouve le pilote de périphérique pour ce périphérique en quelque sorte( bonus si vous connaissez! ) et le charge.
  3. L'appareil est maintenant connecté sous /dev/ theDevice .
  4. Les applications d'espace utilisateur peuvent maintenant lire et écrire sur /dev/ theDevice et le pilote gère les entrées et sorties de bas niveau vers le périphérique / matériel sous-jacent.

Pour autant que je sache, un USB Communication Protocol n'apparaît nulle part dans ce flux. Si ma compréhension est correcte, l'USB est juste le câble et la connexion électrique entre le PC et l'appareil.

Est-ce que je me trompe ici? Est-ce que l'USB met en œuvre un protocole de bas niveau qui souligne le flux ci-dessus? Si oui, qu'est-ce que c'est et comment ça marche à une vue de 30 000 pieds?

Existe-t-il un protocole de communication USB réel?

La réponse

SuperUser contributeurs RedGrittyBrick et projectdp ont la réponse pour nous. Tout d'abord, RedGrittyBrick:

Oui( voir les protocoles USB).

Si je comprends bien, la spécification USB définit un ensemble complexe de protocoles en couches et de profils de périphériques.

Par exemple, les périphériques USB peuvent se conformer à des modèles de haut niveau tels que le stockage de masse, le clavier, l'interface utilisateur, etc. et être gérés par un pilote de périphérique générique. Certains périphériques USB peuvent communiquer à un niveau inférieur, de sorte que le support USB bas niveau du système d'exploitation peut reconnaître que des pilotes de niveau supérieur spécifiques au périphérique sont nécessaires.

Suivi de la réponse de projectdp:

Question

Existe-t-il un protocole de communication USB de bas niveau en action et de quoi s'agit-il?

Réponse

Oui, il y en a. La spécification USB inclut le protocole USB qui définit la manière dont le bus est utilisé au niveau des bits. Ce serait le protocole de bas niveau qui sous-tend les protocoles de niveau supérieur( c'est-à-dire le stockage de masse, le HID, etc.).

Pour plus de détails sur le fonctionnement du protocole USB, ce wiki OSDev est utile. Voici une autre description intéressante utilisant des diagrammes de séquence pour décrire les différentes transactions de données par protocole USB.

Bonus Question

Comment Linux trouve-t-il et charge-t-il le pilote de périphérique pour ce périphérique?

Bonus Réponse

Sous Linux, lorsque vous utilisez un noyau USB, un périphérique USB en fonctionnement sera détecté via le matériel et le noyau en raison de la spécification USB.Côté matériel, la détection est effectuée par le contrôleur hôte USB.Ensuite, dans le noyau, le pilote du contrôleur hôte prend le relais et traduit les bits de bas niveau sur le fil en informations formatées du protocole USB.Ces informations sont ensuite renseignées dans le pilote usbcore du noyau.

J'ai paraphrasé cet excellent article d'Opensourceforu, qui contient beaucoup plus de détails et de clarté sur votre question dans le contexte Linux.

Assurez-vous de vérifier le reste de la discussion animée via le lien de fil partagé ci-dessous!

Avoir quelque chose à ajouter à l'explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d'autres utilisateurs de Stack Exchange? Découvrez le fil de discussion complet ici.