Implementierung von USB in Embedded Designs An USB führt kein Weg vorbei

Nie war der Einbau von USB in eine Embedded-Anwendung so einfach wie heute. In den meisten Fällen benötigt man dazu kaum mehr als ein zusätzliches IC sowie ein Verständnis der grundlegenden Paketübertragungsstruktur der USB-Kommunikation. Den Baustein kann man kaufen; wie die USB-Kommunikation abläuft, steht hier.

Implementierung von USB in Embedded Designs

Nie war der Einbau von USB in eine Embedded-Anwendung so einfach wie heute. In den meisten Fällen benötigt man dazu kaum mehr als ein zusätzliches IC sowie ein Verständnis der grundlegenden Paketübertragungsstruktur der USB-Kommunikation. Den Baustein kann man kaufen; wie die USB-Kommunikation abläuft, steht hier.

USB ist in modernen Embedded-Systemen schon beinahe eine De-facto-Schnittstelle. Leicht und einfach kann mit einem standardmäßigen USB-Stick Software und Firmware aktualisiert werden, kann kommuniziert und können Updates durchgeführt werden. Im Allgemeinen muss der Anwender noch nicht einmal ein Gehäuse öffnen. Dies steht in krassem Gegensatz zur Vergangenheit, in der man mehrere CDs oder Dutzende von Disketten laden oder ein EPROM umprogrammieren musste.

Darüber hinaus steht Embedded-Systemen mit einem USB-Anschluss die ganze Welt der USB-Peripheriegeräte offen, die für den Massenmarkt der Desktop-PCs entwickelt wurden. Das Problem, das Embedded-Design-Ingenieure lösen müssen, liegt jedoch darin, dass der Einbau eines USB-Host-, d.h. Master-Systems – wenngleich nicht sonderlich schwierig – keine einfache Aufgabe darstellt.

Ein Embedded-USB-Hostsystem muss in der Lage sein, einen USB-Stick oder ein anderes USB-Slave-Gerät (z.B. Maus, Tastatur oder Festplatte) zuverlässig zu erkennen, die betreffende Software unter Verwendung geeigneter Treiber zu prüfen und zu laden sowie gegen nicht autorisierten Zugriff zu schützen (d.h. zu verhindern, dass Daten via Stick oder Festplatte das System verlassen). Um dies zu erreichen, ist normalerweise wenig mehr als ein zusätzliches IC sowie ein Verständnis der grundlegenden Paketstruktur der USB-Kommunikation notwendig. Nichtsdestoweniger – der USB-Host stellt an Embedded-Hardware erhöhte Anforderungen, insbesondere an den Prozessor und an das Betriebssystem (OS). Wenn ein Element davon oder beide nicht kompatibel sind, kann das ein Upgrade erforderlich machen.

USB kennt zwei Versionen: USB 1.1 und USB 2.0. USB 1.1 unterstützt die beiden Geschwindigkeitsformate 1,5 Mbit/s (low speed) und 12 Mbit/s (full speed), während USB 2.0 den so genannten High-Speed-Modus unterstützt, der 480 Mbit/s überträgt. Bei USB 2.0 handelt es sich nicht um ein anderes Protokoll, sondern um eine Erweiterung von USB 1.1, die beispielsweise Befehle zur Erkennung der High-Speed-Fähigkeit sowie den Übergang in den bzw. das Verlassen des High-Speed-Modes abdeckt.

Universal, Open und Enhanced Host Controller Interface

Bei USB 1.1 gab es zwei Spezifikationen der Host-Controller-Schnittstelle: UHCI (Universal Host Controller Interface) und OHCI (Open Host Controller Interface). Beide hatten geringfügig unterschiedliche Zielsetzungen. UHCI wollte vor allem die Hardware vereinfachen, OHCI die Software. Mit der Einführung von USB 2.0 wurde das Enhanced Host Controller Interface (EHCI) geschaffen, um die USB-2.0-spezifischen Details auf Registerebene zu beschreiben.

Bei einem Desktop-PC sind im Wesentlichen drei USB-Schlüsselkomponenten vorhanden: der Host-Controller, der USB-Protokollstack und der USB-Klassentreiber. Normalerweise ist der Host-Controller auf der Systemplatine untergebracht. Der USB-Protokollstack enthält den Gerätetreiber (auch als USB Bus Interface Layer bezeichnet), die Software-Schicht des USB-Systems sowie die unterstützten Klassentreiber. Bild 1 zeigt ein Beispiel einer USB-Stack-Architektur mit allen unterstützten Ports.

Bei Embedded-Anwendungen werden überwiegend dieselben Komponenten eingesetzt: Ein USB-Host-Controller plus einem Echtzeit-Betriebssystem, das den USB-Stack enthält. Der Hauptunterschied liegt darin, dass in einem PC eine Menge Speicher und ein GHz-Prozessor vorhanden sind und der Leistungsverbrauch in der Dringlichkeit nicht weit oben steht. Im Vergleich dazu weisen Embedded-Anwendungen nur eingeschränkte Speicherkapazität und Prozessorgeschwindigkeit auf, sie fordern zwingend eine geringe Verlustleistung und brauchen möglicherweise kein Echtzeit-Betriebssystem.

Viele moderne, hochentwickelte Embedded-Mikroprozessoren enthalten bereits einen USB-Host-Controller und werden von verschiedenen Betriebssystem-Anbietern unterstützt. Beispiele hierfür sind einige der PowerQUICC-Kommunikationspro-zessoren von Freescale Semiconductor, der jüngste ARM9-basierte Mikroprozessor LPC3180 von Philips und unlängst vorgestellte Derivate der 68K/ColdFire-Familie, ebenfalls von Freescale. Sowohl der LPC3180 von Philips als auch Freescales MCF5329 enthalten einen USB-2.0-Full-Speed-Baustein mit Host-Controller (OHCI-konform) sowie On-The-Go-Controller (OTG) plus volle Host-Eigenschaften auf dem Chip. USB-Host-Fähigkeit wird darüber hinaus von dem 16-bit-Mikrocontroller CY7C67300 von Cypress geboten.

Diese Bausteine werden durch viele Drittanbieter von Betriebssystemen gut unterstützt, welche den benötigten USB-Stack und die Treiber zur Verfügung stellen. Bei dieser Art von Mikroprozessoren findet wegen der Tatsache, dass die meisten gängigen Treiber bereits enthalten sind, häufig Linux/embedded Linux als OS Verwendung. Die einzige erforderliche Zusatz-Hardware ist der entsprechende USB-Transceiver für jeden Port, der die physikalische Verbindung verarbeitet, so wie die ISP110x-Fami-lie von Philips oder der Baustein SP5301CY von Sipex. Es ist zu beachten, dass man für einen OTG-Block einen USB-OTG-Physical-Layer-Transceiver wie den ISP1301 von Philips einsetzen muss.

Für mittlere oder einfache Embedded-Prozessoren oder MCUs ohne einen Host-Controller auf dem Chip besteht eine übliche Hilfskonstruktion darin, einen externen USB-Host- oder OTG-Controller einzusetzen, wie er von Cypress oder Philips erhältlich ist. Philips beispielsweise hat eine breite Palette von Full- und High-Speed-Host-/OTG-Controllern mit einem Standard-16/32-bit-Mikroprozessor-Interface im Angebot. Unabhängig davon, welche Art von USB-Host-Controller Verwendung findet, muss der Entwickler die benötigte USB-Funktionalität in der Firmware implementieren, damit die angeschlossenen USB-Geräte erkannt und die entsprechenden Funktionen aktiviert werden.