de.phhsnews.com


de.phhsnews.com / Gibt es ein aktuelles USB-Kommunikationsprotokoll?

Gibt es ein aktuelles USB-Kommunikationsprotokoll?


Die meisten von uns denken nie an unsere USB-Geräte, wir schließen sie einfach an und vergessen sie. Aber was ist, wenn Sie der neugierige Typ sind, der mehr darüber wissen möchte, wie USB funktioniert? Der heutige SuperUser Q & A-Post hat Antworten auf Fragen eines neugierigen Lesers.

Die heutige Frage-Antwort-Sitzung kommt dank SuperUser zustande - einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A-Websites.

Foto mit freundlicher Genehmigung von Evilelka Kowalski (Flickr).

Die Frage

SuperUser-Leser smeeb möchte wissen, ob es tatsächlich ein USB-Kommunikationsprotokoll gibt:

Laut Wikipedia USB:

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

Gibt es ein USB-Kommunikationsprotokoll ? Mein Verständnis ist:

  1. Du verbindest ein USB-Gerät mit einer Maschine (Ubuntu oder irgendeine Art von Linux zum Beispiel).
  2. Linux findet den Gerätetreiber für dieses Gerät irgendwie ( Bonus, wenn du es weißt! ) und lädt es
  3. Das Gerät ist jetzt unter / dev / theDevice verbunden.
  4. Userspace Apps können nun lesen und schreiben nach / dev / theDevice und der Treiber behandelt die Low-Level-Eingabe und -Ausgabe an das darunterliegende Gerät / die Hardware.

Soweit ich das beurteilen kann, erscheint ein USB-Kommunikationsprotokoll nirgendwo in diesem Flow. Wenn mein Verständnis stimmt, ist der USB nur die Kabel- und elektrische Verbindung zwischen dem PC und dem Gerät.

Falsche ich hier? Implementiert USB 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?

Gibt es ein aktuelles USB-Kommunikationsprotokoll?

Die Antwort

SuperUser-Mitwirkende RedGrittyBrick und projectdp haben die Antwort für uns. Zuerst RedGrittyBrick:

Ja (siehe USB-Protokolle).

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

Zum Beispiel können USB-Geräte Level-Templates wie Massenspeicher, Tastatur, Human-Interface-Gerät usw. und werden von einem generischen Gerätetreiber verwaltet. Einige USB-Geräte können auf einer niedrigeren Ebene kommunizieren, so dass die Low-Level-USB-Unterstützung des Betriebssystems erkennen kann, dass gerätespezifische höhere Treiber benötigt werden.

Gefolgt von der Antwort von projectdp:

Frage

Gibt es a Low-Level-USB-Kommunikationsprotokoll in Aktion und was ist das?

Antwort

Ja, gibt es. Die USB-Spezifikation enthält das USB-Protokoll, das die Art definiert, wie der Bus auf einer Bit-Ebene verwendet wird. Dies wäre das Low-Level-Protokoll, das den Protokollen höherer Ebenen zugrunde liegt (z. B. Massenspeicher, HID usw.).

Für Einzelheiten zur Funktionsweise des USB-Protokolls ist dieses OSDev-Wiki hilfreich. Hier noch eine interessante Beschreibung mit Sequenzdiagrammen zur Beschreibung der verschiedenen Datentransaktionen per USB-Protokoll:

Bonusfrage

Wie findet Linux den Gerätetreiber für dieses Gerät?

Bonusantwort

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

Ich habe diesen exzellenten Opensourceforu-Artikel paraphrasiert, der im Linux-Kontext viel detaillierter und verständlicher ist.

Schaut euch den Rest von die lebhafte Diskussion über den Thread Link weiter unten!


Haben Sie etwas zur Erklärung hinzuzufügen? Ton in den Kommentaren ab. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange Benutzern lesen? Sehen Sie sich den vollständigen Diskussionsfaden hier an.


Wie man den Launcher des Unity Desktops unter Ubuntu 16.04 nach unten verschiebt

Wie man den Launcher des Unity Desktops unter Ubuntu 16.04 nach unten verschiebt

Ubuntu 16.04 LTS enthält eine lang erwartete Funktion: Sie können jetzt den Launcher des Unity Desktops nach unten verschieben dein Bildschirm. Es ist nicht mehr auf der linken Seite des Bildschirms gesperrt. Diese Option erfordert jedoch einen Terminal-Befehl oder ein Tweaking-Tool, da sie im normalen Systemeinstellungen-Fenster von Ubuntu nicht angeboten wird.

(how-to)

Magic Numbers: Die geheimen Codes, die Programmierer auf Ihrem PC verstecken

Magic Numbers: Die geheimen Codes, die Programmierer auf Ihrem PC verstecken

Seit die erste Person 5318008 auf einem Taschenrechner geschrieben hat, verstecken Nerds geheime Zahlen in Ihrem PC und benutzen sie Aushandeln geheimer Handshakes zwischen Anwendungen und Dateien. Heute werfen wir einen Blick auf einige der unterhaltsameren Beispiele. Was sind magische Zahlen? Die meisten Programmiersprachen verwenden einen 32-Bit Integer-Typ, um bestimmte Arten von Daten hinter den Kulissen darzustellen - intern wird die Nummer gespeichert im RAM oder von der CPU als 32 Einsen und Nullen verwendet, aber im Quellcode würde es entweder im regulären Dezimalformat oder als hexadezimales Format geschrieben werden, das die Zahlen 0 bis 9 und die Buchstaben A bis F verwendet.

(how-to)