Wie hat USB 2.0 Kollisionen vermieden?

33

Wenn ich mir die Pins von USB 3.0-Buchsen anschaue, sehe ich, dass es separate Sende- und Empfangspaare gibt, aber für USB 2.0 gibt es nur ein "Daten" -Pin-Paar. Wie stellt USB 2.0 sicher, dass die Geräte nicht gleichzeitig kommunizieren?

VortixDev
quelle
2
Sie könnten auch daran interessiert sein, Dinge wie CSMA / CD zu betrachten, wie es in anderen Zusammenhängen gelöst wird
PlasmaHH
1
Separate Sende- / Empfangspaare lösen nicht alle Konflikte. Stellen Sie sich vor, Sie haben einen USB-Stick und ein Modem. Beide möchten Daten an den Host senden, und beide beginnen mit der Übertragung. Woher? Auf dem gleichen Paar: Host empfangen. Der Konflikt ist immer noch da. So funktioniert USB nicht, aber genau so funktioniert 10/100 Ethernet: Jede Richtung hat ein eigenes Paar, aber die Kollisionsleuchte am Hub blinkt ständig.
Agent_L

Antworten:

67

USB ist ausschließlich Master-Slave. Das Gerät sendet nur, wenn der Host das Senden anfordert.

Sogar der sogenannte "Interrupt" -Modus fragt wirklich ab: Beispielsweise fragt der PC alle 8 Millisekunden (oder weniger, wenn Sie eine Gamermaus haben) die Maus, "was ist Ihre Position", und die Maus antwortet.

Gleiches gilt zum Beispiel für eine USB-serielle Schnittstelle. Wenn die Schnittstelle Daten auf der seriellen Leitung empfängt, überträgt sie diese nicht an den PC. Stattdessen wartet es, bis der PC die Transaktion initiiert und nach den Daten fragt.

Diese Webseite enthält eine gute Erklärung zu den Paketen, die ausgetauscht werden. Denken Sie grundsätzlich daran, dass USB implementiert wurde, um die Funktion des dümmsten und kostengünstigsten Peripheriegeräts zu ermöglichen. Dies bedeutet, dass sich der größte Teil der Informationen auf dem Host, dem Host-USB-Controller, dem Betriebssystem und den Treibern befindet. Dies wird beim Lesen der Spezifikation sehr deutlich.

Firewire (zum Beispiel) hat eine völlig andere Philosophie, es ist viel leistungsfähiger, es ist Multi-Master, sodass Geräte ohne die Hilfe eines Hosts / Masters miteinander kommunizieren können. Tatsächlich ist es in seiner Philosophie einem Token-Ring mit darauf geschlagenen isochronen Übertragungen viel näher als USB. "Multi-Master" bedeutet jedoch, dass ein leistungsstarker Mikrocontroller in den Geräten erforderlich ist, auf dem ein komplexer Software-Stack ausgeführt wird. Es ist daher teurer und daher auf teure Produkte wie Camcorder und schnelle Festplattengehäuse beschränkt. Eine Firewiremaus macht keinen Sinn, es wäre zu teuer. Das ist einer der Gründe, warum FireWire versagt hat.

peufeu
quelle
3
Hervorragende Erklärung und sehr passender Vergleich mit FireWire (und ja, lassen Sie uns ein Token-basiertes Arbitrierungsnetzwerk für ... realistisch höchstens 5 Geräte an einem Bus aufbauen).
Marcus Müller
3
Dies ist eine gute Antwort, aber ich denke, es wäre vollständiger, wenn Sie die Aufzählung erwähnen würden. Das Erkennen, welche Geräte an ein dynamisches Netzwerk ohne Arbitrierungsfunktion angeschlossen sind (wie dies bei einem Multi-Master-Netzwerk der Fall wäre), ist ein nicht triviales Problem und definiert in vielerlei Hinsicht, warum USB keine echte Bustopologie verwenden kann.
Jon
Danke;) Ich kenne die blutigen Details zur Aufzählung von der Hostseite allerdings nicht. Aber IMO ist der wahre Grund dafür, dass USB Mitte der neunziger Jahre entwickelt wurde und zu dieser Zeit Mikrocontroller teurer waren als heute. Der Weg zu billigen Geräten bestand darin, sie mit möglichst wenig RAM und Code so dumm wie möglich zu machen wie möglich. Außerdem funktioniert es sehr gut, es ist ein bisschen ein Sweet Spot.
Peufeu
5
Falsch, USB ist ein Bus . Es hat nur eine andere Topologie (Stern) als der bekanntere "lineare" Bus. Alle USB 2.0 (HS) -Host-Transaktionen werden über alle Segmente des Sterns übertragen, sodass sie sich nicht wesentlich vom "linearen" Bus unterscheiden. Ähnlich wie beim linearen Bus sehen alle Geräte die Busaktivität fast sofort. Der einzige Unterschied besteht darin, dass Geräteantworten für einige andere Geräte, die sich in verschiedenen Zweigen befinden, nicht sichtbar sind.
Ale..chenski
2
@rahuldottech es ist anständig cool, wenn es funktioniert , aber FireWire war viel weniger zuverlässig als USB, insbesondere WRT Plug & Play. Und mit USB können Sie ganz einfach viele Laufwerke an einen einzelnen Port anschließen, indem Sie einen zusätzlichen Hub verwenden. Es gibt einen Kompromiss zwischen Leistung, aber Zuverlässigkeit und Leichtigkeit sind wichtiger.
Leftaroundabout
18

