Schreiben des Bootloader-Programms in ATmega32A

Ich muss einen in C geschriebenen Bootloader-Code mit einem seriellen Programmierer in den Boot-Bereich von AVR ATmega32A programmieren. Ich kann den Code nicht direkt in den Boot-Bereich von Atmel Studio schreiben. Also suche ich hier nach einem Weg. Gibt es auch eine gute Möglichkeit, Anwendungscode und Boot-Code zu kombinieren und sie in den jeweiligen Abschnitten mit dem C-Programm zu schreiben?

Das letzte Mal, als ich einen AVR-Bootloader geschrieben habe, war vor Atmel Studio, aber nur kurz, ich denke, Sie sollten es unter Projekteigenschaften tun können | Werkzeugkette | AVR/GNU-Linker | Speichereinstellungen. Wenn ich sie kombinieren möchte, mache ich normalerweise den Bootloader, verwende ihn zum Laden und lese dann das Ergebnis zurück.
Ja. Ich kann die Option dort sehen, aber es ist wirklich verwirrend
Ich bin wirklich verwirrt mit .text und .boot. Auch dieser Boot-Abschnitt nimmt nur die letzten 512 Wörter auf, also woher 1234 kommt. Bitte sagen Sie mir, wo ich nach Ihrem alten Projekt suchen kann.
Ok, also muss ich es durch die Boot-Abschnittsadresse von Atmega32A ersetzen. Recht habe ich?
Ich erhalte die Fehlermeldung „Dateiinhalt ist keinem gültigen Gerätespeicher zum Programmieren von Flash zugeordnet“, wenn ich .text einfüge. Wenn Sie es durch .boot ersetzen, funktioniert es, aber das Schreiben von derselben 0x00-Adresse.
Danke PeterJ, es funktioniert, wenn ich es mit dem richtigen Adresswert versuche. Der Fehler war auf den Adresswert zurückzuführen, ich habe 7c00 angegeben, wobei ATmega32A nur bis zu 3FFF-Adressen hat.

Antworten (1)

Das ATmega32A-Datenblatt auf Seite 245 zeigt die folgende Tabelle, wo der Bootloader-Bereich beginnt, je nachdem, wie die BOOTSZSicherungen eingestellt sind:

Konfiguration der ATmega32A-Boot-Größe

Angenommen, Sie haben BOOTSZ0und BOOTSZ1sind beide für den größten Bootloader-Abschnitt freigegeben, beginnt er bei 0x3800. Aus der Dokumentation der Speicherabschnitte können Sie sehen, dass der Code in das .textLinker-Segment geht und die Adresse geändert werden kann, indem Sie unter Projekteigenschaften | Werkzeugkette | AVR/GNU-Linker | Speichereinstellungen und Hinzufügen .text=0x3800im Abschnitt FLASH-Segment:

Atmel Studio FLASH-Segment für Bootloader

Wenn ich den Bootloader mit der Anwendungsfirmware für die Produktionsprogrammierung kombinieren möchte, verwende ich normalerweise den Bootloader, um die Hauptfirmware zu laden, und lese dann das Ergebnis von FLASH zurück. Es sollte technisch möglich sein, sie mit benutzerdefinierten Linkersegmenten zu kombinieren, aber Sie müssten sehr vorsichtig sein, wo Dinge wie Standardbibliotheksfunktionen platziert wurden, sodass die erstere Methode wahrscheinlich einfacher und sicherer ist.