www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Variable ins FLASH schreiben beim AT91

Autor: Wolfgang U. (wolle68)
Datum: 24.04.2008 16:34

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-Tu...
wird eine eeprom.h benutzt, die aber beim Keil nicht dabei ist.

 Wäre toll wenn jemand eine Antwort weiß!
Autor: Matthias Kölling (Gast)
Datum: 24.04.2008 19:12

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
Autor: Wolfgang U. (wolle68)
Datum: 24.04.2008 20:02

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!
Autor: gerhard (Gast)
Datum: 25.04.2008 10:22
Dateianhang: AT91SAM7S64-BasicADC-IAR4_30A-1_21.zip (378,5 KB, 15 Downloads)

@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
Autor: Wolfgang U. (wolle68)
Datum: 25.04.2008 10:43

@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 ;).

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net