Forum: Mikrocontroller und Digitale Elektronik AVR - zwischen Bootloader und Programm hin und her springen


von Heinz Rasmussen (Gast)


Lesenswert?

Hallo,

ich bastle gerade an einem ultrakompakten Datenlogger, der seine Daten 
optimalerweise im Programm-Flash des AVRs speichern soll. Wie ich das 
Datenblatt verstehe, kann nur ein Programm im Bootloaderbereich den 
Flash beschreiben. Mein Programm ist aber für den Bootloaderbereich 
minimal zu groß. Hat schon mal jemand versucht, zwischen Bootloader und 
normalem Programmspeicher hin- und herzuspringen, also nur die 
Schreibroutine (und ggf. etwas Initialisierungscode) in den Bootloader 
auszulagern?

Grüße,
  Heinz

von Oops (Gast)


Lesenswert?

Hallo Heinz,

>Hat schon mal jemand versucht, zwischen Bootloader und
>normalem Programmspeicher hin- und herzuspringen, also nur die
>Schreibroutine (und ggf. etwas Initialisierungscode) in den Bootloader
>auszulagern?

Ja das geht. Habe ich so ähnlich auch schon gemacht. Berechnungen für 
die Programmierung im normalen Coderaum. Das eigentliche Brennen dann im 
Bootlaoderbereich.

Du hast zwar darüber nichts gesagt, aber vielleicht hilft es Dir auch zu 
wissen, das es bei vielen Atmels jeweils verschieden grosse 
Bootloader-Bereiche gibt, die über Fuses einstellbar sind. Aber 
vielleicht weisst Du das auch schon.

Wiesgesagt, die oben beschriebene Idee geht auch.

Gruss
Oops

von Oops (Gast)


Lesenswert?

Mir fällt noch ein, das es sich für Dich eventuell lohnen könnte,
die Abschnitte über NRWW-Sektionen im Datenblatt zu lesen.

Ausserdem habe ich gerade gedacht, das Du aufpassen musst, wenn Du in 
eine Page springst die Du gerade erst geflasht hast.

Gruss
Oops

von 6639 (Gast)


Lesenswert?

Ich wuerde eine externes Flash nehmen. zB ein Atmel Datenflash, 
AT45DB041, ein 512kByte flash im SO8 fuer 74 Cents.

von Peter D. (peda)


Lesenswert?

Heinz Rasmussen wrote:

> Hat schon mal jemand versucht, zwischen Bootloader und
> normalem Programmspeicher hin- und herzuspringen, also nur die
> Schreibroutine (und ggf. etwas Initialisierungscode) in den Bootloader
> auszulagern?

Ja, das ist kein Problem.

Dazu richtet man nen API-Call ein, vorzugsweise an Flashend.
Diesem wird ein Zeiger auf ne Struktur im SRAM übergeben, in der die 
Flash-Zieladresse und die zu flashende Page steht.
Als erstes habe ich noch ne Funktionsnummer eingefügt, falls man noch 
mehr Funktionen implementieren will.

Der API-Call muß natürlich in Assembler geschrieben sein und alle 
benutzten Register sichern, damit es nicht zu Konflikten mit der 
Applikation kommt.


Peter

von Ulrich P. (uprinz)


Lesenswert?

War es nicht so, dass es eine Atmel AppNote dazu gibt in der beschrieben 
wird, wie die Software im normalen Flash die Flash-Routinen des 
Bootloaders nutzen kann?
Im Grunde braucht man ja nur die Adressen der Routinen zu kennen und 
kann sie dann per extern mit einem adressvector zur Verfügung stellen.

Ich würde aber, gerade bei einem Datenlogger, ein externes 
Speichermedium bevorzugen. Wenn man 3.3V nutzt, kann man eine SD-Karte 
direkt an den AT klemmen oder man nimmt ein MRAM /FERAM dass per I2C 
oder SPI angesteuert wird. Die kosten kaum mehr als ein EEPROM, kennen 
aber keinen Delay für die Eigenprogrammierung und keinen Verschleiß wie 
FLASH oder EEPROM.

Gruß, Ulrich

von Heinz Rasmussen (Gast)


Lesenswert?

Danke für die wertvollen Tipps. Es gibt tatsächlich eine Appnote 
(AVR105), die eigentlich alle Fragen beantwortet.
Die Kosten sind übrigens weniger das Problem als der Platz, der gegen 
einen externen Speicher spricht.

von Peter D. (peda)


Lesenswert?

Wenn das im gleichen Programm ist, geht das natürlich viel einfacher, 
als eine Bootloaderfunktion in einem fremden Programm aufzurufen.

Du mußt nur die Funktionen, die SPM benutzen in den Bootbereich linken 
lassen.

Da es aber das gleiche Programm ist, gibt es keinerlei Probleme 
hinsichtlich Speicherbelegung und Parameterübergabe.


Peter

von Klaus (Gast)


Lesenswert?

Oben schrieb doch ein gutmeinender Teilnehmer:
  "...ein 512kByte flash im SO8 fuer 74 Cents."

Darauf Deine Antwort...
> Die Kosten sind übrigens weniger das Problem als der Platz, der gegen
einen externen Speicher spricht.


Hmmm. Aha. Soso.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.