AVR-Selbstprogrammierung

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

Kann die Anwendung, nachdem der Bootloader abgeschlossen ist und die Anwendung gestartet wird, in eine Unterroutine im Bootloader-Block zurückspringen und sie in den Flash schreiben lassen?

Oder ist es so, dass sich das Programm, sobald es den Bootblock verlässt, erst nach einem Reset wieder selbst programmieren darf?

@Joby Taffey - haben Sie eines der folgenden getestet?
Nein habe ich nicht getestet

Antworten (3)

Nun ... Sie können jederzeit einen von der Software initiierten Reset ausführen, um den Watchdog-Timer auszunutzen ... und Daten in das EEPROM einfügen, um Ihrem Bootloader-Code mitzuteilen, was Sie tun möchten ...

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: Einstieg in das Bootloader-Programm) steht in der ersten Zeile:

Der Einstieg in den Bootloader erfolgt durch einen Sprung oder Aufruf aus dem Anwendungsprogramm. Dies kann durch einen Auslöser wie einen über USART oder SPI-Schnittstelle empfangenen Befehl initiiert werden.

Es scheint mir also, dass Sie definitiv in der Lage sein müssen , die Bootloader-Funktionen aus dem Anwendungscode aufzurufen. Solange Sie Code ausführen, der sich im Bootloader-Abschnitt des Speichers befindet, können SPM-Anweisungen ausgeführt werden, und daher sollten Sie jederzeit in der Lage sein, sich selbst zu programmieren, wenn Ihr Anwendungsprogramm in den Bootloader-Code springt.

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

Wenn die Boot-Lock-Bits gesetzt sind, um das Lesen des App-Codes aus dem Bootloader-Abschnitt zu verhindern – kann der App-Code zum Bootloader springen, oder können Sie nur dorthin gelangen, indem Sie einen Reset erzwingen?

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 ist Ihr App-Bereich gelöscht, und da die Hälfte Ihres Bootloaders effektiv dort lebt, ist er wahrscheinlich auch gelöscht. Sie haben das Gerät also effektiv gemauert.

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

Siehe diese häufig gestellten Fragen:

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