Forum: Mikrocontroller und Digitale Elektronik AVR: Log-Daten in Flash schreiben -- Bootloader nutzen?


von Dirk W. (wiebel)


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

von Rolf Magnus (Gast)


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?

von Dirk W. (wiebel)


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

von Magnus Müller (Gast)


Lesenswert?

Du musst das Flash aus der Bootloadersection heraus beschreiben.

Das Ganze funktioniert übrigens ganz gut (auchschonausprobierthab)...

Viel Erfolg
Magnetus

von Dirk W. (wiebel)


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.

von Dirk W. (wiebel)


Lesenswert?

@Magnus:

Das war aber sicher keine ganze Minute, die zwischen den Postings lag
;)

von Magnus Müller (Gast)


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.

von Rolf Magnus (Gast)


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?

von Dirk W. (wiebel)


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

von Dirk W. (wiebel)


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

von Magnus Müller (Gast)


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

von Läubi (Gast)


Lesenswert?

Warum nuzt du nicht den internen EEPROM?
Der ist sogar öfters beschreibbar :)

von Magnus Müller (Gast)


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

von Thorsten (Gast)


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

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.