Forum: Compiler & IDEs Power-Down Daten im Flash ablegen


von gjb (Gast)


Lesenswert?

Hallo

Ich habe ein Problem
Ich möchte beim Abfallen der Versorgungsspannung noch schnell ein
struct von 10bytes im Flash ablegen. Ich verwende einen MEGA32L und ein
Ablegen im EEPROM würde über 80ms dauern - inakzeptabel.

Ich habe viel gelesen über flash, pagesize, clear before write, RWW,
NRWW, LockBits und so weiter. Jetzt bin ich total verwirrt und weiss
gar nicht mehr, was ich machen soll.
Gibt es vielleicht lib-funktionen zum lesen UND schreiben kompletter
pages zur Laufzeit ? Das ganze sollte wie gesagt sehr schnell gehen.
Unter 10ms wäre gut.
Ich verwende WinAVR.

Kann mir bitte jemand weiterhelfen.

Danke

GjB

von Jens123 (Gast)


Lesenswert?

wenn es nur um diese kleinen daten ins eeprom zu schreiben kannst du
eine diode in die VCC haenngen mit einem 100µF Kondensatur Paralel zum
µC das reicht dicke um eine Sekunde die Stromversorgung zu erhalten

ok du hast dann nicht 5V sondern 4,2V am AVR koenntest aber ueber die
Spannungsversorgung ausgleichen (auf 5,6V hochschrauben)

ich denke, dass es laennger dauert was im flash zu loeschen und zu
schreiben, als ins eeprom was zu schreiben

gruss jens

von gjb (Gast)


Lesenswert?

Hallo und danke für die schnelle Antwort.

Nach meinem Datasheet dauert es 8,5ms pro byte im EEPROM. Gemessen hab
ich ca 8ms. Desshalb die 80ms, die ich oben erwähnte.

Das Löschen einer Page im Flash soll etwa 4,5ms dauern, und das neu
beschreiben nochmal. Macht zusammen 9ms um 128 bytes abzulegen.
Daraus wollte ich einen Ringspeicher machen und jehweils 16bytes zu
reservieren.

Aber dazu muss ich eben zur Laufzeit flash lesen und schreiben können.

Bitte dabei um HILFE !

Danke

GjB

von mthomas (Gast)


Lesenswert?

So wirklich im Flash gespeichert werden "muss": Flash im AVR ist nur
seitenweise wiederbeschreibbar (garantiert "nur" 10000 mal). Was
funktionieren sollte, ist read-modify-write bezogen auf eine Seite.
Flash-Schreib-Code muss bei den meisten AVRs in der Boot-Loader-Section
abgelegt sein (so auch beim ATmega32). Diverse Bootloader-Codes sollten
Hinweise geben. Siehe auch avr-libc/boot.h, AppNote AVR105, AppNote
AVR106.

von Jörg Wunsch (Gast)


Lesenswert?

Du wirst dich wohl oder übel mit dem Datenblatt anfreunden müssen.  In
<avr/boot.h> findest du ein paar Support-Makros für den Zweck.  Wenn
mich aber jetzt nicht alles täuscht, darfst du ausschließlich aus dem
Bootloader-Bereich heraus schreiben und der muss auch als solcher
aktiviert sein -> daher meine Bemerkung, dass das nicht ohne
gründliches Studium des Datenblatts geht.

Die entstehende Applikation dürfte einiges aufwändiger werden als das,
was du bislang schon hast, da du zwischen bootloader und application
area hin und her springen musst.  Das erfordert eine gewisse
Beschäftigung mit memory sections und den dafür notwendigen
Kommandozeilen-Parametern.  Falls du Freund der Simulation im AVR
Studio bist, kannst du das hier auch knicken -- AVR Studio kann nur
die Standard-Sections (.text, .data, .bss) benutzen.

Wahrscheinlich bist du mit einer Goldcap und dem EEPROM deutlich
einfacher dran.

von Bernhard Winter (Gast)


Lesenswert?

Ich habe mir den MSP 430 JTAG-Programmer zugelegt. Damit lassen sich die
Programme die mit IAR-System Embedded Workbench Version 2.31 problemlos
mit Hilfe des C-Spy flashen. Die gleiche Applikation mit dem
IAR-Embedded Workbench 4.0 compiliert und gelinkt verursacht allerdings
beim flashen mit dem C-Spy die Fehlermeldung:
 "Overlapping segments around adress 0, segment Memory."
Mit dem JTAG-Emulator lässt sich das Programm jedoch problemlos
flashen.
Hat irgendjemand eine Idee woran das liegen könnte?

Danke
Bernhard

von Stefan Kleinwort (Gast)


Lesenswert?

Hi gjb,

schau Dir mal die Atmel App-Note AVR105 an:

"Power efficient high endurance parameter storage in flash memory"

Das behandelt genau Dein Thema.

Gruß, Stefan

von Michael Wilhelm (Gast)


Lesenswert?

Versuch doch mal folgendes: im Zweig der Stromversorgung nach dem
Gleichrichter eine Diode in Reihe. Nach der Diode die Siebung,
stabilisierung usw. Aber zwischen Gleichrichter und Diode ein
Reihenwiderstand und eine Z-Diode nach Masse. Dort hast du während des
normalen Betriebes beide Halbwellen, die z. B. einen Timerresetten
können. Wenn ein Überlauf stattfindet, Daten sichern und gut. Der
Vorteil: den Siebelko etwas dicker dimensionieren, alle Spannungspegel
bleiben erhalten.

MW

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.