AVR: Log-Daten in Flash schreiben -- Bootloader nutzen?

OP #330851
Lesenswert?
• ▲
▼
Hallo,

ich will mit einem AVR (Typ steht noch nicht genau fest) einen
stromsparenden Temperaturlogger mit langer Akku- und
"Speicherlaufzeit" aufbauen -- momentan stellt sich bei mir noch die
Frage nach dem passenden Speicher. Habe hier ein paar nette FRAMs
(FM24C16), die aber nur 16kBit sichern können. Das wird bei
viertelstündlicher Messung dann doch schnell eng. SPI-Flash gibt's
zwar in ausreichender Größe, SD-/MMC-Karten wären auch möglich, aber
irgendwie möchte ich möglichst wenig Bausteine benutzen und das ganze
soll auch ziemlich klein sein.

Gerade kam mir die Idee: Wenn ich das gesamte Programm (eigentlich nur
TOSC2-, I2C/TWI, UART-Routinen) in die Bootloader-Sektion eines Mega128
packen kann, hätte ich doch ausreichend Platz für Daten im
Programm-Flash des µC. Mit PICs soll das ja laut Sprut funktionieren,
mir wäre aber ein AVR lieber, da ich die Werkzeuge inkl. Debugging
einfach kenne. Daher die Frage an die Community: Hat jemand schon
einmal versucht, dort Daten zu speichern? Falls ja, würde ich mich über
einen kurzen Bericht freuen. Falls nein, werdet Ihr in ein paar Wochen
einen solchen Bericht hier lesen...

Beste Grüße und sonniges Wochenende wünscht

Dirk
Gast #330852
Lesenswert?
• ▲
▼
>  SPI-Flash gibt's zwar in ausreichender Größe, SD-/MMC-Karten
> wären auch möglich, aber irgendwie möchte ich möglichst wenig
> Bausteine benutzen und das ganze soll auch ziemlich klein sein.

Naja, so ein schnuckeliger 4 Mbit Dataflash im SO-8, wie er auch im
Butterfly verbaut ist, ist ja nicht garade groß.

> Gerade kam mir die Idee: Wenn ich das gesamte Programm (eigentlich
> nur TOSC2-, I2C/TWI, UART-Routinen) in die Bootloader-Sektion
> eines Mega128 packen kann, hätte ich doch ausreichend Platz für
> Daten im Programm-Flash des µC.

Wieso muß das Programm dazu in der Bootloader-Sektion stehen? Die
SPM-Intruktion ist doch nicht nur dem Bootloader vorbehalten, oder
doch?
OP #330853
Lesenswert?
• ▲
▼
Hallo Rolf,

<zitat>Wieso muß das Programm dazu in der Bootloader-Sektion stehen?
Die
SPM-Intruktion ist doch nicht nur dem Bootloader vorbehalten, oder
doch?</zitat>

muss es nicht? Dann werde ich mir das Datenblatt noch einmal in aller
Ruhe durchlesen. Wäre ja noch schöner!

Gruß,
Dirk
OP #330855
Lesenswert?
• ▲
▼
Datenblatt ATMega128, S. 11:

"Program Flash memory space is divided in two sections, the Boot
Program section and the Application Program section. Both sections have
dedicated Lock bits for write and read/write protection. The SPM
instruction that writes into the  Application Flash Memory section must
reside in the Boot Program section."

... aber da man bis zu 4096 words in dem Bootsektor unterbringen kann,
sollte das für meine Zwecke reichen.
Gast #330857
Lesenswert?
• ▲
▼
@Dirk:

Falls Du versuchst, das Ganze mit AVRStudio zu debuggen:

AVRStudio flippt aus, wenn du verschiedene Sections nutzt. Zum Debuggen
habe ich deswegen meinen Bootloader in der Application-Section gelassen.
Gast #330858
Lesenswert?
• ▲
▼
Hmm, ok. Hab ich wohl Mist erzählt. Sorry...
Zu meiner Verteidigung: Mein Datenlbatt war veraltet. Auf Seite 11 oder
in deren Nähe ist da kein solcher Text zu finden. Ich hatte allerdings
eh nur unter "self programming" geschaut, wo das nicht erwähnt
wurde.
Aber könnte man nicht enfach nur die Funktion, die die Werte
abspeichert, im Bootloader plazieren?
OP #330859
Lesenswert?
• ▲
▼
@Rolf:

so viel Platz brauche ich gar nicht, das sollte alles in die 1024 words
(2kByte) passen. Der erste Versuch mit einem Mega32 hat gezeigt, dass
ich alles notwendige zum Messen und zur Kommunikation in 1kByte Flash
unterkriege. Und da ist noch nix optimiert, im Gegenteil, es sitzen
noch einige Lib-Zombies drin, die gar nicht mehr gebraucht werden.

Gruß,
Dirk
OP #330860
Lesenswert?
• ▲
▼
Da ich gerade einige AT45DB081B-RC 8Mbit-Flashes für unter 0,60€ pro
Stück erstanden habe, wird das Experiment wohl noch ein bisschen auf
sich warten lassen. Mann, was kann man denn mit 8Mbit noch alles loggen
-- für reine Temperaturdaten mit 15-Minuten-Messung liefe das ja ... 28
Jahre! Das reicht ja fast für eine Klimamessreihe (30 Jahre)! Ich
befürchte nur, dass der Li-Ion-Akku nur einen Bruchteil der Zeit
erleben wird.

Gruß,
Dirk
Gast #330861
Lesenswert?
• ▲
▼
@Rolf:

"Aber könnte man nicht enfach nur die Funktion, die die Werte
abspeichert, im Bootloader plazieren?"

Im Prinzip ja, aber Du musst dann sicher stellen, dass während des
Schreibvorganges kein Interrupt aufgerufen wird. Wenn doch, so muss der
entsprechende Interrupthandler, sowie alle Interruptvektoren auch in der
Bootloader Section stehen.

Gruß,
Magnetus
Gast #330863
Lesenswert?
• ▲
▼
"Warum nutzt du nicht den internen EEPROM?"

Antwort: (Zitat) "mit langer Akku- und "Speicherlaufzeit"

Die AVRs haben halt nicht gerade viel internes EEPROM. Der Flash ist in
der Regel deutlich grösser.

Gruß,
Magnetus
Gast #330864
Lesenswert?
• ▲
▼
Hallo Dirk,

habe auch schon mal nen Datenlogger gebaut, dafür aber einen Mega8L +
24LCXXX verwendet. Gibt's bei Reichelt bis 512kbit (64kByte) und
kostet zusammen weniger als ein Mega128...

Gruss,
Thorsten

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.