Gibt es wirklich ein "USB-Kommunikationsprotokoll"?


24

Laut Wikipedia , USB:

Definiert die Kabel, Anschlüsse und Kommunikationsprotokolle, die in einem Bus für die Verbindung, Kommunikation und Stromversorgung zwischen Computern und elektronischen Geräten verwendet werden

Aber gibt es wirklich ein "USB- Kommunikationsprotokoll "? Mein Verständnis ist, dass:

  1. Sie schließen ein USB-Gerät an einen Computer an (z. B. Ubuntu oder eine beliebige Art von Linux).
  2. Linux findet den Gerätetreiber für dieses Gerät (irgendwie - Bonus, wenn Sie es wissen!) Und lädt ihn
  3. Das Gerät ist nun unter verbunden /dev/theDevice
  4. Benutzerraum-Apps können jetzt lesen / schreiben /dev/theDeviceund der Treiber verarbeitet die Low-Level-E / A an das zugrunde liegende Gerät / die zugrunde liegende Hardware

Nirgendwo in diesem Ablauf erscheint für mich ein "USB-Kommunikationsprotokoll". Nach meinem Verständnis ist der USB nur das Kabel und die elektrische Verbindung zwischen dem PC und dem Gerät.

Irre ich mich hier Implementiert USB tatsächlich eine Art Low-Level-Protokoll, das den obigen Ablauf unterstreicht? Wenn ja, was ist es und wie funktioniert es bei einer 30.000-Fuß-Ansicht?


45
"Der Treiber handhabt die Low-Level-E / A an das zugrunde liegende Gerät / die zugrunde liegende Hardware." Dies geschieht mithilfe des im Standard enthaltenen Kommunikationsprotokolls.
EBGreen

29
Oh ... Ich habe die Frage gelesen: "Gibt es wirklich ein" USB-Kommunikationsprotokoll "?" Die Antwort wäre also ja. Wenn Sie wissen möchten, wie das eigentliche Kommunikationsprotokoll lautet, lesen Sie einfach den Standard. Oder lesen Sie Abschnitt 11 auf der Wiki-Seite, auf die Sie verlinkt haben.
EBGreen

6
"Der USB ist nur das Kabel und die elektrische Verbindung zwischen dem PC und dem Gerät". Das Ethernet-Kabel ist nur ein Kabel zwischen dem PC und einem Switch / Router / was auch immer. Es gibt immer noch einige Protokolle, die verwendet werden, um über dieses Kabel zu kommunizieren und nützliche Dinge damit zu tun.
ysdx

13
"Linux findet den Gerätetreiber für dieses Gerät" Wie kann Linux Ihrer Meinung nach erkennen, welches Gerät mit dem anderen Ende verbunden ist? Vielleicht ein gemeinsames Protokoll?
Spender

4
@Ramhound "Diese Kommunikationsprotokolle sind zumindest bei Ethernet vom Standard unabhängig." Das ist falsch. Die Ethernet-Protokolle (sowohl die physikalische als auch die MAC-Schicht) werden durch die IEEE-Ethernet-Standards (insbesondere die 802.3-Standards ) definiert . Es ist natürlich möglich (und üblich), etwas anderes als das Ethernet-Protokoll über ein Kabel der Kategorie 6 mit zu senden RJ-45-Anschlüsse, aber zu diesem Zeitpunkt ist es kein Ethernet mehr. Dies ist beispielsweise bei Nicht-VoIP-Telefonsystemen üblich.
Reirab

Antworten:


47

Ja, siehe USB-Protokolle

Soweit ich weiß, definiert die USB-Spezifikation einen komplexen Satz von geschichteten Protokollen und Geräteprofilen.

Beispielsweise können USB-Geräte Vorlagen auf hoher Ebene wie Massenspeicher, Tastatur (oder Human Interface Device usw.) entsprechen und von einem allgemeinen Gerätetreiber verwaltet werden. Einige USB-Geräte können auf einer niedrigeren Ebene kommunizieren, sodass die Low-Level-USB-Unterstützung des Betriebssystems erkennen kann, dass gerätespezifische Treiber auf höherer Ebene erforderlich sind.


30

Frage: Gibt es ein Low-Level-USB-Kommunikationsprotokoll und was ist das?

Antworten:

Ja, die USB-Spezifikation enthält das USB-Protokoll, das definiert, wie der Bus auf Bitebene verwendet wird. Dies wäre das "Low-Level" -Protokoll, das den übergeordneten Protokollen (Massenspeicher, HID usw.) zugrunde liegt.

Für Einzelheiten zur Funktionsweise des USB-Protokolls ist dieses OSDev-Wiki hilfreich. Hier ist eine weitere interessante Beschreibung unter Verwendung von Sequenzdiagrammen, um die verschiedenen Datentransaktionen gemäß dem USB-Protokoll zu beschreiben.

