Arduino FlashSpeicher

Hi

Ich habe auf meinem Arduino UNO ein paar Daten in Arrays bzw. einfachen Variablen gespeichert und würde gerne verhindern, dass diese gelöscht werden, wenn ich den Arduino von der Spannungsversorgung nehme.
Hierzu hätte ich mir überlegt den Flashspeicher des Arduinos zu nutzen, um die Daten zu erhalten.

Allerdings habe ich jetzt gelesen, dass man diesen nur begrenzt oft beschreiben kann, bzw. dass man nur Konstanten auf den Flashspeicher speichern kann.

Da sich die Daten in dem Array des Öfteren ändern werden, müssen diese Änderungen natürlich auch auf dem Flash gesichert werden. Verwechsle ich den Flash gerade mit dem EEPROM, bzw. welcher der beiden Speicherarten hat jetzt eine begrenzte Lebensdauer? Habe jetzt mehrere Beschreibungen zu den beiden Arten gelesen und bin jetzt leicht verwirrt :frowning:

Könnte vielleicht jemand schnell (und einigermaßen Anfängergerecht) erklären, was der genaue Unterschied zwischen den beiden Speichermethoden ist, bzw. was für meinen Anwendungsfall von Vorteil wäre?

Code habe ich bis jetzt noch keinen...ich weiß nur, dass ich ein paar Variablen und einen Array haben werde, die irgendwie festgehalten werden müssen.

MfG
Klaus

Beide haben eine begrenzte Anzahl Schreibzugriffen, EEPROM ca. 100 000 garantierten Zyklen, Flash etwa das Zehnfache.
Jetzt kannst Du Dir aus der Häufigkeit Deiner Änderungen ausrechnen, wie lange Du mit dem EEPROM hin kommst. Wir kennen die Häufigkeit Deiner Änderungen nicht. Flash solltest Du nicht in erwägung ziehen.

Evtl. wäre FRAM etwas für Dich. Er ist ca. 10 hoch 35 mal beschreibbar und behält die Daten auch ohne Betriebsspannung. Der Hersteller gibt 55 Jahre an.

Gruß Tommy

Verwechsle ich den Flash gerade mit dem EEPROM, bzw. welcher der beiden Speicherarten hat jetzt eine begrenzte Lebensdauer?

Beide.

Aber Faktor 10 Unterschied.

Vielleicht möchtest du ja lieber ein I2C FRAM einsetzen...

Beide haben eine begrenzte Anzahl Schreibzugriffen, EEPROM ca. 100 000 garantierten Zyklen, Flash etwa das Zehnfache.

Ok, danke sehr hilfreich :wink:

für meinen Anwendungsfall sollte EEPROM dann eh passen

MfG
Klaus

Tommy56:
EEPROM ca. 100 000 garantierten Zyklen, Flash etwa das Zehnfache.

Hallo Tommy,
ich glaube, da hast Du gerade das zehnfache mit dem zehntel verwechselt :wink:

Ok, Du hast Recht. Ein Blick ins Datenblatt bringt die Info.

Gruß Tommy

Aber lesen kann ich den EEPROM theoretisch unendlich oft, oder gibts da auch eine genaue Lebensdauerangabe?

für meinen Anwendungsfall sollte EEPROM dann eh passen

Da sich die Daten in dem Array des Öfteren ändern werden

Ist jetzt die Frage, was "des Öfteren" bedeutet. :wink:

Da EEPROM relativ schnell und beliebig oft gelesen werden kann, wurde die Methode EEPROM.put erfunden,
die alle Datentypen und ganze Arrays schreiben kann, und außerdem erst prüft und nur echte Änderungen schreibt.

Lesen kann man beliebig oft.

Die Daten im EEprom werden durch Ladungen in einem Isolierten Gate eines MOSFETs gespeichert. Diese Ladugen bekommt mann nicht wieder 100% weg und darum hat man bei einer bestimmten Anzahl von Löschen ( auf HIGH schreiben ) bzw schreiben irgendwann Ladungen herum die man nicht mehr wegbekommt. Darm garantiern die Hersteller nur eine Begrenzte Anzahl von Schreibzyklen bei denen der Datenerhalt innerhalb der Spezifikation garantiert wird.

