Wie funktioniert ein USB-Hub?

Ich kenne die Antwort von Google und die Antwort von Wikipedia auf die obige Frage. Aber ich habe eine konkretere Frage zur Hand. USB-Hubs haben viele eingehende und Ports und nur einen ausgehenden Port. Aus diesem Grund kann ich beispielsweise eine Anzahl von n Geräten zusammen verwenden. Aber ich verstehe nicht, wie ein USB-Port Datenübertragungen mit n USB-Ports durchführen kann?
Wie kann es gleichzeitig unterschiedliche Daten an alle USB-Anschlüsse senden?

*

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

*.

Ähnlich wie Ihr Netzwerkrouter einen LAN-Port (das Internet) mit mehreren Geräten verbinden kann. Jedem Endpunkt (USB-Gerät) wird eine Adresse zugewiesen, und die Hubs leiten Anfragen vom Host einfach an das richtige Gerät weiter, indem sie nachverfolgen, welche Adresse sich an welchem ​​Port befindet. Es ist viel einfacher für USB in dem Sinne, dass es nur einen Master (den Host-Port) gibt, der alle Transaktionen initiiert.
@TomCarpenter Wie würde der USB-Anschluss dann verschiedene Daten zusammen senden?
Der Host-Port fordert einen bestimmten Endpunkt zum Sprechen auf. Endpunkte sprechen nur zurück, wenn sie vom Host dazu aufgefordert werden.
@TomCarpenter Aber sie werden alle gleichzeitig verwendet und nicht einzeln, sondern alle zusammen.
Denken Sie daran, dass der USB-Bus bei USB 2.0 mit bis zu 480 Mbit/s laufen kann. Der Host spricht immer nur mit einem Endpunkt gleichzeitig, aber er spricht nacheinander mit allen und wechselt so schnell zwischen ihnen, dass Sie es nicht erkennen können. Das Gleiche tun Netzwerke. „Hey, Maus an Port 1, sag mir, ob du umgezogen bist. Ok, Tastatur an Port 2, hast du irgendwelche Tastendrücke zu melden? Jetzt bist du da auf Port 3, Flash-Laufwerk, speicher diese Daten für mich müssen Sie sprechen? Nein, ok, dann, Maus auf Port 1, sagen Sie mir, ob Sie umgezogen sind ... "
@TomCarpenter Danke, das war eine gute Erklärung. Der Port ist so schnell, dass er sich verzögerungsfrei anfühlt. Interessante Technik. Kannst du es als Antwort für die Community posten?

Antworten (2)

Es hat alles mit Schlichtung zu tun. Jedes System, das die Verbindung mehrerer Geräte erfordert, muss auf irgendeine Weise bestimmen können, wer wann sprechen soll. Je nach Anwendung gibt es erwartungsgemäß unterschiedliche Schemata.

Ein allgemeines Beispiel: Beim Netzwerken haben wir viele Knoten, die alle miteinander sprechen. Dies geschieht, indem jeder Knoten eine Adresse (z. B. IP-Adresse) hat, und wenn ein Knoten mit einem anderen Knoten sprechen möchte, sendet er ein Paket an diese Adresse. Sie haben dann Geräte wie Router, die an mehreren Ports eingehende Pakete entgegennehmen und an den richtigen Port weiterleiten. Die Arbitrierung erfolgt unter Verwendung von Speicher zum Speichern von Paketen, bis der Zielport frei ist.


Nun zu USB. Dies ist tatsächlich viel einfacher als ein Netzwerk, da nicht alle Knoten gleich sind. Sie haben zwei Arten, einen Host und einen Endpunkt. Es gibt immer nur einen Host, aber es können viele Endpunkte sein. In diesem Fall ist die Schlichtung viel einfacher, da nur der Host-Port nach Belieben sprechen darf. Endpunkte dürfen nur sprechen, wenn sie vom Host dazu aufgefordert werden , und der Host spricht immer nur mit jeweils einem Endpunkt.

Bei Host->Endpunkt-Paketen leiten die USB-Hubs einfach die Anfrage vom Host an alle Endpunkte weiter. Da alle Endpunkte eine Adresse haben, wird nur derjenige, an den die Anfrage adressiert wurde, irgendetwas damit machen (z. B. antworten), alle anderen werden das Paket ignorieren.

Bei Endpunkt->Host-Paketen sendet der Host zuerst ein Paket an einen bestimmten Endpunkt nach Adresse, um zu sagen: "Sie können jetzt sprechen", und dann muss dieser Endpunkt sofort eine Antwort senden. Da immer nur ein Endpunkt sprechen darf, leitet der USB-Hub das Paket einfach von dem Port weiter, der auf eine Anfrage vom Host antwortet.


In Bezug darauf, wie der Host herausfindet, welche Geräte angeschlossen sind und wie Endpunkte ihre Adresse erhalten, wird dies durch Aufzählung erreicht.

Alle Host- und Hub-Ports haben Pulldown-Widerstände (15 kOhm) auf den Leitungen D+ und D-. Diese versetzen die Datenleitungen dieses Ports in einen bekannten Zustand, wenn kein Gerät angeschlossen ist, ein Zustand, in dem der Port überhaupt keine Daten über die D+/D-Leitungen sendet.

Wenn ein Gerät angeschlossen ist, macht es sich selbst bekannt, indem es entweder die Datenleitung D+ (volle Geschwindigkeit) oder D- (niedrige Geschwindigkeit) mit einem 1,5-kOhm-Widerstand an VCC anschließt. Dies löst ein Aufzählungsereignis aus. Der Port beginnt dann mit der Konfiguration des Geräts und der Zuweisung einer Adresse. Wenn Sie zwei Geräte gleichzeitig anschließen, werden sie einzeln aufgelistet .

