Hallo, ich überlege gerade wie man am einfachsten einen Temperaturlogger realisiert. Eine Messung benötigt 16 Bit. In einem Stm32f103 mit ca.100kb Flash lässt sich einiges speichern, nur ergibt sich das Problem "woher weiß ich beim auslesen wie viele Messungen gespeichert sind". Folgedessen muss eine Variable mit jeder Messung inkrementiert werden und auch abgespeichert werden. Im Datasheet steht 10k bis 100k Lebenserwartung. Wie umgehe ich das Problem ohne, dass ich meinen Flash kaputt schreibe.
Hi, suche mal eeprom emulation ;-) http://www.elektronikpraxis.vogel.de/themen/hardwareentwicklung/mikrocontrollerprozessoren/articles/35381/ LG tux
Bei ST gibt es eine Application-note "virtuelles EEPROM im Flash", schau die mal an. Bei der Speicherung im EEPROM oder Flash ist eine Index-Variable, die auf den aktuellen Temperaturwert zeigt, ziemlich problematisch (da diese Zelle bei jedem Schreibvorgang inkrementiert werden würde). Besser ist es, den Wert vor dem aktuellen Wert mit einer Null zu beschreiben, anhand derer Du den aktuellen Wert finden kannst. Gruß, Stefan
Hallo, als Tipp Ringspeicher, damit ist das Problem mit den Schreibzyklen gelöst. Wenn dein Ringspeicher mit 0xFFFF gefüllt ist, musst du nur von Beginn bis 0xFFFF scannen und du kennst die Anzahl. Dies fällt zwangsweise ab, da du im Flash nur ganze Sektoren löschen kannst. (schreiben geht byteweise). Falls du wirklich 16-Bit ausnutzt, dann lege die Werte als 32-Bit ab. An der Stelle musst du einen kompletten Sektor für die Messwerte vorhalten, da du ja nur diesen komplett löschen kannst. Bitte im Datenblatt nachschauen, die meisten STM32 haben unterschiedliche Sektorgrößen innerhalb des Flash (z.B. 4x 4kB, 3x 16kB, 1x 64kB macht zusammen 128kB) Gruß Alex
Alexander L. schrieb: > Hallo, > als Tipp Ringspeicher, damit ist das Problem mit den Schreibzyklen > gelöst... Kleine Ergänzung dazu noch: Irgendwo wird wahrscheinlich auch Startzeit/datum und Messintervall gespeichert werden, dann kann man den gesamten Bereich, je nach gewünschtem Overhead, auch in bspw. Blöcke a 64 Byte aufteilen und an den Beginn z.B. Zeitstempel (32-Bit mit Sekunden seit xy) packen. Wenn es kein Ringspeicher wird und stattdessen immer von "vorn" geschrieben wird, kann dann der letzte geschriebene Block auch mit einer "halben" Binärsuche gefunden werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.