AVRs programmieren

Aus Dario's Home
Wechseln zu: Navigation, Suche

Wie kommt das Programm da rein?

usbprog
AVR-JTAG
AVR-ISP

Die Mikrocontroller der Atmel AVR-Familie können über verschiedene Arten programmiert werden. Normalerweise werden sie über das ISP-Interface (In System Progamming) programmiert. Dazu braucht man ein spezielles Programmiergerät und muss dieses mit den Leitungen verbinden.

10-Poliger ISP Stecker
2: VCC 4: GND 6: GND 8: GND 10: GND
1: MOSI 3: LED 5: /Reset 7: SCK 9: MISO
6-Poliger ISP Stecker
2: VCC 4: MOSI 6: GND
1: MISO 3: SCK 5: /Reset

Es gibt Programmieradapter die an Pin 3 des 10-poligen Steckers eine LED ansteuern, um den Programmierung zu signalisierten. Diese Funktion wird aber kaum genutzt, daher wird der Pin auch von Atmel als N/C (not connected) definiert.

Bezüglich VCC ist es angedacht, dass das Programmiergerät darüber aus der Schaltzung mit Strom versorgt wird. In letzter Zeit werden die Programmiergeräte über USB mit dem PC verbunden und somit ist die Stromversorgeung des Programmierers nicht mehr nötig. Stattdessen bieten einige Programmiergeräte an den Spieß umzudrehen und über diese Leitung die Zielhardware mit Spannung zu versorgen. Zu diesem Zweck gibt es oft Jumper auf dem Programmiergerät. Ich habe Erfahrungen gesammelt mit folgenden Geräten:

Die besten Erfahrungen habe ich gemacht mit dem STK-500 und dem usbprog.

Wenn man seine Schaltung richtig designed, kann man die Ausgänge, an denen der ISP liegt auch in der Applikation nutzen. Folgendes sollte man beachten:

  • Wenn man die Pins als Ausgabe konfiguriert ist es für das Programmieren unproblematisch, jedoch sollte die angschlossene Hardware dann keine Zicken machen, wenn sich der Pegel beim Programmieren dauernd ändert.
  • Wenn man die Pins als Eingabe konfiguriert muss die angschlossene Hardware sich beim Programmieren hochohmig verhalten.

JTAG

In der Liste oben steht auch ein JTAG Adapter.

Der JTAG dient eigentlich zum debuggen des Controllers und der angeschlossenen Hardware, aber er kann auch genutzt werden um den Controller zu programmieren. Jedoch verfügen nicht alle Controller der AVR Famile über ein JTAG Interface. Normalerweise komme ich ohne JTAG aus, aber bei dem HR20 - Heizkörperthermostat ist der ISP nicht nach aussen gelegt, dafür aber der JTAG, hier hat sich der JTAG sehr gelohnt.

Ich habe keinen Originalen JTAG, sondern einen Nachbau, der is kompatibel mit dem originalen und bis jetzt funktioniert er einwandfrei. Und das bei Betriebsspannungen von 3.3V bis 5V.

Bootloader

Fast alle Atmel Controller bieten die Möglichkeit sich selbst zu programmieren. Das bedeutet, dass ein Programm in dem Atmel Teile des internen Flash löschen und neu beschreiben kann. Ein solches Programm wird Bootloader genannt.

Diser befindet sich immer am Ende des Flash-Speichers. Zusätzlich werden der Reset-Vektor und die Interrupt-Tabelle in diesen Speicherberichbereich verbogen.

So startet bei einem Reset immer der Bootloader, dieser kann die Applikation starten, wenn nicht programmiert wird. Wichtig dabei ist, dass die Applikation unverändert bleiben kann. Sie liegt immer in demselben Adressraum, es ist für die Applikation also egal, ob sich hinten noch ein Bootloader befindet oder nicht. (Bis auf die maximal mögliche Größe)

So braucht man kein Programmiergerät und kann praktisch über jede beliebige Schnittstelle (RS232, CAN, SPI, 2-WIRE) den Mikrocontroller programmieren. Man muss nur dafür sorgen, dass der Bootloader gestartet wird, also einen Reset auslösen. Das kann man über einen Befehl über die Programmierschnittstelle machen (muss dann Teil der alten Applikation sein) oder über einen Resettaster, oder wenn es gar nicht anders geht über Aus- und Einschalten.

Ich setze gerne den Bootloader von Shaoziyang ein. Dieser nutzt die serielle Schnittstelle. So braucht man nur noch ein USB-Handyprogrammierkabel um den Atmel neu zu programmieren, davon habe ich mit mal eine Handvoll auf dem Flohmarkt gekauft.

Auch braucht man keine spezielle Software, da das Programmieren mit jedem Teminalprogramm geht, welches die serielle Schnittstelle nutzt und XMODEM Upload beherscht.