Wenn keine Hubs vorhanden sind, spricht der Host einfach mit dem neuen Gerät und richtet es ein. Wenn Hubs im System vorhanden sind, meldet der Hub, dass das neue Gerät angeschlossen ist . Wenn ein Hub meldet, dass ein neues Gerät angeschlossen ist, weist der Host den Hub an, das neue Gerät zurückzusetzen und die Kommunikation zu starten. Während des Zurücksetzens erhält der Endpunkt eine Standardadresse von 0 (*). Der Host kann dann unter Verwendung der Standardadresse mit dem Endpunkt kommunizieren und ihn mit einer eindeutigen Nicht-Null-Adresse konfigurieren, die es ihm ermöglicht, zu wissen, wann mit ihm gesprochen wird.

(*) Da immer nur ein Gerät gleichzeitig aufgezählt wird, ist die Adresse 0 immer eindeutig für das neu angeschlossene Gerät.


Sie fragen sich dann vielleicht: "Nun, wie kann ich dann mehrere Geräte gleichzeitig sprechen lassen?". Angenommen, Sie haben eine Maus, eine Tastatur und ein Flash-Laufwerk, die alle an denselben USB-Hub angeschlossen sind. Wir alle wissen, dass Sie Ihre Maus und Tastatur gleichzeitig verwenden und gleichzeitig Dateien auf/von Ihrem Flash-Laufwerk kopieren können, aber wenn nur ein Gerät gleichzeitig sprechen kann, wie kann das möglich sein?

Nun, es läuft alles auf die Tatsache hinaus, dass die paar hundert Millisekunden, die Ihr Gehirn braucht, um zu bemerken, dass Sie eine Taste gedrückt haben und erwarten, dass der Bildschirm aktualisiert wird, für den Computer eine Ewigkeit sind. Eine USB 2.0-Schnittstelle kann mit bis zu 480 Mbit/s laufen (USB 3.1 kann mit bis zu 10 Gbit/s laufen!), was bedeutet, dass der Host, obwohl er immer nur mit einem Endpunkt kommuniziert, so schnell zwischen ihnen wechselt, wie Sie können nicht sagen, es tut es.

USB-Host: „Hey, Maus an Port 1, sagen Sie mir, ob Sie umgezogen sind. Ok, Tastatur an Port 2, haben Sie irgendwelche Tastendrücke zu melden? Jetzt sind Sie da auf Port 3, Flash-Laufwerk, speichern Sie diese Daten für mich. Sonst noch jemand, mit dem ich reden muss? Nein, ok, Maus auf Port 1, sag mir, ob du umgezogen bist …“

Mensch: „Oh schau, der Computer hat bemerkt, dass ich gerade meine Maus bewegt, eine Taste auf meiner Tastatur gedrückt und ein Bild auf den USB-Stick kopiert habe, alles gleichzeitig!“

Das Hostgerät verfolgt, welche Endpunktadressen verwendet werden, und sendet Pakete nacheinander oder nach Bedarf (dh wenn das Betriebssystem Zugriff auf ein bestimmtes Gerät anfordert) an jeden. Obwohl nicht alles gleichzeitig geschieht, ist die Schlichtung so schnell, dass der Computer-Haustiermensch den Unterschied nicht erkennen kann.

Ergänzend: USB-Geräte (genauer gesagt nur „Interrupt“-Endpunkte) können in einem bestimmten Intervall von bis zu 1 ms eine Abfrage anfordern. Solange Sie nicht Hunderte von Eingabegeräten haben, werden Sie nie eine Verzögerung bemerken.
Woher weiß der Host, welche Endpunkte verbunden sind? Außerdem scheint dies die ursprüngliche Frage zu Hubs nicht wirklich zu beantworten. Wie interagieren sie in diesem Prozess? Wie interagieren die bei der Aufzählung?
@YonaAppletree-Aufzählung. Hosts und Hubs scannen alle ihre Ports nach Geräteverbindungen – sie erkennen einen 1,5-kOhm-Pullup-Widerstand entweder an D+ (volle Geschwindigkeit) oder D- (niedrige Geschwindigkeit). Ich werde einige Informationen darüber hinzufügen, wie Endpunkten eine Adresse zugewiesen wird.
@YonaAppletree in Bezug auf Hubs während des Betriebs spricht die Antwort bereits darüber. Für Host zu Endpunkt: „USB-Hubs leiten die Anfrage vom Host einfach an alle Endpunkte weiter“. Für Endpunkt zu Host: "Da immer nur ein Endpunkt sprechen darf, leitet der USB-Hub das Paket einfach von dem Port weiter, der antwortet "

Kürzere Antwort: Der Host sendet Daten, die an ein bestimmtes Gerät adressiert sind (das vorläufig "aufgezählt" wurde), eine Transaktion nach der anderen, sequentiell. Der Hub sendet alle Pakete an alle Geräte. Ein Gerät antwortet nur auf Transaktionen, die an es adressiert sind. Das ist alles, was für HS-Geräte gilt.

Bei FS- und LS-Geräten ist der Vorgang etwas komplizierter. Es verwendet "Transaktionsübersetzer", die in jedem Hub für jeden Port eingebaut sind und sogenannte "Split-Transaktionen" in LS- oder FS-Verkehr übersetzen.

Was ist mit USB3?
USB3-Hubs sind intelligenter für Super-Speed-Verbindungen und verwenden explizites Routing zu Geräten/Endpunkten. Der USB2-Abschnitt bleibt gleich. Siehe Abschnitt 3.1 „Architectural Summary“ der neuesten USB3.1-Spezifikationen, usb.org/developers/docs/usb_31_052016.zip