Comment l'USB 2.0 a-t-il évité les collisions?

33

En examinant les broches des prises USB 3.0, je constate qu’il existe des paires d’émission et de réception distinctes. Cependant, pour l’USB 2.0, il n’existe qu’une paire de broches «données». Comment USB 2.0 garantit-il que les périphériques ne communiquent pas simultanément?

VortixDev
la source
2
Vous pourriez également être intéressé par des choses comme CSMA / CD, qui
permettent de
1
Des paires séparées transmission / réception ne résolvent pas tous les conflits. Imaginez que vous avez une clé USB et un modem, ils veulent tous deux envoyer des données à l'hôte, ils commencent donc à émettre. Où? Sur la même paire: hôte reçoit. Le conflit est toujours là. Ce n’est pas ainsi que l’USB fonctionne, mais c’est exactement comme cela que l’Ethernet 10/100 fonctionne: chaque direction a sa propre paire mais le voyant «collision» sur le concentrateur ne cesse de clignoter.
Agent_L

Réponses:

67

L'USB est strictement maître-esclave. Le périphérique ne transmet pas sauf si l'hôte lui dit de transmettre.

Même le mode "interruption" est en fait un sondage: par exemple, toutes les 8 millisecondes (ou moins si vous avez une souris de joueur), le PC demande à la souris "quelle est votre position" et la réponse de la souris.

Idem si vous avez une interface série USB par exemple. Lorsque l'interface reçoit des données sur la ligne série, elle ne les transmettra pas au PC. Au lieu de cela, il attendra que le PC lance la transaction et demande les données.

Cette page Web fournit une bonne explication sur les paquets échangés. En gros, gardez à l’esprit que l’USB a été mis en œuvre pour permettre au périphérique le plus insignifiant et le moins cher de fonctionner, ce qui signifie que l’intelligence réside principalement dans l’hôte, le contrôleur USB hôte, le système d’exploitation et les pilotes. Ceci est très évident lors de la lecture de la spécification.

Firewire (par exemple) a une philosophie complètement différente, il est beaucoup plus puissant, il est multi-maître afin que les périphériques puissent communiquer entre eux sans l'aide d'un hôte / maître. En fait, sa philosophie est beaucoup plus proche de celle du jeton à jeton avec transferts isochrones que du port USB. Cependant, "multi-maître" signifie qu'il nécessite un microcontrôleur puissant dans les périphériques, exécutant une pile logicielle complexe. Il est donc plus coûteux et donc limité aux produits coûteux tels que les caméscopes et les boîtiers de disques durs rapides. Une souris Firewire n’a aucun sens, ce serait trop cher. C'est l'une des raisons pour lesquelles FireWire a échoué.

peufeu
la source
3
Excellente explication et comparaison très pertinente avec FireWire (et oui, construisons un réseau d'arbitrage à base de jetons pour ... de manière réaliste, au plus 5 périphériques sur un bus).
Marcus Müller
3
C'est une bonne réponse, mais je pense que ce serait plus complet si vous mentionniez l'énumération. Découvrir quels périphériques sont connectés à un réseau dynamique sans aucune capacité d'arbitrage (comme le serait un réseau multi-maître) est un problème non trivial et définit, à bien des égards, pourquoi l'USB ne peut pas utiliser une vraie topologie de bus.
Jon
Merci;) Je ne connais pas les détails sanglants concernant l'énumération du côté hôte. Mais la véritable raison pour laquelle l’USB est l’USB, c’est qu’il a été conçu au milieu des années 90 et qu’à cette époque, les microcontrôleurs étaient plus chers qu’aujourd’hui, et les appareils bon marché consistaient à les rendre aussi stupides que possible avec un minimum de RAM et de code. comme possible. En plus, ça marche très bien, ça tombe plutôt bien.
Peufeu
5
Incorrect, l' USB est un bus . Il a juste une topologie différente (étoile) comme opposé au bus "linéaire" plus familier. Toutes les transactions d’hôte USB 2.0 (HS) sont diffusées sur tous les segments de l’étoile, de sorte qu’il n’est pas très différent du bus "linéaire". Semblable au bus linéaire, tous les appareils voient l'activité du bus presque à la fois. La seule différence est que les réponses des périphériques ne sont pas visibles par certains autres périphériques situés sur des branches différentes.
Ale..chenski
2
@rahuldottech, c’est bien cool si cela fonctionne , mais FireWire était beaucoup moins fiable que l’USB, en particulier le plug & play WRT. Et avec l'USB, vous pouvez facilement connecter plusieurs lecteurs à un seul port en utilisant un concentrateur supplémentaire. Il y a un compromis entre performances, mais fiabilité et facilité l'emportent.
gauche autour du
18

