USB für Embedded Systeme Video am Linux-Bus

Während PCs mit vielen USB-Ports ausgestattet sind, die vollwertige Schnittstellen sind, bietet Unterhaltungselektronik meist höchstens einen, der bestenfalls als Device-Port ausgeführt ist. Das schränkt die Anwendungsbereiche ein, schließlich ist ein Smartphone mehr als ein passiver Speicherstick.

Bei einfachen Digitalkameras stellt sich das Problem nicht, denn dort dient die Schnittstelle lediglich dazu, Fotos an einen PC oder einen Drucker zu übertragen. Anders sieht das bei den mobilen Computern wie Smartphones oder Tablet-PCs aus, aber auch bei Set-Top-Boxen beziehungsweise Festplattenrecordern. Dass viele solcher Geräte nicht einmal mit einem angeschlossenen USB-Stick umgehen können, ist heutzutage ein Unding. Die Nachfrage nach einer USB-Host-Funktion außerhalb des PC-Bereichs wächst also.

Im Folgenden demonstriert ein einfach zu implementierender Schaltkreis, wie sich Videodaten, die sich auf einem USB-Stick befinden, verarbeiten lassen und das Video auf einem Bildschirm anzeigen lässt. Auch das Hinzufügen des USB-Treibers für Linux-basierte Systeme wird mit diesem Baustein sichergestellt. Damit lässt sich unterschiedliche USB-Peripherie mit minimalem Entwicklungsaufwand an Embedded-USB-Hosts anschließen.

Bild 1 zeigt den Grundaufbau der Videoverarbeitungseinheit. Die erforderliche Hardware umfasst die auf dem Mikroprozessor »AM3359« basierende Plattform »DevKit8600« von Texas Instruments, einen VGA-Adapter, ein Bridge-Board, das EVM-Modul »FT313H« von FTDI sowie eine 12-V-Spannungsversorgung nebst einem 4-Port-USB-Hub, Tastatur und dem USB-Flash-Drive mit Mediaplayer-Anwendung und Schnellstart-Script im Root-Ordner.

Der 500-MHz-Mikroprozessor AM3359 basiert auf ARMs »Cortex-A8« und eignet sich gut für Multimedia-Anwendungen. Normalerweise müssen für Mikrocontroller/Mikroprozessoren eigene USB-Treiber geschrieben werden, wenn sie in Anwendungen wie der hier beschriebenen zum Einsatz kommen. Nur damit können sie mit den angeschlossenen USB-Geräten kommunizieren.

Entwickler stehen dann vor technischen Herausforderungen, was die Entwicklungsdauer oft in die Länge zieht. Der FT313H zur Integration Linux-basierter Prozessoren kann jedoch auf den USB-Host-Stack des AM3359 zugreifen. Der Baustein handhabt das USB-Protokoll, Scheduling-Daten etc. und gewährleistet, dass die Datenverarbeitungsleistung des AM3359 für wichtigere Aufgaben bereitsteht.

Da getrennte Transfers unterstützt werden, kann das Host-IC USB-Daten von der Tastatur und dem USB-Stick über den Hub verarbeiten - HID- und Massenspeicher-Class inklusive. Letztere ermöglicht die Ausführung von Bulk-Mode-Transfers, was für Videoanwendungen von Bedeutung ist, da diese höhere Transferraten erfordern.

Schnelle Übertragung

Der FT313H greift auf den System-Prozessorbus zu und eignet sich für den Transfer großer Datenmengen. Das USB-2.0-konforme IC (480 MBit/s) erweitert Systeme um High-Speed-USB-Host-Anbindung. Damit steht eine schnelle Datenübertragung beim Anschluss von Massenspeichern bereit. Auch Wireless-Dongles und modulare Systemerweiterungen sind möglich, da Standard-USB-Class-Treiber unterstützt werden.

