Microcontroller flashen: Arduino Uno als In-System-Programmer

Die Arduino-Plattform hat sich in der Bastlerszene unter anderem auch deshalb durchgesetzt, weil man keine speziellen Adapter benötigt, um ein Programm in den Flash-Speicher des Mikrocontrollers zu schreiben. Praktischerweise lässt sich der Arduino sogar selbst als Universal-Programmieradapter nutzen, um einzelne Mikrocontroller wie AVRs und PICs zu flashen.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Arduino Uno als Programmer fĂĽr PIC
Lesezeit: 12 Min.
Von
  • Daniel Bachfeld
Inhaltsverzeichnis
  • Arduino Uno
  • Breadboard
  • DrahtbrĂĽcken
  • Elko, 10µF

Ein Arduino eignet sich fĂĽrs Prototyping bestens. Mit mehr als 20 Euro ist der stationäre Einsatz in einer Schaltung allerdings nicht ganz billig, vor allem wenn ein ATmega fĂĽr ein paar Euro und ein paar weitere Bauteile ausreichen wĂĽrden. Während beim Arduino der Bootloader ĂĽber die herkömmliche serielle Schnittstelle (via USB2Serial-Wandler) mit einem PC spricht, programmiert man einen "nackten" ATmega in der Regel direkt "In System" ĂĽber sein Serial Peripheral Interface (SPI). Ein normaler PC unterstĂĽtzt zwar die normale asynchrone, serielle RS232-Schnittstelle, jedoch nicht die synchrone SPI. Deshalb benötigt man einen Ăśbersetzer – einen Programmer. Die Bandbreite reicht dabei von billigen Modellen wie den USBasp ĂĽber den "AVR ISP" bis hin zu ganzen Evaluierungsboards wie dem STK500 beziehungsweise STK600.

Die Arduino-IDE unterstĂĽtzt verschiedene externe Programmer. Auch der USBasp findet sich neben dem hauseigenen ArduinoISP.

Zum Flashen des Controller-Speichers arbeitet der externe Programmer als sogenannter Master, der den Atmel-Prozessor (Slave) steuert. Ăśber die Reset-Leitung RST (Low) bringt er den Atmel in den programmierbereiten Zustand. Den Takt fĂĽr die DatenĂĽbertragung gibt der Master ĂĽber die Leitung SCK vor. Ăśber die Leitung MOSI (Master Out, Slave in) sendet er Befehle an den Slave, die in der Regel aus vier Bytes bestehen. Das erste Byte signalisiert die gewĂĽnschte Operation und den Zielspeicher, etwa ob in das Flash oder das EEPROM geschrieben werden soll. Die Bytes zwei und drei enthalten die Speicheradresse; zuletzt kommt das Datenbyte.

Die Arduino-IDE bringt in den Beispielen bereits den Sketch fĂĽr ArduinoISP mit. Den muss man zuerst per Upload in der Arduino ĂĽbertragen.

Ăśber die Leitung MISO (Master In, Slave Out) kann der Programmer hingegen nach Ăśbermittlung des passenden Befehls Daten auslesen. Zwischen den Operationen sind gewisse Pausen einzuhalten. Genauere Details zum Ablauf beschreibt Atmel in seiner frei verfĂĽgbaren Application Note AVR910 [PDF]. Diese haben die Arduino-Entwickler genutzt, um mit ihren Boards einen AVR-Programmer nachzubilden. Auf diese Weise kann man im ersten Schritt mit einem Arduino sein Programm austesten und im zweiten Schritt denselben Arduino (mit einem anderen Sketch) nutzen, um das Programm in einen externen ATmega zu brennen.