Variable ins FLASH schreiben beim AT91

OP #851498
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ß!
Gast #851688
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
OP #851743
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!
Gast #852164
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren