AVRs programmieren
Wie kommt das Programm da rein?
Die Mikrocontroller der Atmel AVR-Familie können über verschiedene Arten programmiert werden. Normalerweise werden sie über das ISP-Interface <ref>In System Progamming</ref> programmiert. Dazu braucht man ein spezielles Programmiergerät und muss dieses mit den Leitungen verbinden.
10-Poliger ISP Stecker | 6-Poliger ISP Stecker | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
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:
- Kabel an LPT-Port
- STK-200 Nachbau
- STK-500
- AVR ISP
- AVR JTAG ICE Klon
- usbprog
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 ja auch in JTAG Adapter. Der JTAG ist 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 Heizkörperthermostat HR-20 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 soll kompatibel sein mit dem originalen und bis jetzt funktioniert er einwandfrei. Und das bei Betriebsspannungen von 3.3V bis 5V.
Bootloader
Fast alle Atmel Controller haben 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, er befindet sich immer am Ende des Flash-Speichers. Zusätzlich können der Reset-Vektor und die Interrupt-Tabelle in diesen Bereich am Ende des Flash verbogen werden.
So startet bei einem Reset immer der Bootloader und dieser kann dann die Applikation starten. Wichtig dabe ist, dass die Applikation unverändert bleiben kann. Sie liegt immer in dem selben Adressraum, es ist für die Applikation also egal, ob sich hinten noch ein Bootloader befindet oder nicht.
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 vorher 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 wenns gar nicht anders geht über Aus- und Einschalten des Gerätes.
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.