Gibt es wirklich ein "USB-Kommunikationsprotokoll"?

9957
smeeb

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 "? Ich verstehe das so:

  1. Sie verbinden ein USB-Gerät mit einer Maschine (zB Ubuntu oder Linux)
  2. Linux findet den Gerätetreiber für dieses Gerät (irgendwie - Bonus, wenn Sie es wissen!) Und lädt es
  3. Das Gerät ist jetzt unter verbunden /dev/theDevice
  4. Benutzerraum-Apps können jetzt lesen / schreiben, /dev/theDeviceund der Treiber verarbeitet die E / A-Befehle auf niedriger Ebene für das zugrunde liegende Gerät / die zugrunde liegende Hardware

Für mich erscheint in diesem Fluss nirgends ein "USB-Kommunikationsprotokoll". Wenn ich das richtig verstanden habe, ist USB nur die Kabel- und elektrische Verbindung zwischen dem PC und dem Gerät.

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

22
"Der Treiber handhabt die Low-Level-E / A für das zugrunde liegende Gerät / die zugehörige Hardware", wobei er das im Standard verwendete Kommunikationsprotokoll verwendet. EBGreen vor 9 Jahren 45
Danke @EBGreen (+1), aber merkst du die Ironie deines Kommentars? Ich frage was das Kommunikationsprotokoll eigentlich ist! Müssen Daten auf bestimmte Weise über ein USB-Kabel übertragen werden? Wenn ja, nehme ich an, * wäre * das Protokoll. Aber ich würde denken, das wäre anwendungsspezifisch. Gedanken? smeeb vor 9 Jahren 0
Oh ... Ich lese die Frage "Gibt es wirklich ein" USB-Kommunikationsprotokoll "?" Die Antwort wäre also ja. Wenn Sie wissen möchten, was das eigentliche Kommunikationsprotokoll ist, lesen Sie einfach den Standard. Oder lesen Sie Abschnitt 11 auf der Wiki-Seite, mit der Sie verlinkt haben. EBGreen vor 9 Jahren 29
Die USB-Beschreibung enthält bereits die Antwort auf die Titelfrage. Um das USB-Gerät zu identifizieren, benötigen Sie ein Protokoll, das für alle USB-Geräte gültig ist (ansonsten Hühner- und Eierprobleme). MSalters vor 9 Jahren 2
"USB ist nur die Kabel- und elektrische Verbindung zwischen PC und Gerät". Das Ethernet-Kabel ist nur ein Kabel zwischen dem PC und einem Switch / Router / was auch immer. Dennoch gibt es einige Protokolle, die verwendet werden, um über dieses Kabel zu kommunizieren und nützliche Dinge damit zu tun. ysdx vor 9 Jahren 6
Das Stromkabel ist immer noch "nur das Kabel und die elektrische Verbindung" - wir müssen noch standardisieren, wie dieser Strom fließt! Stellen Sie sich vor, Sie hätten einen PC gekauft, der 6V DC erwartete, und ihn an Ihr Haus angeschlossen, das an Wochentagen 3V3 DC und an Wochenenden 480V AC bereitstellte. Wie gut wird das gehen ?! OJFord vor 9 Jahren 3
@ysdx - Diese Kommunikationsprotokolle sind zumindest bei Ethernet unabhängig vom Standard. Bei USB ist der Kommunikationsstandard auch im Gesamtstandard definiert. Das Gerät teilt dem Host mit, worum es sich handelt, der Host entscheidet, wie er damit umgehen soll (z. B. Treiber), und richtet die Kommunikation zwischen dem Gerät ein. Aus diesem Grund können Sie nicht mindestens zwei Hosts miteinander verbinden, da beide Hosts sind. Ramhound vor 9 Jahren 1
"Linux findet den Gerätetreiber für dieses Gerät" Wie denken Sie, dass Linux erkennen kann, welches Gerät am anderen Ende angeschlossen ist? Ein allgemeines Protokoll vielleicht? spender vor 9 Jahren 13
_ "Der Treiber übernimmt die Low-Level-E / A für das zugrunde liegende Gerät / die entsprechende Hardware." _ Rechts mit einem Kommunikationsprotokoll ... Lightness Races in Orbit vor 9 Jahren 2
"USB ist nur die Kabel- und elektrische Verbindung", es ist noch ein Kommunikationsprotokoll zu verwenden, das beispielsweise die Handhabung von Hubs umfasst. njzk2 vor 9 Jahren 1
@Ramhound "Diese Kommunikationsprotokolle sind zumindest bei Ethernet unabhängig vom Standard." Das ist falsch. Die Ethernet-Protokolle (sowohl physikalische als auch MAC-Schicht) werden durch die IEEE-Ethernet-Standards (insbesondere die [802.3-Standards] (http://standards.ieee.org/about/get/802/802.3.html) definiert Natürlich ist es möglich (und üblich), etwas anderes als das Ethernet-Protokoll über ein Kabel der Kategorie 6 mit RJ-45-Anschlüssen zu senden, aber zu diesem Zeitpunkt ist es kein Ethernet mehr. Dies ist beispielsweise bei Nicht-VoIP-Telefonsystemen üblich. reirab vor 9 Jahren 4
@reirab: "... möglich (und üblich), etwas anderes als das Ethernet-Protokoll über ein Kabel der Kategorie 6 mit RJ-45-Anschlüssen zu senden ..." - wie ein DSL- oder ISDN-Signal. Tatsächlich verband der Elektriker, der die Verkabelung in unserem Haus durchführte, sogar die Türklingel mit etwas Cat.7 (anstelle von einfachem 2-Draht), wie ich kürzlich herausfand. ;-) DevSolar vor 9 Jahren 0
Deshalb heißt es "Universal" Peter vor 9 Jahren 0
Jede Kommunikationstechnologie verwendet Protokolle. Es gibt ein Protokoll auf niedriger Ebene, das bestimmt, wie Bits als Spannungen an einer elektrischen Leitung dargestellt werden, übergeordnete Protokolle, um zu bestimmen, welche Art von Gerät etwas ist und wie Befehle an das Gerät gesendet werden sollen, und Protokolle auf mittlerem Niveau, um anzugeben, welches Gerät auf dem Gerät angezeigt wird Bus, für den ein Befehl bestimmt ist. Barmar vor 9 Jahren 1

5 Antworten auf die Frage

48
RedGrittyBrick

Ja, siehe USB-Protokolle

Soweit ich es verstehe, definiert die USB-Spezifikation einen komplexen Satz geschichteter Protokolle und Geräteprofile.

Beispielsweise können USB-Geräte hochrangigen Vorlagen wie Massenspeicher, Tastatur (oder Human Interface Device usw.) entsprechen und von einem generischen Gerätetreiber verwaltet werden. Einige USB-Geräte können auf einer niedrigeren Ebene kommunizieren, sodass die USB-Unterstützung für Betriebssysteme mit niedrigem Betriebssystemniveau erkennen kann, dass gerätespezifische Treiber für höhere Ebenen erforderlich sind.

29
projectdp

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

Antworten:

Ja, die USB-Spezifikation enthält das USB-Protokoll, das die Verwendung des Busses auf Bitebene definiert. Dies wäre das "Low-Level" -Protokoll, das den höheren Protokollen zugrunde liegt, dh Massenspeicher, HID usw.

Dieses OSDev-Wiki ist hilfreich, wenn Sie wissen möchten, wie das USB-Protokoll funktioniert . Hier ist eine weitere interessante Beschreibung mit Sequenzdiagrammen zur Beschreibung der verschiedenen Datentransaktionen gemäß dem USB-Protokoll.

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 ein funktionierendes USB-Gerät aufgrund der USB-Spezifikation über die Hardware und den Kernel erkannt . Hardwareseitig erfolgt die Erkennung durch den USB Host Controller. Im Kernel übernimmt dann der Host Controller Driver und konvertiert die Low-Level-Bits des Kabels in USB-Protokoll-formatierte Informationen. Diese Informationen werden dann in den USB-Kerntreiber im Kernel aufgenommen. '

Ich habe diesen hervorragenden Opensourceforu-Artikel umschrieben, der viel detaillierter und klarer über Ihre Frage im Linux-Kontext ist.

Ich hoffe, dass "Bonusfrage" für Sie "Kopfgeld" bedeutet. dotancohen vor 9 Jahren 7
@projectdp - Es wäre sehr nützlich, wenn Sie einige Informationen aus Ihren primären Referenzen in Ihre Antwort selbst einfügen würden. Ramhound vor 9 Jahren 0
@ Ramhound - Vielen Dank für Ihr Feedback. Ich habe meine Antwort hilfreicher geschrieben. Was möchten Sie, wenn Sie weitere Informationen aus den Ressourcen hinzufügen möchten, die für die Fragen relevant sind? projectdp vor 9 Jahren 0
14
reirab

Wie fast jede andere Art von Kommunikationsschnittstelle ist USB als Protokollstack implementiert. Die Ebenen in diesem Stack, die für alle oder mehrere Gerätetypen gelten, werden durch die USB-Standards selbst definiert. Dies ermöglicht sowohl die Kompatibilität als auch die Vermeidung eines redundanten Protokolldesigns für jedes Gerät. Darüber hinaus abstrahiert jede Schicht des Protokolls Details, um die sich die nächste Schicht nicht kümmern muss. Wenn Sie also tatsächlich die gerätespezifische Ebene schreiben, haben Sie nur generische Sende- und Empfangsfunktionen, mit denen Daten vom Endpunkt A zum Endpunkt B geleitet werden. Sie als Gerätedesigner müssen sich nicht darum kümmern wie das passiert Darüber hinaus können niedrigere Ebenen innerhalb des Protokollstapels die Implementierung ändern, solange sie der darüber liegenden Ebene eine gemeinsame Schnittstelle bieten. Auf diese Weise muss sich der Rest des Stapels nicht unbedingt ändern, wenn sich ein Teil des Protokollstapels ändert.welches Protokoll auf einer niedrigeren Ebene des Stacks verwendet wird. Im Allgemeinen kapselt jede nachfolgende Schicht im Stapel die Nachricht, die von der nächsthöheren Schicht in ihrem eigenen Nutzdatenfeld erzeugt wird, wenn eine Nachricht gesendet wird. Wenn eine Nachricht empfangen wird, zieht sich jede Schicht von dem für diese Schicht relevanten Teil ab und leitet ihre Nutzlast an die nächste geeignete Schicht im 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 allgemein verantwortlich sind, werden in Modellen beschrieben, z. B. im OSI-Modell .

Bei USB gibt es ein Physical Layer-Protokoll, das Spannungszustände / Timing usw. definiert. auf dem Draht und wie sie interpretiert werden sollten. Dieses Protokoll muss natürlich Teil des USB-Standards selbst sein, nicht spezifisch für ein bestimmtes Gerät (vor allem, da der Host nicht wissen kann, welches Gerät gerade an einen bestimmten USB-Anschluss angeschlossen wird.)

Als nächstes gibt es ein Bus-Management-Protokoll, mit dem beschrieben wird, wer wann am Bus sprechen darf. Dies wird im OSI-Modell als Medienzugriffsschicht bezeichnet. In USB kann diese Schicht ziemlich gut zusammengefasst werden, da "das Gerät übertragen kann, wenn der Host es dazu auffordert", so dass es in dieser Schicht in USB kein besonders kompliziertes Protokoll gibt.

Als nächstes gibt es ein Standardprotokoll, um ein Datenpaket zu beschreiben und wie es vom Sender zum Empfänger geleitet werden soll. Diese Schicht muss auch Teil des USB-Standards selbst sein, damit die erste Kommunikation zum Ermitteln des angeschlossenen Gerätetyps erfolgen kann, bevor der bestimmte Gerätetyp dem Host tatsächlich bekannt ist. Neben 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 über mehrere USB-Endpunkte verfügen, die vom Standard-USB-Stack gemultiplext und demultiplext werden. Dies geschieht auf die gleiche Weise, wie die Sockel vom Standard-TCP / IP-Stack gemultiplext und demultiplext werden. Eine Anwendung kann jeden dieser Endpunkte als separate Datenströme behandeln.

Schließlich gibt es noch das für das Gerät selbst definierte Protokoll. Beachten Sie, dass es einige übliche vordefinierte Standard-USB-Standards für häufige Anwendungsfälle wie Massenspeichergeräte, Mäuse, Tastaturen usw. gibt, sodass der Gerätehersteller das Gerät nicht neu erfinden muss Rad. Kompliziertere Geräte können jedoch auf dieser Ebene ihr eigenes Protokoll erstellen. Die Ausgabe dieser Schicht für eine gegebene Übertragung wird als Nutzlast eines Datenpakets in der vorherigen Schicht übergeben. Beachten Sie, dass für ausreichend komplizierte Geräte der gerätespezifische Teil des Protokolls selbst in mehrere unabhängige Schichten unterteilt sein kann, aber die unteren Ebenen müssen dies nicht wissen oder beachten. Sie müssen nur 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. Wenn die Standardschnittstelle zwischen den Schichten vorhanden ist, können die Bedenken getrennt werden, sodass sich eine Schicht nicht um die inneren Abläufe einer anderen Schicht kümmern muss, sondern nur um die spezifischen Daten, die sie von den unmittelbar darüber liegenden Ebenen übertragen soll oder erwartet darunter im Stapel.

9
MSalters

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

Auf der untersten Ebene gibt es ein Protokoll, das beschreibt, wie Pakete von Bytes über eine serielle Verbindung gesendet werden. Dies ist bei allen USB-Geräten üblich (unterscheidet sich jedoch zwischen USB2 und USB3).

Eines der ersten gesendeten Pakete fordert das Gerät auf, sich selbst zu beschreiben. Um ein Hühnerei-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 anderen Ebene ist USB ein Bus, was bedeutet, dass 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 dies bei allen USB-Geräten der Fall sein muss, wird hierfür ein gemeinsames Protokoll verwendet.

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 null oder eines dieser Funktionsprotokolle.

* "USB ist ein Bus, was bedeutet, dass mehrere Geräte die Bandbreite gemeinsam nutzen müssen" * - Ein Punkt, den das OP übersehen hat, wenn er nur eine Punkt-zu-Punkt-Konfiguration für seine Frage verwendet. Da zwei (oder mehr) USB-Geräte das Kabel mit dem Host-PC teilen können, können wir daraus schließen, dass ein Protokoll vorhanden sein muss. sawdust vor 9 Jahren 0
@sawdust Da es überhaupt funktioniert (sogar Punkt-zu-Punkt), können wir daraus schließen, dass es ein Protokoll gibt. Die Erkennung von Geräten wäre beispielsweise ohne ein Standardprotokoll nicht möglich. reirab vor 9 Jahren 0
Es gibt in der Tat einen Kommunikationsstandard und im Kern eine serielle Kommunikation, daher "Universal Serial Bus". Ramhound vor 9 Jahren 0
@Ramhound Ja, wie die meisten modernen Buskonstruktionen für alles außer Speicherschnittstellen, verwendet USB für die Datenübertragung serielle differentielle Paare. USB <= 2.0 hatte ein einziges differentielles Paar, während USB 3 zwei zusätzliche differentielle Paare hat (eines für die SuperSpeed-Übertragung und eines für den SuperSpeed-Empfang, wodurch eine Vollduplex-Kommunikation mit jeweils 5 Gbit / s ermöglicht wird.) reirab vor 9 Jahren 0
Ich dachte nur, ich würde auf einen seriellen Bus auf den Kern des Standards verweisen, der Autor schien sich dieser Tatsache nicht bewusst zu sein, also die Frage. Ramhound vor 9 Jahren 0
5
O.M.Y.

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

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

Ein einfacher Weg, sich das vorzustellen, ist, dass ein Protokoll eine vordefinierte und vereinbarte Vorgehensweise ist, um etwas zu tun . In diesem Fall müssen Daten in ein USB-Gerät übertragen werden. In Bezug auf die Hardware hat jeder Pin ein vordefiniertes Spannungspegel- und Nutzungsprotokoll, jeder Gerätetyp hat ein vordefiniertes Nutzungsprotokoll für jeden Pin, und jedes Datenpaket hat eine vordefinierte Syntax und ein Datenformat. Es ist auch ein Kommunikations -Handshake- Protokoll enthalten. Zusammen genommen sind dies alle Teile der Standardsammlung für die Verwendung von USB-Geräten, auch als USB-Protokoll bezeichnet, über das die Mitglieder des USB Implementers Forum, Inc. entscheiden (dh entworfen, vorgeschlagen, diskutiert, überarbeitet und schließlich zugestimmt haben) .

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

Ich kann Gegenbeispiele zu 3/4 dieser Aufzählungspunkte zeigen, und der vierte umfasst alles unter der Sonne. Wenn ich wahr wäre, sollte jemand das SETI-Programm (und meinen Hund) mitteilen. Wenn Sie glauben, dass 2 wahr ist, haben Sie noch nie eine Browser-kompatible Website geschrieben. Drei ist eigentlich ein paar verschiedene Dinge, aber wenn das Protokoll nur Hardware ist, gelten Syntax und Semantik nicht. Ein einfaches Beispiel für einen Fall, in dem die Synchronisierung nicht definiert ist, ist das UKW-Radio. Sie stellen den Abstimmknopf ein, um die Synchronisierung anzupassen. Es ist nicht definiert, da für jeden Kanal eine andere Synchronisation verwendet wird. Trotzdem keine schlechte Antwort. krowe vor 9 Jahren 0
** _ 1 ._ ** Der _Prozess_prozess der Kommunikation beinhaltet (mindestens) drei Elemente: (1) Codieren / Senden ** AND ** (2) Empfangen / Decodieren (3) _Information_ (im Gegensatz zu einem zufälligen Rauschen). Wenn eines dieser drei Elemente fehlt, schlägt der Prozess fehl. Zusätzliche Elemente können ebenfalls vorhanden sein, wie z. B. Feedback, Medium (Kanal) und Kontext. ** QUELLE: Einer meiner Abschlüsse ist Kommunikationswissenschaft ** O.M.Y. vor 9 Jahren 1
** _ 2 ._ ** SETI ist ** nicht ** über Kommunikation, es geht um _Erforschung & Entdeckung_. Selbst wenn wir ein authentisch hergestelltes Signal entdecken, kann nicht garantiert werden, dass wir es jemals verstehen oder mit dem Absender kommunizieren können. ** QUELLE: [SETI Mission Statement] [1] ** [1]: http://www.seti.org/about-us O.M.Y. vor 9 Jahren 1
** _ 3 ._ ** Cross-Browser-Kompatibilität wird in der Regel durch (a) Browser-Hersteller ** verursacht, die nicht den Protokollen folgen, oder (b) schlecht geschriebene Protokolle, die fehlerhafte Implementierungen verursachen (zum Beispiel die berüchtigten IE _box-Modell-Fehler und auch sehen ). Deshalb haben wir jetzt HTML _5_ und CSS _3_, weil die Protokolle verbessert werden mussten. ** SOURCE: Seit einigen Jahren im Besitz meiner eigenen Webentwicklungsfirma ** O.M.Y. vor 9 Jahren 1
** _ 4 ._ ** Zuerst verwenden Funksignale, die auf der Frequenz "synchronisieren", AM-Protokolle (Amplitudenmodulation). FM (Frequenzmodulation) -Funksignale "synchronisieren" zu einem Zeitintegral. Die Protokolle für FM-Systeme umfassen _fixed_- und _dynamic_ -Elemente zur Verarbeitung der Informationen. Das dynamische Element ist die Einstellung _variable frequency_, die auf einen vordefinierten und begrenzten Frequenzbereich beschränkt ist. O.M.Y. vor 9 Jahren 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 durch analoge Hardware oder digitale Software zu verarbeiten. ** QUELLE: Persönliche Erfahrung als Elektroniker und auch [Wikipedia] [1] ** [1]: http://en.wikipedia.org/wiki/Frequency_modulation O.M.Y. vor 9 Jahren 1