Bonusfrage: Wie findet und lädt Linux den Gerätetreiber für dieses Gerät?

Bonusantwort :

'Unter Linux wird bei Verwendung eines USB-fähigen Kernels aufgrund der USB-Spezifikation ein funktionierendes USB-Gerät über die Hardware und den Kernel erkannt . Auf der Hardwareseite erfolgt die Erkennung durch den USB Host Controller. Dann übernimmt der Host-Controller-Treiber im Kernel die Low-Level-Bits des Kabels und übersetzt sie in Informationen im Format des USB-Protokolls. Diese Informationen werden dann im USB-Kerntreiber des Kernels eingetragen. '

Ich habe es aus diesem ausgezeichneten Opensourceforu-Artikel heraus paraphrasiert , der viel detaillierter und klarer über Ihre Frage im Linux-Kontext ist.


7
Ich hoffe, dass "Bonusfrage" für Sie "Kopfgeld" bedeutet.
Dotancohen

@projectdp - Es wäre sehr nützlich, wenn Sie einige der Informationen aus Ihren primären Referenzen in Ihre Antwort selbst einfügen würden.
Ramhound

@Ramhound - Vielen Dank für Ihr Feedback. Ich habe meine Antwort hilfreicher umgeschrieben. Was möchten Sie sehen, um weitere Informationen aus den Ressourcen hinzuzufügen, die für die Fragen relevant sind?
projectdp

14

Wie fast jede andere Art von Kommunikationsschnittstelle ist USB als Protokollstapel implementiert. Die Ebenen in diesem Stapel, die allen oder mehreren Gerätetypen gemeinsam sind, werden durch die USB-Standards selbst definiert. Dies ermöglicht die Kompatibilität und verhindert, dass jedes Gerät redundante Protokolle erstellt. Darüber hinaus abstrahiert jede Ebene des Protokolls Details, um die sich die nächste Ebene nicht kümmern muss. Wenn Sie also die gerätespezifische Ebene schreiben, stehen Ihnen nur allgemeine Sende- und Empfangsfunktionen zur Verfügung, mit denen Sie Daten von Endpunkt A zu Endpunkt B übertragen können wie das passiert. Darüber hinaus können niedrigere Ebenen innerhalb des Protokollstapels die Implementierung ändern, solange sie eine gemeinsame Schnittstelle zu der darüber liegenden Schicht bereitstellen. Auf diese Weise muss sich der Rest des Stapels nicht unbedingt ändern, wenn sich ein Teil des Protokollstapels ändert.Welches Protokoll wird auf einer niedrigeren Ebene des Stapels verwendet? Im Allgemeinen kapselt jede aufeinanderfolgende Schicht im Stapel die Nachricht, die von der nächsthöheren Schicht in ihrem eigenen Nutzdatenfeld erzeugt wird, während eine Nachricht gesendet wird. Wenn eine Nachricht empfangen wird, schält jede Schicht den Teil ab, der für diese Schicht relevant ist, und leitet seine Nutzlast an die nächste geeignete Schicht auf dem Stapel weiter. Dies gilt nicht nur für USB, sondern für fast jeden Kommunikationsbus. Der TCP / IP / Ethernet-Stack ist beispielsweise wahrscheinlich der am häufigsten verwendete. Die Aufgaben, für die bestimmte Ebenen gemeinsam verantwortlich sind, werden in Modellen wie dem OSI-Modell beschrieben .

In USB gibt es ein Protokoll der physikalischen Schicht, das Spannungszustände / Timing / etc definiert. auf dem Draht und wie sie interpretiert werden sollten. Dieses Protokoll muss natürlich Teil der USB-Standards selbst sein, nicht spezifisch für ein bestimmtes Gerät (zumal der Host nicht weiß, welche Art von Gerät an einen bestimmten USB-Anschluss angeschlossen werden soll).

Als nächstes gibt es ein Busverwaltungsprotokoll, mit dem beschrieben wird, wer wann im Bus sprechen kann. Dies wird im OSI-Modell als Medienzugriffsschicht bezeichnet. In USB lässt sich diese Schicht so ziemlich wie folgt zusammenfassen: "Das Gerät kann senden, wenn der Host dies anfordert." Daher gibt es in USB auf dieser Schicht kein besonders kompliziertes Protokoll.