Die Anbindung auf Leiterplattenebene übernimmt ein universeller 8- oder 16-Bit-Bus sowie eine NOR- oder SRAM-Schnittstelle. Die Batterieladeerkennung unterstützt batterie-betriebene Geräte und regelt die Stromversorgung externer Hardware für Betriebs-/Lademodi. Netzbetriebene Geräte lassen sich ebenfalls damit nutzen. Das Flash-Laufwerk in diesem Beispiel kann durch seine Verbindung mit dem FT313H Daten zum AM3359 zur weiteren Verarbeitung senden. Diese Daten überwacht der AM3359.

Durch Einbinden eines solchen Host-ICs in den Schaltkreis erhält der Mikrocontroller/Mikroprozessor vollen Zugriff auf die USB-Peripherie. Da das System Linux-basiert ist, sind alle nativen USB-Class-Treiber bereits vorhanden. Es müssen keine HID- oder Hub-Class-Treiber entwickelt werden. DMA-Transfers beschleunigen die Datenübertragung zusätzlich, da die benötigte Anzahl an Befehlen, um Daten vom Bus abzurufen, kleiner ist.

Die Inbetriebnahme ist vergleichsweise einfach: Bei noch abgeklemmter 12-V-Versorgung wird der USB-Hub in den Downstream-Port des FT313H-EVM-Moduls gesteckt. Nun finden die Tastatur und das Flash-Laufwerk an den USB-Ports des Hubs Anschluss. Es folgt die Verbindung des Monitors mit dem VGA-Port und dessen Einschalten. Sobald der Login-Bildschirm auf dem Monitor erscheint, gibt der Anwender über die Tastatur das Wort »root« ein. Nach Drücken der Enter-Taste erfolgt der Login zu Embedded-Linux.

Ein Verzeichniswechsel per »cd /media/sda1« bringt den Anwender auf den Flash-Speicher, anschließend sorgt der Befehl »./play demo.avi« für ein Abspielen des Videos. Um die Wiedergabe zu stoppen, muss einfach nur die 12-V-Versorgung abgeschaltet werden. Dieser Aufbau ist als Demo-Plattform erhältlich; sie erlaubt eine einfache Integration in Embedded-Designs und damit System-Prototyping und Tests.

Über den Autor:

LEE CHEE EE ist General Manager Product Development bei FTDI.

Host, Slave, Hub und HID   
Die USB-Kommunikation ist hierarchisch geregelt; die Bus-Spezifikation sieht einen zentralen Host-Controller (Master) vor, der die angeschlossenen Peripherie-Geräte (Slave-Clients) koordiniert. Daran können theoretisch bis zu 127 verschiedene Geräte angeschlossen werden. Da an einem USB-Port immer  nur ein USB-Gerät angeschlossen werden kann, ist ein Verteiler (Hub) nötig, wenn an einem Host mehrere Geräte angeschlossen werden sollen. Durch den Einsatz von Hubs entstehen Baumstrukturen, die alle im Host-Controller enden.
Zu den wichtigsten Übertragungsmodi zählen der isochrone Transfer, Interrupt-Transfer, Bulk-Transfer und Control-Transfer. Geräte der HID-Klasse (Human Interface Device), zum Beispiel Tastaturen, Mäuse und Joysticks, übertragen die Daten über den Interrupt-Transfer.
Solche Übertragungen dienen der Übermittlung kleiner Datenmengen, die zu  nicht genau bestimmbaren Zeitpunkten verfügbar sind. Im »Endpoint Descriptor« teilt das Gerät mit, in welchen maximalen Zeitabständen es nach neuen Daten gefragt werden möchte. Das kleinstmögliche Abfrageintervall beträgt bei Low-Speed 10 ms, bei Full-Speed 1 ms und bei High-Speed bis zu drei Abfragen in 125 µs. Die Daten sind mit einer Prüfsumme (CRC16) gesichert und werden bei Übertragungsfehlern bis zu dreimal durch die Hardware wiederholt.