Gibt es wirklich ein "USB-Kommunikationsprotokoll"?

Nach 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 verbinden ein USB-Gerät mit einem Computer (z. B. Ubuntu oder irgendeine Art von Linux)
  2. Linux findet den Gerätetreiber für dieses Gerät (irgendwie- Bonus wenn Sie wissen!) und lädt es
  3. Das Gerät ist nun unter {[0] verbunden]}
  4. User Space Apps können jetzt auf /dev/theDevice lesen/schreiben und der Treiber verarbeitet die Low-Level-IO auf das zugrunde liegende Gerät / Hardware

Für mich erscheint nirgendwo in diesem Fluss ein "USB-Kommunikationsprotokoll". Wenn mein Verständnis richtig ist, ist der USB nur das Kabel und die elektrische Verbindung zwischen dem PC und dem Gerät.

Irre ich mich hier? Bietet USB implementieren Sie tatsächlich eine Art Low-Level-Protokoll, das den obigen Fluss unterstreicht? Wenn ja, was ist das und wie funktioniert es bei einer 30,000-Fußansicht?

Author: smeeb, 2015-01-27

5 answers

Ja, siehe USB-Protokolle

Wie ich es verstehe, definiert die USB-Spezifikation einen komplexen Satz von geschichteten Protokollen und Geräteprofilen.

USB-Geräte können beispielsweise Vorlagen auf hoher Ebene 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 OS-Low-Level-USB-Unterstützung erkennen kann, dass gerätespezifische Treiber auf höherer Ebene benötigt werden.

 47
Author: RedGrittyBrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-01-27 18:32:58

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

Antwort:

Ja, die USB-Spezifikation enthält das USB-Protokoll, das die Art und Weise definiert, wie der Bus auf Bitebene verwendet wird. Dies wäre das "Low-Level" - Protokoll, das den Protokollen höherer Ebene zugrunde liegt, dh Massenspeicher,HID usw.

Für Einzelheiten zur Funktionsweise des USB-Protokolls ist dieses OSDev Wiki hilfreich. Hier ist ein weiteres interessantes beschreibung Verwenden von 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?

Bonus Antwort:

'Unter Linux wird bei Verwendung eines USB-fähigen Kernels ein funktionierendes USB-Gerät über die Hardware und den Kernel aufgrund der USB-Spezifikation erkannt. Auf der Hardwareseite erfolgt die Erkennung durch den USB Host Controller. Dann im Kernel die Host-Controller-Treiber übernimmt und übersetzt die Low-Level-Bits auf dem Draht zu USB-Protokoll formatierten Informationen. Diese Informationen werden dann im USB-Kerntreiber im Kernel ausgefüllt.'

Ich habe aus diesem exzellenten Opensourceforu-Artikel paraphrasiert, der viel mehr Details und Klarheit über Ihre Frage im Linux-Kontext enthält.

 30
Author: projectdp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-12-03 20:55:25

Wie fast jede andere Art von Kommunikationsschnittstelle ist USB als Protokoll Stack implementiert. Die Ebenen innerhalb dieses Stacks, die allen oder mehreren Gerätetypen gemeinsam sind, werden durch die USB-Standards selbst definiert, was sowohl die Kompatibilität ermöglicht als auch verhindert, dass jedes Gerät redundantes Protokolldesign durchführt. Darüber hinaus abstrahiert jede Ebene des Protokolls Details, über die sich die nächste Ebene keine Sorgen machen muss. Also, wenn Sie tatsächlich schreiben die gerätespezifische Ebene, Sie haben nur generische "Senden" - und "Empfangen" - Funktionen, die Daten von Endpunkt A an Endpunkt B.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 eine gemeinsame Schnittstelle für die darüber liegende Ebene verfügbar machen. Auf diese Weise muss sich der Rest des Stapels nicht unbedingt ändern, wenn sich ein Teil des Protokollstapels ändert. Im Idealfall Protokolle auf höheren Ebenen der stack muss sich nicht einmal genau darum kümmern, welches Protokoll auf einer niedrigeren Ebene des Stacks verwendet wird. Im Allgemeinen kapselt jede aufeinanderfolgende Schicht auf dem Stapel die Nachricht, die von der nächsthöheren Schicht erzeugt wird, in ihrem eigenen Nutzlastfeld, während eine Nachricht gesendet wird. Wenn eine Nachricht empfangen wird, schält sich jede Schicht von dem für diese Schicht relevanten Teil ab und leitet ihre Nutzlast an die nächste geeignete Schicht auf dem Stapel weiter. Dies gilt für, nicht nur USB, aber fast jeder kommunikationsbus. Der TCP / IP / Ethernet-Stack ist zum Beispiel wahrscheinlich der am häufigsten verwendete. Die Aufgaben, für die bestimmte Ebenen üblicherweise verantwortlich sind, werden in Modellen beschrieben, z. B. im OSI-Modell .

