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 électrique entre les ordinateurs et les appareils électroniques
Mais existe-t-il vraiment un " protocole de communication USB "? Ma compréhension est que:
- Vous connectez un périphérique USB à une machine (disons, Ubuntu ou tout type de Linux)
- Linux trouve le pilote de périphérique pour ce périphérique (en quelque sorte - bonus si vous le savez!) Et le charge
- L'appareil est maintenant connecté sous
/dev/theDevice
- Les applications de l'espace utilisateur peuvent désormais lire / écrire
/dev/theDevice
et le pilote gère les E / S de bas niveau sur le périphérique / matériel sous-jacent
Pour moi, nulle part dans ce flux n'apparaît un "protocole de communication USB". Si ma compréhension est correcte, l'USB n'est que le câble et la connexion électrique entre le PC et l'appareil.
Ai-je tort ici? L'USB met-il réellement en œuvre une sorte de protocole de bas niveau qui souligne le flux ci-dessus? Si oui, quel est-il et comment fonctionne-t-il à une vue de 30 000 pieds?
linux
usb
linux-device-driver
smeeb
la source
la source
Réponses:
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érique.
Par exemple, les périphériques USB peuvent se conformer à des modèles de haut niveau tels que le stockage de masse, le clavier (ou le périphérique d'interface humaine, 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 la prise en charge USB de bas niveau du système d'exploitation puisse reconnaître que des pilotes de niveau supérieur spécifiques au périphérique sont nécessaires.
la source
Question: Existe-t-il un protocole de communication USB de bas niveau en action et quel est-il?
Répondre:
Oui, la spécification USB inclut le protocole USB qui définit la façon dont le bus est utilisé au niveau du bit. Ce serait le protocole «de bas niveau» qui sous-tend les protocoles de niveau supérieur, c'est-à-dire le stockage de masse, HID, etc.
Pour des 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 diverses transactions de données selon le protocole USB.
Question bonus: Comment Linux trouve-t-il et charge-t-il le pilote de périphérique pour ce périphérique?
Réponse bonus :
'Sous Linux lors de l'utilisation d'un noyau compatible USB, un périphérique USB fonctionnel 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 du câble en informations formatées en protocole USB. Ces informations sont ensuite renseignées dans le pilote de base USB du noyau. '
J'ai paraphrasé cet excellent article Opensourceforu , qui contient beaucoup plus de détails et de clarté sur votre question dans le contexte Linux.
la source
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.
la source
Il existe en fait un ensemble de protocoles de communication connexes qui interagissent.
Au niveau le plus bas, il existe un protocole qui décrit comment les paquets d'octets sont envoyés sur une connexion série. Ceci est commun à tous les périphériques USB (mais différent entre USB2 et USB3).
L'un des premiers paquets envoyés demande à l'appareil de se décrire. Pour éviter un problème de poulet et d'oeuf, le protocole d'identification est le même pour tous les périphériques USB. Le système d'exploitation peut utiliser cette identification pour charger le bon pilote.
À un autre niveau encore, l'USB est un bus, ce qui signifie que plusieurs appareils doivent partager la bande passante. Cela signifie qu'il existe un protocole qui indique à chaque appareil quand il peut parler et quand ce n'est pas le cas. Étant donné que tous les périphériques USB doivent s'y conformer, un protocole commun est utilisé pour organiser cela.
Enfin, de nombreux périphériques USB simples sont si simples qu'il existe des protocoles supplémentaires qui décrivent une classe entière de périphériques (souris, claviers, stockage, adaptateurs Ethernet, ...). La plupart des appareils prennent en charge zéro ou l'un de ces protocoles fonctionnels.
la source
Universal Serial Bus
.Une partie de la réponse réside peut-être dans la définition de l'expression " protocole de communication ". En allant à la même source que vous (Wikipedia), vous trouverez des informations utiles telles que:
Une façon simple de penser à cela est qu'un protocole est une manière prédéfinie et convenue de faire quelque chose , dans ce cas, la chose est de savoir comment déplacer des données vers et depuis un périphérique connecté par USB. Côté matériel, chaque broche a un niveau de tension et un protocole d'utilisation prédéfinis, chaque type d'appareil a un protocole d'utilisation prédéfini pour chaque broche et chaque paquet de données a une syntaxe et un format de données prédéfinis. Il y a également un protocole de communication de poignée de main incorporé. Collectivement, ce sont toutes des parties de la collection de normes pour l'utilisation de périphériques USB, alias le protocole USB, qui est décidé (c'est-à-dire conçu, proposé, débattu, révisé et finalement accepté) par les membres de l'USB Implementers Forum, Inc.
Alors oui, il est un protocole USB, ou plus exactement il y a un certain nombre de pré-défini et approuvé le protocole USB s pour différentes utilisations USB.
la source