PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speichern in den Flash-Speicher



Ruppi
04.11.2008, 19:51
Hallo,

gibt es eine Möglichkeit, während der Laufzeit in den Flash-Speicher zu speichern? Ich möchte eine Tabelle (ca. 12kb) vom PC über ein FT232RL Device im Flash ablegen. Diese Tabelle sollte möglichst nicht statisch sein.
Controller ist ein Mega644.

Vielen Dank... Ruppi

s.o.
04.11.2008, 21:08
Ja, ist möglich, schau dir mal STM (Store to Program Memmory an). Hinten im Datenblatt sind alle Befehle beschrieben.
Jedoch ist das mit Vorsicht zu genießen. Jedes Byte im Flash hat nur 10'000 Schreibzyklen, d.h. du solltest nur darauf speichern wenn es wirklich notwendig ist sonst ist dein Controller bald Müll. Bei Assembler musst du auch aufpassen dass du nicht in die Daten springst, da sonst dein Controller die Daten als Befehle interpretiert.

Eine Alternative wäre dass du einen AVR mit externem Ram nimmst (geht hoch bis zu 64kByte) und dort die Tabelle ablegst. Sollten die Daten auch "Strom aus" überleben musst du sie puffern, mit einem großen Kondensator und als "Notpower" eine Lithium Knopfzelle.
Eine Alternative dazu wären EEPROMs (gehen auch hoch bis 64 kByte) Ansteuerung afaik per I2C, die überleben 100000 Schreibzyklen: Immerhin Faktor 10! Schau dir mal den ST 24C256 BN6 bei Reichelt an; den gibts auch in kleiner...

Ruppi
05.11.2008, 12:44
Hallo,

danke erstmal für Deine Antwort. Du hast Dich sicher verschrieben und meintest den Befehl "SPM". Auf diese Art und Weise habe ich es versucht, es hat allerdings nicht funktioniert. Kann es sein, dass man SPM ausschließlich in Verbindung mit einem Bootloader nutzen kann? Das Problem mit den 10000 Schreibzyklen ist nicht weiter tragisch, denn die Werte werden nicht sehr oft abgelegt. In dieser Tabelle möchte ich Rampen für einen Schrittmotor-Controller ablegen. Wie gesagt - schön wäre, wenn man dieser verändern könnte.
Ein EEPROM wäre natürlich eine Alternative, den 24C256 kenne ich, habe ich schon einmal verbaut.

Trotzdem nochmal zum Verständnis: wie genau funktioniert das mit dem Befehl SPM?

Vielen Dank, Ruppi

linux_80
05.11.2008, 13:48
Hallo,

man kann schon auch ausserhalb eines Bootloaders ins Flash schreiben, man muss nur beachten, das man nur Seitenweise beschreiben kann, und diese sollte man vorher löschen. Beim 644er ist eine Seite 256 Byte groß, die müssen erst in den Puffer übertragen werden danach wird dieser geschrieben.
Bei den Befehlen ist das Timing wichtig, sonst mach der AVR nix.
Während dem beschreiben sollte man sonst nix anders laufen haben (Timing), denn der AVR wird, während geschrieben wird, angehalten (weil ausserhalb des Bootloaders).

Ruppi
05.11.2008, 16:11
hi,

ich habe mir mal das Beispiel aus dem Datenblatt des 644er angesehen. Vielleicht kann man auf diese Art und Weise was zusammenbasteln.
Vielen Dank für die Hilfe!

Ruppi

thewulf00
05.11.2008, 21:07
Übrigens hat der AtMega einen integrierten EEPROM. Zwar nicht allzugroß, aber einfacher und öfter zu beschreiben ist der allemal.

Ruppi
05.11.2008, 21:35
das stimmt, aber wie anfangs erwähnt, benötige ich ca. 12kb für die Rampen-Tabellen, integriertes EEPROM scheidet daher aus.

Die Möglichkeit des seriellen, externen EEPROMs scheint mir derzeit die beste Möglichkeit zu sein.

Trotzdem vielen Dank.