In 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 offensichtlich Teil der USB-Standards selbst sein, nicht spezifisch für ein bestimmtes Gerät (zumal der Host keine möglichkeit zu wissen, 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 kann diese Schicht so ziemlich zusammengefasst werden, da" das Gerät übertragen kann, wenn der Host es dazu auffordert", so dass es auf dieser Ebene in USB kein besonders kompliziertes Protokoll gibt.

Als nächstes gibt es ein Standardprotokoll für , das eine datenpaket und wie es vom Absender zum Empfänger weitergeleitet werden soll. Diese Schicht muss auch Teil des USB-Standards selbst sein, damit die anfängliche Kommunikation, um festzustellen, welcher Gerätetyp angeschlossen wurde, stattfinden kann, 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 in USB auch das Konzept einer Endpunkt-ID. Auf diese Weise kann jedes Gerät mehrere USB-Endpunkte haben, die multiplex sind und durch den Standard-USB-Stack demultiplexiert, ähnlich wie Sockets durch den Standard-TCP/IP-Stack multiplexiert und demultiplexiert werden. Eine Anwendung kann jeden dieser Endpunkte als separate Datenströme behandeln.

Schließlich ist das Protokoll für das Gerät selbst definiert. Beachten Sie, dass es tatsächlich einige gängige vorgefertigte gibt, die als Teil des USB-Standards für gängige Anwendungsfälle wie Massenspeichergeräte, Mäuse, Tastaturen usw. enthalten sind., so dass jeder Gerätehersteller muss das Rad nicht neu erfinden. Kompliziertere Geräte können jedoch auf dieser Ebene ihr eigenes benutzerdefiniertes Protokoll erstellen. Die Ausgabe dieser Schicht für eine gegebene Übertragung wird als Nutzlast eines Datenpakets auf der vorherigen Schicht übergeben. Beachten Sie, dass bei ausreichend komplizierten Geräten der gerätespezifische Teil des Protokolls selbst in mehrere unabhängige Ebenen unterteilt werden kann, die unteren Ebenen dies jedoch nicht wissen oder sich darum kümmern müssen. Alles, was sie wissen müssen, ist, dass sie müssen übergeben Sie einen bestimmten Satz von Bytes vom Host an einen bestimmten Geräteendpunkt oder von einem bestimmten Geräteendpunkt an den Host. Auch hier ermöglicht die Standardschnittstelle zwischen den Ebenen die Trennung von Bedenken, sodass sich eine Schicht nicht um das Innenleben einer anderen Schicht kümmern muss, sondern nur um die spezifischen Daten, die sie an die Schichten unmittelbar darüber oder darunter im Stapel übergeben oder erwarten sollte.

 14
Author: reirab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-01-28 03:37:30

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 ist für alle USB-Geräte üblich (unterscheidet sich jedoch zwischen USB2 und USB3).

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

AUF einer weiteren 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 alle USB-Geräte dies erfüllen müssen, wird ein gemeinsames Protokoll verwendet, um dies anzuordnen.

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,...). Am geräte unterstützen Null oder eines dieser Funktionsprotokolle.

 9
Author: MSalters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-01-27 22:30:44

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

  • Damit die Kommunikation stattfinden kann, müssen Protokolle vereinbart werden.
  • Kommunikationssysteme verwenden gut definierte Formate (Protokoll) zum Austausch von Nachrichten.
  • Ein Protokoll muss die Syntax, Semantik und Synchronisation der Kommunikation definieren.
  • Ein Protokoll kann daher als Hardware, Software oder beides implementiert werden.

Eine einfache Denkweise ist, dass ein Protokoll eine vordefinierte und vereinbarte Methode ist, um etwas zu tun, in diesem Fall ist das etwas wie man Daten in und aus einem USB-Gerät verschiebt. Hardware-weise jede pin hat eine pre-definiert spannung ebene und nutzung protokoll, jeder typ von gerät hat eine pre-definiert nutzung protokoll für jeder pin, und jede daten paket hat eine vordefinierte Syntax und Datenformat. Es ist auch ein Kommunikations-Händeschütteln-Protokoll integriert. Zusammengenommen sind dies alles Teile der Sammlung von Standards für die Verwendung von USB-Geräten, auch bekannt als das USB-Protokoll, das von den Mitgliedern des [[29]}the USB Implementers Forum, Inc.beschlossen (dh entworfen, vorgeschlagen, diskutiert, überarbeitet und schließlich vereinbart) wird.

Also ja, es gibt ist ein USB-Protokoll, oder genauer gesagt gibt es sind eine Reihe von vordefinierte und vereinbarte USB-Protokolls für verschiedene USB-Anwendungen.

 5
Author: O.M.Y.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-01-28 01:26:14