Embedded-Systeme & Mikrocontroller Keine Angst vor großen Datenmengen

09.09.2013

Ob Konsumeranwendung oder industrielle Lösung: Der Bedarf nach schnellen Datenschnittstellen ist groß. Mit einem einfachen Schaltkreis lässt sich USB-Funktionalität auf Linux-Basis zu einem Design hinzufügen - so wird die Entwicklungsarbeit leichter.

Auch abseits des PC-Bereichs steigt Nachfrage nach USB-Host-Funktionalität. Vor allem tragbare Consumergeräte wie Smartphones, aber auch immer mehr Home-Entertainment-Geräte wie Settop-Boxen und Spielekonsolen sind mit USB ausgestattet. Der hier beschriebene, einfach integrierbare Schaltkreis ermöglicht die Verarbeitung und direkte Darstellung von Videoinhalten, die sich auf einem USB-Flash-Speicherstick befinden. Auch die Schwierigkeiten beim Hinzufügen von USB-Treibern in Linux-Systeme werden damit beseitigt. Der grundlegende Aufbau der Videoverarbeitungseinheit ist in Abbildung 1 dargestellt. Die Hardware umfasst:

Eine AM3359-basierte DevKit8600-Plattform von Texas Instruments, ein VGA-8000-Adapter, ein Bridge-Board, ein EVM-Modul FT313H EVM von FTDI, eine 12-V-Spannungsversorgung, ein 4-Port Hi-Speed USB Hub, eine USB-Tastatur, ein Hi-Speed USB-Flash Drive (mit Media-Player und Schnellstart-Skript, das in den Root-Ordner kopiert ist).