Dans la structure USB, les périphériques ne peuvent pas communiquer simultanément, car ils ne "parlent" que lorsque l'hôte USB "leur permet" de parler. Et l'hôte USB permet à un autre appareil de "parler" uniquement lorsque le protocole de transaction séquentielle avec le premier appareil est terminé. Et les périphériques USB n'ont aucun moyen de "parler" par eux-mêmes, il n'y a pas de mécanisme d'interruption actif dans l'USB. En bref, le mécanisme de mise en œuvre de cette discipline est le suivant.

Une fois les périphériques USB 2.0 connectés, l'hôte les énumère en attribuant des adresses uniques à chaque périphérique.

Chaque transaction sur le bus est initiée par un hôte USB.

Les en-têtes de chaque transaction USB portent une adresse de périphérique spécifique. Même lorsque les transactions sont diffusées sur l'intégralité de l'arborescence USB (sur l'instance de contrôleur hôte particulière), seul le périphérique avec l'adresse correspondante répondrait à la transaction et prendrait les données, ou répondrait avec les données.

Le lien "partenaires" enverra alors un accusé de réception indiquant qui reçoit les données avec succès. La transaction complète suit le protocole établi avec une séquence définie de jetons, des délais d'expiration et des codes de correction d'erreur, afin de garantir l'intégrité de la transaction.

Tous les autres appareils écoutent et ignorent simplement le trafic qui ne leur est pas destiné.

C'est à peu près tout, c'est une interface "semi-duplex".

Ale..chenski
la source
1
Pas familier avec le protocole USB, alors comment l'hôte sait-il que le bon périphérique a répondu?
Derek 朕 會 功夫
@Derek 會 功夫, l'hôte le sait car c'est le seul périphérique censé répondre, personne d'autre ne répondra. Les transactions USB 2.0 sont "atomiques", il n'y a pas de réponses différées, tout repose sur le délai d'attente. Aucune réponse en temps voulu (transaction non terminée) n'entraînera une nouvelle tentative.
Ale..chenski
En guise de suivi, ma question est la suivante: puisque chaque appareil est connecté au même bus, qu'est-ce qui m'empêche de prétendre être un autre appareil également connecté?
Derek 會 功夫
7
@ Derek 朕 會 功夫: Rien. C'est pourquoi vous ne connectez pas des clés USB aléatoires provenant de marchés hors rue. Vous ne pouvez pas leur faire confiance.
Courses de légèreté avec Monica
7
@Derek 功夫 會 功夫, intention malveillante mise à part, un périphérique USB doit accepter une adresse lors de l'énumération et un autre périphérique aura une adresse différente, toutes contrôlées par l'hôte. Cela n’est pas différent de lorsque plusieurs modules de mémoire sont connectés à un bus parallèle, mais chaque module ne répond qu’au choix du décodeur / de la puce d’adresse. Et si deux périphériques USB réagissent accidentellement (par exemple, un hôte bourré d'attribution d'adresse), il y aura un désordre de collisions sur le bus et aucun paquet ne passera le CRC (qui est attaché à chaque jeton USB), et le port correspondant être désactivé en raison d'erreurs massives.
Ale..chenski