Als nächstes gibt es ein Standardprotokoll zur Beschreibung eines Datenpakets und wie es vom Absender zum Empfänger weitergeleitet werden soll. Diese Schicht muss auch Teil des USB-Standards selbst sein, damit eine erste Kommunikation stattfinden kann, um festzustellen, welcher Gerätetyp angeschlossen wurde, bevor der Host den spezifischen Gerätetyp tatsächlich kennt. Zusätzlich zu jedem Gerät mit einer bestimmten ID auf dieser Ebene gibt es auch das Konzept einer Endpunkt-ID in USB. Auf diese Weise kann jedes Gerät mehrere USB-Endpunkte haben, die vom Standard-USB-Stack gemultiplext und demultiplext werden, ähnlich wie Sockets vom Standard-TCP / IP-Stack gemultiplext und demultiplext werden. Eine Anwendung kann jeden dieser Endpunkte als separaten Datenstrom behandeln.

Schließlich gibt es das Protokoll, das für das Gerät selbst definiert ist. Beachten Sie, dass der USB-Standard einige häufig verwendete vordefinierte Standards für häufig verwendete Anwendungsfälle enthält, z. B. Massenspeichergeräte, Mäuse, Tastaturen usw., damit nicht jeder Gerätehersteller das neu erfinden muss Rad. Kompliziertere Geräte können jedoch auf dieser Ebene ihr eigenes benutzerdefiniertes Protokoll entwerfen. Die Ausgabe dieser Schicht für eine gegebene Übertragung wird als die Nutzlast eines Datenpakets auf der vorherigen Schicht weitergeleitet. Beachten Sie, dass bei ausreichend komplizierten Geräten der gerätespezifische Teil des Protokolls selbst in mehrere unabhängige Ebenen unterteilt sein kann, die unteren Ebenen müssen dies jedoch nicht wissen oder sich darum kümmern. Sie müssen lediglich wissen, dass sie eine bestimmte Menge von Bytes vom Host an einen bestimmten Geräteendpunkt oder von einem bestimmten Geräteendpunkt an den Host übergeben müssen. Auch hier ermöglicht die Standardschnittstelle zwischen den Ebenen die Trennung von Bedenken, sodass sich eine Ebene nicht um das Innenleben einer anderen Ebene kümmern muss, sondern nur um die spezifischen Daten, die sie an die unmittelbar darüber liegenden oder darüber liegenden Ebenen weiterleiten oder von diesen empfangen soll darunter im Stapel.


9

Es gibt tatsächlich eine Reihe verwandter Kommunikationsprotokolle, die interagieren.

Auf der untersten Ebene gibt es ein Protokoll, das beschreibt, wie Pakete von Bytes über eine serielle Verbindung gesendet werden. Dies gilt für alle USB-Geräte (unterscheidet sich jedoch zwischen USB2 und USB3).

Eines der ersten gesendeten Pakete fordert das Gerät auf, sich selbst zu beschreiben. Um ein Henne-Ei-Problem zu vermeiden, ist das Identifikationsprotokoll für alle USB-Geräte gleich. Das Betriebssystem kann diese Identifikation verwenden, um den richtigen Treiber zu laden.

Auf einer weiteren Ebene ist USB ein Bus, bei dem sich mehrere Geräte die Bandbreite teilen müssen. Dies bedeutet, dass es ein Protokoll gibt, das jedem Gerät mitteilt, wann es sprechen kann und wann nicht. Da alle USB-Geräte dies erfüllen müssen, wird ein gemeinsames Protokoll verwendet, um dies zu arrangieren.

Schließlich sind viele einfache USB-Geräte so einfach, dass es zusätzliche Protokolle gibt, die eine ganze Klasse von Geräten beschreiben (Mäuse, Tastaturen, Speicher, Ethernet-Adapter, ...). Die meisten Geräte unterstützen keines oder eines dieser Funktionsprotokolle.


"USB ist ein Bus, bei dem sich mehrere Geräte die Bandbreite teilen müssen" - Ein Punkt, den das OP übersehen hat, wenn es für seine Frage nur ein Punkt-zu-Punkt-Setup verwendet. Da zwei (oder mehr) USB-Geräte das Kabel mit dem Host-PC gemeinsam nutzen können, kann daraus geschlossen werden, dass ein Protokoll vorhanden sein muss.
Sägemehl

@sawdust Da es überhaupt funktioniert (auch Punkt zu Punkt), können wir schließen, dass es ein Protokoll gibt. Ohne ein Standardprotokoll wäre beispielsweise keine Geräteerkennung möglich.
Reirab

Es gibt in der Tat einen Kommunikationsstandard und im Kern ist es daher eine serielle Kommunikation Universal Serial Bus.
Ramhound

@Ramhound Ja, wie bei den meisten modernen Buskonstruktionen mit Ausnahme von Speicherschnittstellen werden bei USB serielle differentielle Paare für die Datenübertragung verwendet. USB <= 2.0 hatte ein einzelnes Differentialpaar, während USB 3 zwei zusätzliche Differentialpaare hat (eines für SuperSpeed-Übertragung und eines für SuperSpeed-Empfang, wodurch Vollduplex-Kommunikation mit 5 Gbit / s in jede Richtung möglich ist.)
reirab