In USB-Frameworks können Geräte nicht gleichzeitig kommunizieren, da sie nur dann "sprechen", wenn der USB-Host ihnen erlaubt, zu sprechen. Über den USB-Host kann ein anderes Gerät nur dann "sprechen", wenn das sequentielle Transaktionsprotokoll mit dem ersten Gerät abgeschlossen ist. Und USB-Geräte haben keine Möglichkeit, selbstständig zu "sprechen". Es gibt keinen aktiven Unterbrechungsmechanismus im USB. Kurz gesagt, der Mechanismus zur Umsetzung dieser Disziplin ist wie folgt.

Nach dem Anschließen von USB 2.0-Geräten werden diese vom Host aufgelistet, indem jedem Gerät eine eindeutige Adresse zugewiesen wird.

Jede Transaktion auf dem Bus wird vom USB-Host initiiert.

Header jeder USB-Transaktion tragen eine bestimmte Geräteadresse. Selbst wenn die Transaktionen über den gesamten USB-Baum (auf der bestimmten Host-Controller-Instanz) übertragen werden, reagiert nur das Gerät mit der übereinstimmenden Adresse auf die Transaktion und nimmt die Daten entgegen oder antwortet mit Daten.

Der Link "Partner" sendet dann eine Bestätigung in der Richtung, von wem die Daten erfolgreich empfangen wurden. Die gesamte Transaktion folgt einem festgelegten Protokoll mit einer definierten Abfolge von Token, Zeitüberschreitungen und Fehlerkorrekturcodes, um die Integrität der Transaktion sicherzustellen.

Alle anderen Geräte hören nur zu und ignorieren den Datenverkehr, der nicht an sie gerichtet ist.

Das war's auch schon, es ist eine "Halbduplex" -Schnittstelle.

Ale..chenski
quelle
1
Das USB-Protokoll ist nicht bekannt. Woher weiß der Host, dass das richtige Gerät reagiert hat?
Derek 朕 朕 功夫
@Derek 朕 會 會, der Host weiß das, weil dies das einzige Gerät ist, das antworten soll. Niemand sonst wird antworten. USB 2.0-Transaktionen sind "atomar", es gibt keine verzögerten Antworten, alles hängt vom Timeout ab. Keine rechtzeitige Antwort (nicht abgeschlossene Transaktion) führt zu einem erneuten Versuch.
Ale..chenski
Meine Frage ist, dass ich, da jedes Gerät an den gleichen Bus angeschlossen ist, nicht so tun kann, als wäre ich ein anderes Gerät, das ebenfalls angeschlossen ist?
Derek 朕 朕 功夫
7
@Derek 朕 會 會: Nichts. Aus diesem Grund schließen Sie keine zufälligen USB-Sticks an, die Sie von Off-Street-Märkten erhalten. Du kannst ihnen nicht vertrauen.
Leichtigkeitsrennen mit Monica
7
@Derek 朕 會 會 Abgesehen von böswilligen Absichten muss ein USB-Gerät während der Aufzählung eine Adresse akzeptieren, und ein anderes Gerät hat eine andere Adresse, die alle vom Host gesteuert wird. Dies unterscheidet sich nicht davon, wenn mehrere Speichermodule an einen parallelen Bus angeschlossen sind, aber jedes Modul reagiert nur auf die Adressdecoder- / Chipauswahl. Und wenn zwei USB-Geräte versehentlich antworten (z. B. der Host ist mit der Adresszuweisung überfrachtet), kommt es zu einem Durcheinander von Kollisionen auf dem Bus, und kein Paket passiert die CRC (die an jedes USB-Token angeschlossen ist) und der entsprechende Port wegen massiver fehler deaktiviert werden.
Ale..chenski