header

Raspberry Pi als Programmiergerät

Vorwort
Der Raspberry Pi ist ein vielseitiges Gerät. Viele kennen ihn und jeder scheint ihn für etwas anderes einzusetzen: Webserver für zu Hause, Multimedia-System oder sogar abgespeckter Anwendercomputer sind dabei die Stichworte, die man von Pi-Fans immer wieder zu hören bekommt. Aber auch ausfgefallenere Einsatzmöglichkeiten sind dabei: Ich selbst verwende den Raspberry Pi, um ein 32x96 LED-Display anzusteuern (*klick*) und um AVR-Mikrocontroller zu programmieren. Auf Letzteres möchte ich hier genauer eingehen.

Vorteile gegenüber einem normalen ISP
Ein normaler ISP ist ein Gerät ohne Software. Im Raspberry Pi steckt der Compiler und alles, was sonst noch zum Programmieren nötig oder nützlich ist (z.B. ein komfortabler Texteditor), schon drin. Das Gerät ist ein vollwertiger Computer, der nur noch Tastatur, Bildschirm und ggf. Maus braucht oder auch per SSH vom Windows-PC gesteuert werden kann. Ebenso wie die notwendige Software kann jeder entwickelte Quellcode zentral dort gespeichert werden, wo er gebraucht wird: auf dem Programmiergerät ;-)

Obendrein bieten die GPIO-Pins des Raspberry Pi Features, die über die Funktionalität eines gewöhnlichen Programmiergeräts hinaus gehen: Hier (*klick*) schreibe ich über ein nicht-triviales Beispiel, wie man mit dem Raspberry Pi die Daten eines Atmel AVR empfangen und ausgeben kann.

Installation
Üblich ist es, auf Linux-Systemen neue Programme aus Sourcecodes zu kompilieren. In Computern mit geringen Ressourcen ist es allerdings eher zweckmäßig, binäre Pakete zu installieren. apt-get stellt eine ausgezeichnete Softwaredatenbank bereit, die auch avrdude, avr-gcc und die libc enthält. Das Verwenden von apt-get erspart uns obendrein viel Arbeit, wie die Installationen von bison, flex und libusb.

(1) Die Paketelisten sollten auf den neuesten Stand gebracht werden:
sudo apt-get update
(2) Folgende Pakete müssen installiert werden
sudo apt-get install avrdude gcc-avr avr-libc
(3) Die Datei /etc/avrdude.conf muss mit folgenden Zeilen ergänzt werden:
programmer
  id    = "gpio";
  type  = "linuxgpio";
  reset = 26;
  sck   = 21;
  mosi  = 20;
  miso  = 16;
;
Dies sind im Raspberry Pi B+ die Pins am unteren Ende der GPIO-Leiste. In der ersten Version des Raspberry Pi gibt es diese Pins aber nicht.

Beispiel
avr-gcc -mmcu=atmega88pa -o test test.c
avr-objcopy -O ihex -R .eeprom test test.hex
sudo avrdude -p atmega88p -c gpio -v -U flash:w:test.hex:i