Gibt es wirklich ein „USB-Kommunikationsprotokoll“?

Gibt es wirklich ein „USB-Kommunikationsprotokoll“?

EntsprechendWikipedia, 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 einen „USBKommunikationsprotokoll"? MeinVerständnisist das:

  1. Sie schließen ein USB-Gerät an eine Maschine an (z. B. Ubuntu oder eine beliebige Art von Linux).
  2. Linux findet den Gerätetreiber für dieses Gerät (irgendwie -Bonuswenn du es weißt!) und lädt es
  3. Das Gerät ist nun verbunden unter/dev/theDevice
  4. Apps im Benutzerbereich können nun lesen/schreiben /dev/theDeviceund der Treiber übernimmt die Low-Level-E/A für das zugrunde liegende Gerät/die Hardware

Für mich taucht in diesem Ablauf nirgends ein „USB-Kommunikationsprotokoll“ auf. Wenn ich es richtig verstehe, ist USB nur das Kabel und die elektrische Verbindung zwischen dem PC und dem Gerät.

Liege ich da falsch? Implementiert USB tatsächlich eine Art Low-Level-Protokoll, das den obigen Ablauf unterstreicht? Wenn ja, was ist das und wie funktioniert es aus 30.000 Fuß Höhe?

Antwort1

Ja, sieheUSB-Protokolle

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

Beispielsweise können USB-Geräte High-Level-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 Low-Level-USB-Unterstützung des Betriebssystems erkennen kann, dass gerätespezifische High-Level-Treiber erforderlich sind.

Antwort2

Frage: Gibt es ein aktives USB-Kommunikationsprotokoll auf niedriger Ebene und um welches Protokoll handelt es sich dabei?

Antwort:

Ja, die USB-Spezifikation beinhaltet dieUSB-Protokolldas die Art und Weise definiert, wie der Bus auf Bitebene verwendet wird. Dies wäre das „Low-Level“-Protokoll, das den Protokollen auf höherer Ebene zugrunde liegt, z. B. Massenspeicher, HID usw.

Einzelheiten zur Funktionsweise des USB-Protokolls finden Sie hierOSDev-Wikiist hilfreich. Hier ist ein weitererinteressante BeschreibungVerwenden Sie Sequenzdiagramme, 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 ein funktionierendes USB-Gerät über denHardwareUndKernelaufgrund der USB-Spezifikation. Auf der Hardwareseite wird die Erkennung vom USB-Host-Controller durchgeführt. Dann übernimmt im Kernel der Host-Controller-Treiber und übersetzt die Low-Level-Bits auf dem Kabel in Informationen im USB-Protokollformat. Diese Informationen werden dann in den USB-Core-Treiber im Kernel eingetragen.'

Ich habe diese ausgezeichneteOpensourceforu-Artikel, das Ihre Frage im Linux-Kontext viel detaillierter und klarer beschreibt.

Antwort3

Wie fast jede andere Art von Kommunikationsschnittstelle wird USB als Protokoll implementiertStapel. Die Ebenen innerhalb dieses Stapels, die für alle oder mehrere 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 redundante Protokolldesigns durchführt. 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 Schicht schreiben, haben Sie nur generische „Sende-“ und „Empfangs“-Funktionen, die Daten von Endpunkt A zu Endpunkt B bringen. Sie als Gerätedesigner müssen sich nicht darum kümmern, wie das geschieht. Darüber hinaus können niedrigere Ebenen innerhalb des Protokollstapels die Implementierung ändern, solange sie eine gemeinsame Schnittstelle zur Schicht über ihnen bereitstellen. Auf diese Weise muss sich der Rest des Stapels nicht unbedingt ändern, wenn sich ein Teil des Protokollstapels ändert. Im Idealfall müssen sich Protokolle auf höheren Ebenen des Stapels nicht einmal genau darum kümmernwelcheProtokoll wird auf einer niedrigeren Ebene des Stapels verwendet. Im Allgemeinen kapselt jede nachfolgende Schicht im Stapel die von der nächsthöheren Schicht erzeugte Nachricht in ihrem eigenen Nutzlastfeld ein, während eine Nachricht gesendet wird. Wenn eine Nachricht empfangen wird, löst jede Schicht den 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-Stapel ist beispielsweise wahrscheinlich der am häufigsten verwendete davon. Die Aufgaben, für die bestimmte Schichten üblicherweise verantwortlich sind, werden in Modellen beschrieben, wie z. B. demOSI-Modell.

Bei USB gibt es ein Protokoll der physischen Schicht, das Spannungszustände/Timing usw. auf dem Kabel definiert und wie sie interpretiert werden sollen. Dieses Protokoll muss offensichtlich Teil der USB-Standards selbst sein und darf nicht spezifisch für ein bestimmtes Gerät sein (insbesondere, da der Host nicht wissen kann, welche Art von Gerät an einen bestimmten USB-Anschluss angeschlossen wird).

Als nächstes gibt es ein Busverwaltungsprotokoll, das beschreibt, wer wann über den Bus kommunizieren kann. Dies wird im OSI-Modell als Medienzugriffsschicht bezeichnet. Bei USB kann diese Schicht im Wesentlichen wie folgt zusammengefasst werden: „Das Gerät kann senden, wenn der Host es dazu auffordert.“ Daher gibt es auf dieser Schicht bei USB kein besonders kompliziertes Protokoll.

Als nächstes gibt es ein Standardprotokoll fürBeschreibung eines Datenpaketsund wie es vom Sender zum Empfänger geleitet werden soll. Diese Schicht muss auch Teil des USB-Standards selbst sein, damit die anfängliche Kommunikation zur Ermittlung des angeschlossenen Gerätetyps erfolgen kann, bevor der Host den spezifischen Gerätetyp tatsächlich kennt. Zusätzlich dazu, dass jedes Gerät auf dieser Schicht eine bestimmte ID hat, gibt es bei USB auch das Konzept einer Endpunkt-ID. Dadurch kann jedes beliebige Gerät mehrere USB-Endpunkte haben, die vom Standard-USB-Stack gemultiplext und demultiplext werden, ganz ä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 noch das für das Gerät selbst definierte Protokoll. Beachten Sie, dass es tatsächlich einige gängige vorgefertigte Protokolle gibt, die als Teil des USB-Standards für gängige Anwendungsfälle wie Massenspeichergeräte, Mäuse, Tastaturen usw. enthalten sind, sodass nicht jeder Gerätehersteller das Rad neu erfinden muss. Für kompliziertere Geräte steht es jedoch frei, auf dieser Ebene ihr eigenes benutzerdefiniertes Protokoll zu entwickeln. Die Ausgabe dieser Ebene für eine bestimmte Übertragung wird als Nutzlast eines Datenpakets an die vorherige Ebene übergeben. 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 dies jedoch nicht wissen oder sich darum kümmern müssen. Sie müssen lediglich wissen, dass sie einen bestimmten Satz 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 eine Trennung der Belange, sodass sich eine Ebene nicht um die internen Abläufe einer anderen Ebene kümmern muss, sondern nur um die spezifischen Daten, die sie an die Ebenen direkt darüber oder darunter im Stapel übergeben oder von ihnen empfangen soll.

Antwort4

Vielleicht liegt ein Teil der Antwort in der Definition des Ausdrucks „Kommunikationsprotokoll". Wenn Sie die gleiche Quelle wie Sie (Wikipedia) aufrufen, finden Sie hilfreiche Informationen wie:

  • Damit eine Kommunikation stattfinden kann, müssen Protokolle vereinbart werden.
  • Kommunizierende Systeme verwenden klar definierte Formate (Protokolle) zum Nachrichtenaustausch.
  • Ein Protokoll muss die Syntax, Semantik und Synchronisierung der Kommunikation definieren.
  • Ein Protokoll kann daher als Hardware, Software oder beides implementiert werden.

Man kann es sich ganz einfach so vorstellen:Ein Protokoll ist eine vordefinierte und vereinbarte Vorgehensweise, in diesem Fall dieetwasist, wie man Daten in und aus einem USB-angeschlossenen Gerät verschiebt. HardwaremäßigStifthat eine vordefinierte Spannungsstufe und ein Nutzungsprotokoll, jeder Gerätetyp hat ein vordefiniertes Nutzungsprotokoll fürjeder Stift, und jedeDatenpakethat eine vordefinierte Syntax und ein vordefiniertes Datenformat. Es gibt auch eine KommunikationsHändeschüttelnProtokoll integriert. Zusammen sind dies alles Teile der Sammlung von Standards für die Verwendung von USB-Geräten, auch bekannt alsdas USB-Protokoll, das von den Mitgliedern desdas USB Implementers Forum, Inc.

Also ja, daIstein USB-Protokoll, oder genauer gesagtSindeine Reihe vordefinierter und vereinbarter USB-ProtokolleSfür verschiedene USB-Anwendungen.

verwandte Informationen