Ich dachte nur, ich würde einen seriellen Bus in den Kern des Standards stellen, der Autor schien sich dieser Tatsache nicht bewusst zu sein, daher die Frage.
Ramhound

5

Vielleicht liegt ein Teil der Antwort in der Definition des Ausdrucks " Kommunikationsprotokoll ". Wenn Sie zu der Quelle gehen, die Sie auch besucht haben (Wikipedia), finden Sie hilfreiche Informationen wie:

  • Für die Kommunikation müssen Protokolle vereinbart werden.
  • Kommunikationssysteme verwenden für den Nachrichtenaustausch genau definierte Formate (Protokolle).
  • Ein Protokoll muss die Syntax, die Semantik und die Synchronisation der Kommunikation definieren.
  • Ein Protokoll kann daher als Hardware, Software oder beides implementiert werden.

Eine einfache Möglichkeit , daran zu denken, dass ein Protokoll , ein vordefinierte und vereinbarte Art und Weise etwas zu tun , in diesem Fall das etwas ist , wie die Daten zu bewegen in und aus einem USB - Gerät angeschlossen ist . In Bezug auf die Hardware hat jeder Pin einen vordefinierten Spannungspegel und ein vordefiniertes Verwendungsprotokoll, jeder Gerätetyp hat ein vordefiniertes Verwendungsprotokoll für jeden Pin und jedes Datenpaket hat eine vordefinierte Syntax und ein vordefiniertes Datenformat. Es ist auch ein Kommunikations -Handshake- Protokoll enthalten. Zusammen sind dies alle Teile der Sammlung von Standards für die Verwendung von USB-Geräten, auch bekannt als das USB-Protokoll, der von den Mitgliedern des USB Implementers Forum, Inc. beschlossen (dh entworfen, vorgeschlagen, diskutiert, überarbeitet und schließlich zugestimmt) wird .

Also ja, es ist ein USB - Protokoll, oder richtiger gesagt gibt es eine Reihe von vordefinierten und auf USB - Protokoll vereinbart s für verschiedene USB - Anwendungen.


1
1. Der Prozess der Kommunikation umfasst (mindestens) drei Elemente: (1) Codieren / Senden von UND (2) Empfangen / Decodieren (3) _information_ (im Gegensatz zu ZufallsrauschenGegensatz). Wenn eines dieser 3 Elemente fehlt, schlägt der Vorgang fehl. Es können auch zusätzliche Elemente vorhanden sein, wie z. B. Feedback, Medium (Kanal) und Kontext. Quelle: Einer meiner Abschlüsse ist in Kommunikationswissenschaften
OMY

1
2. Bei SETI geht es nicht um Kommunikation, sondern um Erforschung und Entdeckung . Selbst wenn wir ein authentisch hergestelltes Signal erkennen, gibt es keine Garantie, dass wir es jemals verstehen oder mit dem Absender kommunizieren können. QUELLE: [SETI Mission Statement] [1] [1]: seti.org/about-us
OMY

1
3. Browserübergreifende Kompatibilität wird in der Regel dadurch verursacht, dass (a) Browserherstellerdie Protokolle nicht befolgen oder (b) schlecht geschriebene Protokolle fehlerhafte Implementierungen verursachen (z. B. die bekannten IE- Box- Modellfehler und siehe auch < quirksmode.org> ). Das ist derGrund,warum wir jetzt HTML 5 und CSS 3 haben , da die Protokolle verbessert werden müssen. QUELLE: Besaß und betrieb mehrere Jahre lang meine eigene Webentwicklungsfirma
OMY

1
4. Erstens verwenden Funksignale, die auf der Frequenz synchronisiert werden, AM-Protokolle (Amplitudenmodulation). FM-Radiosignale (Frequenzmodulation) werden mit einem Zeitintegral "synchronisiert". Die Protokolle für FM-Systeme beinhalten feste und dynamische Elemente zur Verarbeitung der Informationen. Das dynamische Element sind die variablen Frequenzeinstellungen , die auf einen vordefinierten und begrenzten Frequenzbereich beschränkt sind.
OMY

1
Die festen Elemente sind die mathematischen Formeln zum Modulieren und Demodulieren des Signals. Unabhängig von den Frequenzen sind diese Formeln konstant und können implementiert werden, um das Signal über analoge Hardware oder digitale Software zu verarbeiten. QUELLE: Persönliche Erfahrung als Elektronik-Bastler und auch [Wikipedia] [1] [1]: en.wikipedia.org/wiki/Frequency_modulation
OMY
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.