Grüße Uwe

Hallo

ich möchte das Thema nochmal aufgreifen.
Welche (Speicher)Adressen darf ich benutzen ohne mir den Bootloader oder das Programm zu beschädigen?
Ich arbeite mit einem STM32F1 (Blue Pill).

Folgenden Code hab ich gefunden:

float f = 123.456f; //Variable to store in EEPROM.
int eeAddress = 0; //Location we want the data to be put.

//One simple call, with the address first and the object second.
EEPROM.put(eeAddress, f);

Fange ich bei 5 Variabeln, die ich speichern möchte, einfach bei Adresse Null an?
Viele Grüße
Martin

Martin-11:
Hallo

ich möchte das Thema nochmal aufgreifen.
Welche (Speicher)Adressen darf ich benutzen ohne mir den Bootloader oder das Programm zu beschädigen?
Ich arbeite mit einem STM32F1 (Blue Pill).

Folgenden Code hab ich gefunden:

float f = 123.456f; //Variable to store in EEPROM.
int eeAddress = 0; //Location we want the data to be put.

//One simple call, with the address first and the object second.
EEPROM.put(eeAddress, f);

Fange ich bei 5 Variabeln, die ich speichern möchte, einfach bei Adresse Null an?
Viele Grüße
Martin

Gehts um einen Arduino ?

Das EEprom was du hier beschreiben willst, hat nix mit dem Flashspeicher zu tun.

Hallo Dieter,

es ist ein Arduino STM32F1.

Wusste gar nicht, dass es einen Arduino mit diesem uC gibt. Link?

Gibt es auch nicht ( der Name 'Arduino' ist soweit ich weis geschützt, Nachbauten und Alternativdesigns dürfen sich deshalb auch nicht so nennen ).

Der Bluepill wird mit der STM32duino Erweiterung der IDE programmiert. Da die STM32F1-Prozessoren kein EEPROM besitzen, wird das EEPROM im Flash emuliert. Meines Wissens ( hab's mal genau gewusst, müsste aber mal wieder nachschauen ) wird dafür ein Bereich am Ende des Flash reserviert. Die Adressen, die man in der EEPROM Lib angibt, sind virtuell, und haben nichts mit der tatsächlichen Adresse im Flash zu tun. Wegen der begrenzten Schreibzyklen des Flash wird da auch nicht immer auf die gleiche Flash-Adresse geschrieben, selbst wenn du im EEPROM.write immer die gleiche Adresse verwendest. Die Lib hat ihre eigene Adressverwaltung. Du kannst also getrost bei Adresse 0 anfangen.

N.B. die STM32F1 sind meiner Meinung nach eine Interessante Alternative. Man bekommt unglaublich viel Rechenleistung (Cortex M3 Kern mit 72MHz) und Peripherie fürs Geld. Der Bluepill kostet nicht mehr als ein Nano-Clone und ist auch nur wenig größer. ( Meine MobaTools laufen übrigends auch da drauf :wink: )

Hallo

hier der Link:
https://wiki.stm32duino.com/index.php?title=Blue_Pill
der Preis liegt bei 1,60 bis 2 €.
Ich benutze diese hauptsächlich auf der Moba.

Habe hier etas gefunden, hoffe das klappt:

Gruß Martin

Martin-11:
Hallo

hier der Link:
https://wiki.stm32duino.com/index.php?title=Blue_Pill
der Preis liegt bei 1,60 bis 2 €
Ich benutze diese hauptsächlich auf der Moba.

Habe hier etas gefunden, hoffe das klappt:

Arduino_Core_STM32/libraries/EEPROM at main · stm32duino/Arduino_Core_STM32 · GitHub

Gruß Martin

Ok, Martin, deine Boardbezeichnung habe ich anfangs tatsächlich überlesen.
Aber ein Arduino ist das def. nicht.
Dennoch danke für den Link.