USB-Kommunikationsprotokoll Software bestimmt Hardware

Wenn es etwas gibt, was in der PC-Welt die Bezeichnung »allgegenwärtig« verdient, dann ist es die USB-Schnittstelle. Nicht nur, dass sie die bevorzugte Computerschnittstelle darstellt, nicht selten ist es sogar das einzige Interface moderner Rechner. Das Design einer USB-Schnittstelle ist eine echte Herausforderung, besonders die Softwareseite. Ohne die richtigen Treiber und Protokolle bleibt nur ein Stückchen Metall mit Plastikeinsatz.

Die Gründe für die außerordentliche Popularität des Universal Serial Bus sind klar: Diese Schnittstelle ist kostengünstig, betriebssicher, kompakt, einfach in der Anwendung und deckt einen weit gespannten Aufgabenbereich ab. Tatsächlich ist es der USB, der die Begriffe »Plugand- Play« und »Hot Swapping« mit Leben erfüllt hat, denn mit einem solchen Port ist es nicht mehr nötig, Geräte vor dem Anschließen abzuschalten oder sich mit der Installation und Konfiguration herumzuschlagen.

Man verbindet zwei Geräte mit einem passenden Kabel, wartet bis alles erkannt und identifiziert wurde und schon ist das System einsatzbereit. Das Anwendungsspektrum reicht von Eingabegeräten (beispielsweise Tastatur oder Maus) und Ausgabegeräten (zum Beispiel Drucker) bis hin zu intensiv bidirektionalen Aufgaben wie dem Anschluss externer Massenspeicher.

Diese Beispiele haben durchweg mit dem PC zu tun, mit dem die Geschichte des USB begann. Seinerzeit war alles etwas einfacher – zumindest für eine serielle Schnittstelle. Der PC fungierte stets als Kommandozentrale (Host), während die verschiedenen angeschlossenen Geräte als Peripherie dienten. Doch mit der Zeit wurden elektronische Produkte in ihrem Funktionsumfang und ihrem Verhalten immer anspruchsvoller und ausgereifter.

Kein elektronisches Gimmick taugt heutzutage etwas, wenn es nicht problemlos mit anderen kommunizieren kann. Ein Beispiel ist die Digitalkamera, deren einziger Vorteil gegenüber »echten« Fotoapparaten der ist, dass sich die Bilder digital speichern und exportieren lassen. Da gibt es die Möglichkeit, die Kamera an den PC anzuschließen, um daraufhin die Bilddaten zu übertragen und beispielsweise an den Drucker zu senden. Viele Kameras und Drucker können auch direkt mittels des als »PictBridge« bezeichneten Foto-Transfer-Standards miteinander kommunizieren. Dabei werden Kamera und Drucker mittels eines herkömmlichen USB-Kabels verbunden, der Drucker wird zum Host.

Spezialitäten wie PictBridge oder der neuere Peer-to-Peer-USBStandard »On-the-Go« (OTG) lassen sich über das USB-Kabel bereitstellen, weil es sich um eine recht sorgfältig durchstrukturierte Kommunikationsschnittstelle handelt. Dank der Gliederung des Protokolls in mehrere Schichten lassen sich die mechanischen und elektrischen Anforderungen vollkommen losgelöst von den übergeordneten Kommunikationsanforderungen ausarbeiten und verwalten. Selbstverständlich muss der Designer für diese Flexibilität bezahlen.

Die einzelnen Schichten

Wie bei jedem modernen Kommunikationsprotokoll liegt auch dem USB-Standard eine gründlich definierte Struktur aus mehreren Schichten zugrunde. In allgemeiner Form sind diese in Bild 1 dargestellt. Diese Untergliederung in verschiedene Schichten (Layer) hat den Zweck, die einzelnen Elemente der Implementierung in logische Abschnitte zu gliedern, die jeweils einen bestimmten Teil der Lösung abdecken.

Man kann sich dies so vorstellen, als führe jede Schicht Dienste für die nächst höhere Schicht aus. Wie die einzelne Schicht implementiert ist, spielt keine Rolle. Die höhere Schicht muss lediglich wissen, wie sie mit der nächst niedrigeren Schicht zu interagieren hat.

Im Bild 1 hat es den Anschein, als würden die Daten in horizontaler Richtung fließen, also in jeder der Schichten direkt zwischen Host und dem jeweiligen Zielgerät (Target). In Wirklichkeit fließen zwar sämtliche Daten über die physischen Kabel und die Hubs, doch macht der virtuelle Datenfluss deutlich, wie die Kommunikation in sämtlichen Schichten verwaltet wird und jede Schicht ausschließlich mit den sie betreffenden Details zu tun hat.

Zum Beispiel handelt es sich bei der »Default Control Pipe« der USB-Kommunikation um eine maschinennahe Verbindung, die beim Einschalten der Betriebsspannung eingerichtet wird, um auf die Konfigurations-, Status- und Steuerungsinformationen des Geräts zugreifen zu können. Über den Device-Layer sind diese Informationen für die Applikationssoftware zugänglich.

Beruht die Entwicklung auf diesem Ansatz, so ist es einfach, auf einer hohen Ebene den Applikationscode zu schreiben, der mit dem   »System« interagieren kann. Hierzu ist keine detaillierte Kenntnis des Systems nötig. Alles, was man wissen muss, ist, wie man das USB-System konfiguriert und mit ihm kommuniziert. Damit ist die Arbeitsweise der USB-Kommunikation selbstverständlich nur in groben Umrissen skizziert – aber mehr Informationen sind nicht wichtig.

Die Entwicklungsumgebung »Designer« von Altium stellt einen plug-and-play-fähigen Hardwaredesign-Ansatz (»OpenBus«) zur Verfügung und hält auch eine entsprechende Vorgehensweise für das Softwaredesign bereit (»Software Platform Builder«). Beide gemeinsam vereinfachen das Design und die Implementierung eines Konzepts in der Art des USB-Kommunikationssystems deutlich. Anstatt sich um Dinge wie etwa Bus-Layer, Hubs oder Default- Control-Pipes kümmern zu müssen, kann sich der Entwickler vollständig dem Applikationscode auf der höheren Ebene widmen.