Forum: Mikrocontroller und Digitale Elektronik Variable ins FLASH schreiben beim AT91


von Wolfgang U. (wolle68)


Lesenswert?

Wer hat einen kurzen Tip wie ich eine Variable beim AT91SAM7 ins Flash 
netzausfallsicher schreiben kann. Lesen und ablegen im Code über __at 
(adresse) geht, aber schreiben muss man ja anders. Leider habe ich hier 
nicht gefunden wie das geht und im einzig guten Beitrag den ich gesehen 
habe http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM 
wird eine eeprom.h benutzt, die aber beim Keil nicht dabei ist.

 Wäre toll wenn jemand eine Antwort weiß!

von Matthias Kölling (Gast)


Lesenswert?

Daten werden in der Regel im EEPROM abgelegt und nicht im Flash. Das hat 
verschiedene Gründe:
1. Die Schreib-Lese-Zyklen sind beim EEPROM in der Regel um den Faktor 
10 höher.
2. Der EEPROM läßt sich byte-(word-)weise beschreiben, der Flash ist in 
Pages angeordnet.
Also erstmal im Datenblatt nachsehen, ob der Controller internes EEPROM 
hat oder externes verwenden.
Man kann natürlich auch eine EEPROM-Simulation inm Flash machen. Dazu 
muß man mindestens eine Page freihalten. Man braucht genau so viel RAM, 
um bei Änderungen erst den RAM-Spiegel upzudaten und dann die komplette 
Page wieder zu flashen.

Gruß Matthias

von Wolfgang U. (wolle68)


Lesenswert?

Der µC hat kein EEPROM und ich muss auch nicht ständig Werte speichern. 
Es geht um einige Parameter, die in den ersten Tagen des Gerätes 
verändert werden und dann nahezu bis zum Defekt gleich bleiben ;). 
Lediglich ein Wert könnte ggf. bei jedem Netz aus gesichert werden, aber 
das ist nur 1-2 x am Tag und das Flash hat 100000 Zyklen - sollte gehen.

Mit dem Hinweis kann ich schon mal weitersuchen. Dennoch ist es ggf. 
einfacher ein externes EEPROM zu nehmen. Hat da jemand schon mal was mit 
einem seriellen Typ gemacht. Ich möchte nicht zu viele I/Os opfern. Am 
Atmel soll ja auch eine SD oder MMC gehen. Wäre ja eigentlich das 
Optimale, denn dann könnte man die Parameter sogar extern ändern.

Wäre schön noch weitere Hinweise zu bekommen!

von gerhard (Gast)


Angehängte Dateien:

Lesenswert?

@wolfgang:
für deine zwecke ist das flash durchaus geeignet da du nur eine 
begrenzte anzahl von schreibzyklen vor hast.

das schreiben in das flash erfolgt durch entsprechende routinen.
im anhang ein beispielprogramm von atmel (für iar, sollte aber ohne 
probleme mit anderen compilern nutzbar sein).

wichtig ist nur, daß deine schreib-funktion im ram (such mal nach 
_ramfunc) liegt da das flash nicht schreibfähig ist wenn gerade daraus 
gelesen wird.

gruss
gerhard

von Wolfgang U. (wolle68)


Lesenswert?

@gerhard: Danke für deine Hilfe. Ich probiere das gleich mal aus. 
_ramfunc kenne ich bereits, da ich auch die Interruptroutinen ins RAM 
gelegt habe damit es schneller geht. So langsam wird einem das Teil ein 
wenig vertrauter, aber aller Anfang ist schwer ;).

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.