Der AM3359 basiert als 500-MHz-Mikroprozessor auf dem 32-Bit-RISC-ARM-Cortex-A8-Core und eignet sich optimal für moderne Multimedia-Applikationen. Mikrocontroller und Mikroprozessoren benötigen normalerweise speziell für sie ausgelegte USB-Treiber, wenn sie in der hier beschriebenen Anwendung zum Einsatz kommen sollen, um mit angeschlossenen USB-Geräten Daten auszutauschen. Dadurch ergeben sich ungewollte technische Probleme und längere Entwicklungszeiten, vor allem für Entwickler, die keine Erfahrung auf diesem Gebiet vorweisen. Der Host-Controller FT313H unterstützt jedoch die Integration mit Linux-basierten Prozessoren. Er greift auf den nativen USB-Host-Stack im AM3359 zu. Der Controller verwaltet das USB-Protokoll und Scheduling etc., womit die Verarbeitungsleistung des AM3359 ganz auf wesentliche Aufgaben konzentriert wird. Da auch getrennte Transfers unterstützt werden, kann der Host-Controller USB-Daten sowohl von der Tastatur als auch vom Flash-Laufwerk über den Hub verarbeiten, einschließlich Support für HID Class und Massenspeicher. Letzterer ermöglicht Bulk-Mode-Transfers, was in Videoanwendungen entscheidend ist, da schnellere Datenübertragungsraten erforderlich sind.Der Linux-USB-Host-Controller FT313H lässt sich einfach in Schaltkreise integrieren, da er auf dem Prozessorbus des Systems aufsetzt. Aufgrund seiner hohen Leistungsfähigkeit eignet er sich optimal für die Dateien-Übertragung, gerade dann, wenn große Datenmengen bewegt werden müssen. Der mit 480 MBit/s nach USB 2.0 konforme Baustein fügt Hi-Speed-USB-Host-Funktion hinzu und ermöglicht schnelle Dateitransfers bei der Anbindung von Massenspeichern. Auch eine Anbindung von Wireless Dongles und die Erweiterung modularer Systeme sind mithilfe von Standard-USB-Treibern möglich. Zu den Anbindungen auf Board-Ebene zählen ein universeller 8- oder 16-Bit-Bus, eine NOR- oder SRAM-Schnittstelle. Neben netzbetriebenen Geräten erlaubt die Batterieladeerkennung den Einsatz batteriebetriebener, tragbarer Anwendungen. Sie steuert den Betriebsstrom für externe Hardware im Betriebs- oder Lademodus.Durch die Verbindung zum FT313H kann das Flash-Laufwerk in diesem Beispiel Daten zum AM3359 zur Weiterverarbeitung senden. Die Überwachung erfolgt über den AM3359. Durch den Hi-Speed-USB-Host-Controller-IC im Schaltkreis erhält die MCU beziehungsweise der Prozessor Zugriff auf USB- Peripherie, was sonst nicht möglich wäre. Da das System auf Linux basiert, stehen alle nativen USB-Treiber bereits zur Verfügung, was die Entwicklung von HID- oder Hub-Class-Treibern erübrigt. DMA-Transfers helfen bei der schnelleren Datenübertragung, da die Zahl der Befehle verringert wird, die zum Abruf von Daten vom Bus erforderlich ist. Der Aufbau des Schaltkreises ist wie folgt: Bei abgeklemmter 12-V-Versorgung wird der USB-Hub in den Downstream-Anschluss des EVM- Moduls gesteckt. Anschließend werden die Tastatur und das Flash-Laufwerk an die USB-Ports am Hub angeschlossen. Nun wird der Monitor mit dem VGA-Port verbunden und der Monitor eingeschaltet. Warten Sie, bis das Login-Fenster erscheint. Geben Sie über die USB-Tastatur das Wort „root“ (in Kleinbuchstaben) ein und drücken Sie die Eingabetaste. Damit erfolgt der Login zu Embedded Linux. Über die Tastatur wird der Befehl „cd /media/sda1“ eingegeben. Achten Sie auf das Leerzeichen nach „cd“. Nun wird über die Tastatur der Befehl „./play demo.avi“ eingegeben, um die Wiedergabe zu starten. Um die Wiedergabe zu stoppen, kann einfach die 12-V-Versorgung abgeschaltet werden. Die Demo-Plattform des Schaltkreises ist über die Produktnummer UMFT313EV erhältlich. Hier lässt sich die DevKit8600-Plattform, der VGA-Adapter, das Bridge-Board und EVM-Modul anschließen. Die Plattform ermöglicht eine einfache Integration in Embedded-Designs für das weitere System-Prototyping und für die Validierung. Bei der Integration eines USB-2.0-High-Speed-konformen Host-Controllers müssen sowohl Hardware- als auch Software-Elemente berücksichtigt werden. Abbildung 2 beschreibt die Systemarchitektur. Der USB-Host-Software Stack enthält folgende Ebenen (von der untersten zur obersten): Host-Controller-Treiber (HCD); USB-Treiber (USBD), USB-Funktionstreiber und das Anwenderprogramm. Der HCD ist hardwarespezifisch und steuert die USB-Host-Controller-Hardware direkt über den plattformabhängigen Systembus. Der USBD ist ein Software-Modul, das den generellen USB-Betrieb vervollständigt, zum Beispiel die USB-Enumeration. Es stellt eine Schnittstelle für Funktionstreiber dar. Der Funktionstreiber bedient spezielle USB-Peripherie oder eine Klasse von Peripherie, wie etwa Massenspeicher oder Drucker. Das Anwenderprogramm bietet direkte Interaktion mit dem Endanwender und ermöglicht die Nutzung von Diensten, die über die Funktionstreiber bereitgestellt werden. In der Regel werden die USBD- und Funktionstreiber als Teil des Betriebssystems, zum Beispiel von Linux, bereitgestellt. Allerdings müssen der HCD-Teil und der plattformabhängige Systembus-Zugriff getrennt entwickelt werden. Bei den Anwendungsprogrammen sind universelle Anwendungen wie ein Dateimanager als auch USB-Peripherie-spezifische Anwendungen möglich. Letztere müssen natürlich speziell entwickelt werden.Das Host-System benötigt eine Speicherschnittstelle, um auf den AM3359-Mikroprozessor zuzugreifen. Dies erfolgt über den integrierten General-Purpose Memory Controller (GPMC). Auf der Softwareseite lässt sich ein Embedded Linux OS hochladen. In diesem Fall wurde die Kernel-Version 3.1.0 spezifiziert. Dabei kommt es auf die Wahl der Softwaremodule an, die nötig sind. In unserem Beispiel wird die erforderliche USB-Funktion durch das OS bereitgestellt und in den Software Platform Builder eingebunden. Nachdem der OS-Kernel fertiggestellt ist, besteht die Host-Software-Integration aus zwei Teilen:

