AVR Selbstprogrammierung

7

Laut Datenblatt kann der ATMega168 nur selbstprogrammierende Anweisungen ausführen, wenn Code aus dem Bootloader-Block ausgeführt wird.

Kann die Anwendung nach Abschluss des Bootloaders und dem Start der Anwendung in eine Unterroutine im Bootloader-Block zurückspringen und in den Flash schreiben?

Oder ist es der Fall, dass das Programm nach dem Verlassen des Bootblocks erst nach einem Reset wieder selbst programmiert werden darf?

Toby Jaffey
quelle
1
@Joby Taffey - hast du eines der folgenden getestet?
J. Polfer
Nein, ich habe nicht getestet
Toby Jaffey

Antworten:

6

Nun ... Sie können jederzeit einen von der Software initiierten Reset ausführen, um den Watchdog-Timer auszunutzen ... und Daten in eeprom eingeben, um Ihrem Bootloader-Code mitzuteilen, was er tun soll ...

http://www.cs.mun.ca/~paul/cs4723/material/atmel/avr-libc-user-manual-1.6.5/FAQ.html#faq_softreset


Auf Seite 272 des ATMega168-Handbuchs (Abschnitt 6: Aufrufen des Bootloader-Programms) heißt es in der ersten Zeile:

Das Aufrufen des Bootloaders erfolgt durch einen Sprung oder Aufruf aus dem Anwendungsprogramm. Dies kann durch einen Auslöser wie einen über USART empfangenen Befehl oder eine SPI-Schnittstelle ausgelöst werden.

Es scheint mir also, dass Sie die Bootloader-Funktionen definitiv über den Anwendungscode aufrufen können und müssen . Solange Sie Code ausführen, der sich im Speicherbereich des Bootloaders befindet, können SPM-Anweisungen ausgeführt werden. Daher sollten Sie in der Lage sein, sich jedes Mal selbst zu programmieren, wenn Ihr Anwendungsprogramm in den Bootloader-Code springt.

vicatcu
quelle
2

Sie können einfach zum Bootloader-Block springen und alles sollte in Ordnung sein. (Denken Sie daran, auch die Interrupt-Vektoren zu verschieben.)

jpc
quelle
1
Wenn die Boot-Lock-Bits gesetzt sind, um das Lesen von App-Code aus dem Bootloader-Bereich zu verhindern - kann App-Code zum Bootloader springen oder können Sie nur durch Erzwingen eines Resets dorthin gelangen?
Toby Jaffey
0

Sie können in den Bootloader springen und mit der Neuprogrammierung des Anwendungsteils beginnen, aber das ist wahrscheinlich ein schlechtes Design. Überlegen Sie, was passiert, wenn ein Update fehlschlägt oder unterbrochen wird: Jetzt wird Ihr App-Bereich verworfen, und da die Hälfte Ihres Bootloaders tatsächlich dort lebt, wird er wahrscheinlich auch verworfen. Sie haben das Gerät also effektiv gemauert.

Sie möchten den Bootloader als eigenständiges Programm strukturieren.

Siehe diese FAQ:

http://www.avrfreaks.net/forum/faq-c-writing-bootloader-faq?name=PNphpBB2&file=viewtopic&t=79206

Britton Kerin
quelle