USB-Verbindungen mit einer 32-bit-MCU umsetzen #####

USB hat den Sprung vom Consumer-Bus-System in die Industriewelt geschafft. Die einfache Verfügbarkeit von USB-Endgeräten, wie zum Beispiel Speicher-Sticks, als auch die Quasi-Ablösung der seriellen wie auch parallelen Schnittstellen an PCs durch USB machen dieses Bus-System für die verschiedensten Anwendungen interessant.

USB hat den Sprung vom Consumer-Bus-System in die Industriewelt geschafft. Die einfache Verfügbarkeit von USB-Endgeräten, wie zum Beispiel Speicher-Sticks, als auch die Quasi-Ablösung der seriellen wie auch parallelen Schnittstellen an PCs durch USB machen dieses Bus-System für die verschiedensten Anwendungen interessant.

Von Wolf Fronauer

USB-Speicher-Sticks bieten aber weitere Möglichkeiten, die zunehmend verwendet werden. So wird das Updaten der Firmware der verschiedensten Geräte, von Industriesteuereinheiten bis hin zu Verkaufsautomaten, deutlich einfacher und weniger fehleranfällig, wenn man anstatt einer PC-Verbindung mittels spezieller Flash-Software einfach die neue Firmware auf einem USB-Stick zur Verfügung stellt und das Gerät sich dann quasi selbst updatet, es also die neue Firmware vom Speicher-Stick liest und dann den eigenen Flash-Speicher damit programmiert. Für den Techniker, der diesen Update-Vorgang durchführt, bleibt also nur die Aufgabe, den Speicher-Stick einzustecken, das Update zu starten und nach dessen Beendigung das Gerät neu zu starten.

Ist eine solche USB-Schnittstelle (in diesem Fall Host oder Minihost) erst einmal vorgesehen, können auch weitere Aufgaben über USB abgewickelt werden. Bei der Konzeption eines solchen Gerätes bietet es sich an, auf einen Mikrocontroller zurückzugreifen, der die USB-Host-Schnittstelle als integrierte Einheit zur Verfügung stellt. In manchen Anwendungsfällen ersetzt USB zunehmend die früher verwendete serielle (COM-Port) oder parallele Schnittstelle (LPT-Port) am PC.

Mittels integriertem Host-Standard USB-Peripherie nutzen

Sollen mittels des Mikrocontrollers USB-Komponenten wie zum Beispiel Speicher-Sticks oder Drucker genutzt werden, muss dieser über einen Host oder Embedded-Host (auch als Minihost bezeichnet) verfügen. Der Minihost ist ein eingeschränkter Host, welcher nur ein USB-Gerät steuern kann, denn ihm fehlt die HUB-Eigenschaft. Sobald also zwei oder mehr USB-Geräte gleichzeitig von der MCU gesteuert werden sollen, ist der Minihost nicht mehr ausreichend, gleiches gilt für USB OTG.

Für den integrierten Host werden Software-Treiber (Host-Controller-Treiber) und ein USB-Host-Stack benötigt. Auf diese Software-Module wird dann derjenige Treiber aufgesetzt, der das anzusteuernde USBGerät unterstützt. Bild 1 zeigt eine Beispielkonfiguration zur Steuerung eines Speicher-Sticks.

Bei vielen Geräten ist die Anbindung an einen PC notwendig. Dies kann temporär zu Konfigurationszwecken oder auch dauerhaft der Fall sein, wenn der PC zum Steuern oder Visualisieren verwendet wird. Klassisch wurde hier auf die serielle Schnittstelle (COM-Port) zurückgegriffen, heute verwendet man USB. Damit muss der in der Anwendung verwendete Mikrocontroller mindestens über eine USB-Geräteschnittstelle in Hardware verfügen, um mit einem PC verbunden werden zu können.

Auf der MCU-Software-Seite sind Treiber notwendig, um eben diese USB-Geräteschnittstelle ansteuern zu können (USB-Device-Controller-Treiber), darauf setzt dann der USB-Device-Stack auf. Je nachdem als welches USB-Gerät sich die Anwendung dem PC zu erkennen geben soll, sind entsprechende Software-Funktionen notwendig.

Auf der MCU-Software-Seite sind Treiber notwendig, um eben diese USB-Geräteschnittstelle ansteuern zu können (USB-Device-Controller-Treiber), darauf setzt dann der USB-Device-Stack auf. Je nachdem als welches USB-Gerät sich die Anwendung dem PC zu erkennen geben soll, sind entsprechende Software-Funktionen notwendig.

Will man zum Beispiel eine bestehende Anwendung, die bisher mit dem PC über serielle Schnittstelle kommuniziert hat, auf USB aufrüsten, kann man auf einen virtuellen COM-Port zurückgreifen. Die MCU-Software muss hierzu auf den USB-Device-Controller-Treiber noch einen USB-Serialbzw. CDC-Function-Treiber aufsetzen. PC-seitig sind keinerlei Änderungen an der vorhandenen Software erforderlich. Es wird lediglich ein Treiber für einen virtuellen COM-Port benötigt. Über diesen kommuniziert die PC-Anwendung dann mit dem Mikrocontroller. Die USB-Verbindung wird also für die Anwendung quasi transparent. Bild 2 zeigt beispielhaft die notwendigen Hard- und Software-Module für einen vituellen COM-Port.

Verfügt ein Mikrocontroller bereits über eine USB-Funktion, liegt es nahe, diese auch dazu verwenden zu können, den integrierten Flash-Speicher direkt über USB programmieren zu können.