Titelbild Mikrocontroller

20.6.2. Algorithmus der seriellen Programmierung

Wenn Daten seriell in den ATmega8 geschrieben werden, werden diese mit der steigenden Flanke des SCK getaktet. Wenn Daten aus dem Baustein ausgelesen werden, so werden diese mit der fallenden Flanke des SCK-Signals getaktet.

Für die Programmierung und Überprüfung des ATmega8 im seriellen Programmiermodus wird folgender Ablauf empfolen:

1. Spannung einschalten:
a) Anlegen der Spannung zwischen VCC und GND während Reset und SCK auf 0 liegen
b) Wenn das Programmiergerät nicht sicherstellen kann, dass SCK während des Einschaltens der Spannungsversorgung auf Low gehalten werden kann, dann muss auf Reset ein positiver Impuls von mindestens 2 MCU-Takten Dauer gegeben werden, nachdem SCK auf 0 gesetzt wurde.

2. Warten für mindestens 20ms und freigeben des Programmiermodus durch Senden des Programmierfreigabe Befehls an den MOSI Pin.

3. Die Programmierbefehle werden nicht ausgeführt, wenn die Kommunikation zwischen Baustein und Programmiergerät nicht sauber synchronisiert ist. Wenn beide synchron sind, wird das zweite Byte des Programmierfreigabe-Befehls (53h) zurückgegeben, während das dritte Byte des Befehls gesendet wird. Egal ob dieses Byte zurückgegeben wird, die vier Byte des Befehls müssen auf jeden Fall an den Baustein gesendet werden. Wenn das Byte (53h) nicht zurückgegeben wird, dann gibt man RESET einen positiven Impuls und versucht erneut den Programmierfreigabe-Befehl zu senden.

4. Der Flash wird seitenweise programmiert. Die Seitengröße ist in Tabelle 93 angegeben. Die Speicherseite wird byteweise geladen, indem die 5 LSB der Adresse zusammen mit den Daten in einem Load Programm Memory Page Befehl übergeben werden. Um sicherzustellen, dass die Seite korrekt geladen wird, muss erst das Daten Low Byte geladen werden, bevor das Daten High Byte der Adresse übergeben wird. Die Seite wird gespeichert, indem ein Write Program Memory Page Befehl zusammen mit den 7 MSB der Adresse geladen wird. Wenn kein Polling genutzt wird, muss der Anwender mindestens die Zeit tWD_FLASH warten, bis die nächste Seite programmiert werden kann.

5. Der EEPROM wird Byteweise programmiert, wobei sowohl die Adresse und die Daten zusammen in dem entsprechenden Schreibbefehl erwartet werden. Eine EEPROM-Speicherzelle wird zuerst automatisch gelöscht, bevor sie neu beschrieben wird. Man kann durch Pollen ermitteln, wann das nächste Byte in den Flash oder EEPROM geschrieben werden kann. Das Pollen ist unnötig, wenn man die Zeit tWD_EEPROM wartet, bevor der nächste Befehl übermittel wird. In einem gelöschten Baustein brauchen die Werte FFh im Datenspeicher nicht extra programmiert zu werden.

6. Jede Speicherzelle kann überprüft werden, indem mit dem Lesebefehl der Inhalt der Speicherzelle der aktuellen Adresse über den MISO Pin ausgegeben wird.

7. Am Ende der Programmierung kann RESET auf High gelegt werden, um die normale Funktion zu starten.

8. Abschalten der Spannung (wenn benötigt):
Reset auf 1 legen, Spannung abschalten.
Impressum