Open Source im professionellen Einsatz

USBprog - universeller Adapter für Embedded-Programmierer

Zwerg am Drücker

Eine einfache Schaltung hat das Zeug, eine ganze Handvoll proprietärer Adapter zu ersetzen, die sonst den Tisch des Embedded-Entwicklers vollmüllen. Mit anderer Firmware mutiert USBprog auch zur USB-to-RS232-Schnittstelle oder steuert Lampen und Motoren.

Im Lauf der Zeit sammeln sich bei Embedded-Entwicklern immer mehr Adapter an, die sie mit den diversen Mikroprozessor- und Evaluation-Boards entweder mitgeliefert bekommen oder aus schierer Notwendigkeit separat erworben haben. Jeder Adapter verbindet den PC mit dem Entwicklungsboard zum Programmieren, Debuggen oder einfach nur zum Datenaustausch. Jeder Hersteller kocht dabei sein eigenes Adapter-Süppchen, der Anwender hat das Durcheinander.

Es zu lichten ist Idee und Ziel des Projekts USBprog [1]: ein universell programmierbarer "USB zu fast beliebig"-Adapter, der sich zudem durch offene Hard- und Software auszeichnet. Seine einfache Schaltung ersetzt eine beträchtliche Zahl proprietärer Geräte.

Der Embedded-Entwickler wählt in einer speziellen Anwendung aus einem Online-Archiv eine Firmware aus und programmiert den Adapter damit. Damit verwandelt sich die USBprog-Platine in ein Programmiergerät für Atmel-AVR-Controller, einen ARM7/9-Debugger in Verbindung mit OpenOCD [2], einen USB-zu-RS232-Wandler oder in eine einfache IO-Schnittstelle.

Der Pool der Möglichkeiten wächst stetig. In den Startlöchern stehen im Augenblick eine Firmware für ein einfaches BDM-Interface, ein MSP430-Debugger und ein PIC-Programmiergerät.

Abbildung 1: Fertig aufgebauter USBprog. Die einzelnen Komponenten: 1 acht IO-Ports, alternativ Port B vom ATMega32, + VCC und Masse, 2 Jumper als Schalter für Firmware, 3 Reset-Ansteuerung, 4 Einstellung VCC-Spannungsversorgung, 5 ansteuerbare LED, 6 UART-Anschluss, +VCC und Masse, 7 Power LED.

Abbildung 1: Fertig aufgebauter USBprog. Die einzelnen Komponenten: 1 acht IO-Ports, alternativ Port B vom ATMega32, + VCC und Masse, 2 Jumper als Schalter für Firmware, 3 Reset-Ansteuerung, 4 Einstellung VCC-Spannungsversorgung, 5 ansteuerbare LED, 6 UART-Anschluss, +VCC und Masse, 7 Power LED.

Da das Projekt unter Linux begann, sind alle Versionen auch dafür konzipiert - viele kommerzielle Adaptern dagegen entstanden zuerst mit proprietärer Software und sind, wenn überhaupt, erst mit Verzögerung unter Linux einsetzbar. Darüber hinaus sind alle Unterlagen, Quelltexte und Pläne unter der GNU/GPL frei verfügbar, wodurch jeder die Möglichkeit hat, alles zu studieren und sich an der Entwicklung zu beteiligen.

Abbildung 2: Der Schaltplan für USBprog mit ATMega32 (IC1), USBN9604 (IC2), 10-poligem Stecker (SV2), UART-Anschluss (JP2), LED1 Status, LED2 Power, USB-B-Buchse oder einem A-Stecker (J1), Quarz 24 MHz (Y1).

Abbildung 2: Der Schaltplan für USBprog mit ATMega32 (IC1), USBN9604 (IC2), 10-poligem Stecker (SV2), UART-Anschluss (JP2), LED1 Status, LED2 Power, USB-B-Buchse oder einem A-Stecker (J1), Quarz 24 MHz (Y1).

Offene Hardware

Die Hardwareschaltung aus Abbildung 1 macht nur einen Teil des Gesamtkonzepts von USBprog aus. Sie ist so aufgebaut, dass ihre Funktionalität nicht an bestimmte Bauteile gebunden ist. Prinzipiell wären alle Komponenten mit vertretbarem Aufwand austauschbar, ohne USBprog von Grund auf neu entwickeln zu müssen. Als Mikrokontroller kommt derzeit ein weitverbreiteter ATMega32 [3] von Atmel zum Einsatz. Er ist nicht nur günstig in der Anschaffung, sondern es existieren viele freie Entwickleranwendungen dafür.

Da es nur wenige universelle und zugleich einfach zu handhabende Mikrokontroller mit USB-Interface gibt, sorgt ein externer Baustein, der USBN9604, für die USB-Schnittstelle. Controller und USBN kommunizieren über einen parallelen Bus (siehe Schaltplan in Abbildung 2). Neben dem USB-Port führt der USBN9604 auch einen programmierbaren Takt heraus, der in der Schaltung den ATMega32 versorgt. Die meisten Firmware-Versionen programmieren ihren Takt auf 16 MHz.

Kontakte nach draußen

Ein 10-poliger Stecker dient als Tor zur Außenwelt, die Leitungen sind frei belegbar, die jeweiligen Firmware-Beschreibungen geben Auskunft darüber. Die andere Aufgabe des Steckers ist es, die allererste Programmierung mit dem Bootloader durchzuführen. Dazu setzt der Entwickler einen Jumper auf JP1, der die Reset-Leitung des ATMega32 für externe Zugriffe freischaltet und den Anschluss jedes Standard-AVR-Programmiergeräts an den ATMega32 erlaubt.

Zusätzlich führt USBprog über den Jumper JP3 einen UART-Anschluss heraus. Für ihn ist eine Firmware verfügbar, mit der der Adapter vom PC aus gesehen zur RS232-Schnittstelle wird. Jumper 4 ist als Schalter für spätere Firmwares gedacht. Der Jumper JP2 konfiguriert ein Spannungspin an dem 10-poligen Stecker. Er schleift die 5 Volt des USB-Anschlusses direkt oder mit einer Schottkydiode geschützt zum Stecker durch. Ohne den Jumper ist der Pin nicht beschaltet und somit spannungslos.

Der hohe Abstraktionsgrad der Hardware setzt sich in der Software - sprich den Firmwares - fort. So gewährleistet es eine eigens für den USB-Baustein entwickelte Bibliothek [4], USB in jeder Mikrokontrolleranwendung ohne Spezialkenntnisse zu nutzen. Für den einfachen Einstieg in die Bibliothek ist mit [4] und [5] ausreichend Lesestoff vorhanden.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook