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:
- Sie schließen ein USB-Gerät an einen Computer an (z. B. Ubuntu oder eine beliebige Art von Linux).
- Linux findet den Gerätetreiber für dieses Gerät (irgendwie - Bonus, wenn Sie es wissen!) Und lädt ihn
- Das Gerät ist nun unter verbunden
/dev/theDevice
- Benutzerraum-Apps können jetzt lesen / schreiben
/dev/theDevice
und 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?
linux
usb
linux-device-driver
smeeb
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Universal Serial Bus
.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:
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.
quelle