mikrocontroller.net

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


Autor: gjb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gjb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard Winter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.