Dem Hinzufügen des USB-Host-Controller-ICs als Peripherie für den AM3359 über den GPMC und die Entwicklung des USB-Host-Controller-HCD-Plattformtreibers.

Für dieses Embedded-System gibt es keine Standard-Peripherie-Busse wie PCI oder PCI-Express, die in die PC-Plattform integriert sind. Die gesamte Peripherie verhält sich aus Softwaresicht, als ob sie direkt mit der CPU verbunden ist. Software auf unterer Ebene (Board-Dateien) muss angepasst werden, sobald neue Peripherie hinzugefügt wird. Damit wird die neue Peripherie unterstützt. Die eigentlichen Prozesse zur Konfiguration des Pin-Muxings externer Peripherie, zur Konfiguration des Zugriffs-Timings für die neue Peripherie und die Zuweisung der erforderlichen Ressourcen für die Peripherie müssen ebenfalls durchgeführt werden. Um FT313H-Support zum Modul hinzuzufügen, muss der Anwender das Embedded Linux „MACHINE_START“-Makro initiieren. Dies erfolgt mit dem folgenden Code-Abschnitt:

Die Peripherie-Initialisierungsfunktion wird durch „init_machine“ mit dem Wert „am335x_evm_init“ gesteuert. Diese Funktion wird ausgeführt, wenn das Entwicklungsboard zu booten beginnt und eine Tabellensteuerung nutzt, um die Initialisierungsfunktion für jede Peripherie abzuarbeiten. Somit lässt sich der Initialisierungsteil in die Konfigurationstabelle des Moduls hinzufügen, indem ein neuer Eintrag in das Code-Segment erfolgt:

Dabei ist „ft313_hc_init“ die Funktion, über die die eigentliche Initialisierungssequenz ausgeführt wird. Die erste Aufgabe ist die Konfiguration des Pin-Muxings für den USB-Host-Controller. Dies erfolgt über den Aufruf der Systempin- Muxing-Funktion, wobei folgende Tabelle zum Einsatz kommt:

Anschließend erfolgt ein Datenaustausch mit dem GPMC-Treiber, um das Memory Mapping für den FT313H sowie die Interrupt Request Number (IRN) zu erhalten. Diese Information wird zum Aufbau einer Rückgriff-Datenstruktur für Plattform-Devices verwendet. Sie dient auch zur Konfiguration der zugewiesenen GPMC-Timing-Information, damit sie an die Timing-Anforderungen des Host-Controllers angepasst werden kann. Wenn die Funktion „ft313_hc_init“ erfolgreich zurückgeführt wird, ist die Verbindung zum EVM-Modul erfolgreich konfiguriert worden und die für den FT313H erforderliche Ressource ist entsprechend zugewiesen. Der USB-Host-Controller-HCD ist fertig zum Laden. Der HCD enthält zwei Teile: einer ist der Plattform-Treiber, der andere ist der allgemeine HCD, der effektiv die gesamte HCD-Funktion darstellt. Letzterer ist plattformunabhängig. Der Plattformtreiber nutzt das Plattform-Device, um die Ressource zu bestimmen, die dem USB-Host-Controller zugewiesen ist. Der plattformunabhängige Teil des HCD nutzt diese Information, um Zugriff auf die Hardware des Controllers zu erlangen und die Anfragen der oberen Ebene abzuarbeiten. Soll dieser IC auf eine andere Embedded-Hardware-Plattform portiert werden, muss die Prozedur in Bezug auf die Plattform-Device-Erzeugung auf der neuen Zielplattform erneut durchgeführt werden. Den HCD kann man allerdings wiederverwenden.

Bildergalerie

Firmen zu diesem Artikel
Verwandte Artikel