Flash-Speicher beschreiben mit Microcontroller

formatting link

------- There are two functions in the Pi Pico SDK used to write into the flash:

flash_range_erase(uint32_t flash_offs, size_t count); flash_range_program(uint32_t flash_offs, const uint8_t *data, size_t count);

The flash_range_erase() function resets count bytes of flash (which needs to be a multiple of the sector size, 4096) beginning at address flash_offs, to 0xFF (all ones). This task appears to be the failure mode of flash when it wears out, as some of the bits won't be flipped from zero back to one. Thus, you want to do this as infrequently as possible on each sector, to avoid wearing the media out. Once you have one or more sectors in this known state, use the flash_range_program() function to program one or more 256-byte pages (stored in *data) to the count bytes beginning at address flash_offs. Remember that in this case count needs to be a multiple of FLASH_PAGE_SIZE (256). It will then flip some of the bits to zeroes, in order to program one or more pages of flash to the values stored in *data. In my case I want to write one 32-bit integer to the first four bytes of the first page of the last sector:

-------

Und dann braucht er fuer seinen Zweck jeweils eine Page um eine 4Byte Zahl zu speichern. Die Frage ist ob man eine Page nicht mehrmals programmieren kann ohne sie zu loeschen, Die Bytes die unprogrammiert bleiben sollen setzt man auf 0xFF und die bereits programmierten Bytes setzt man auf den Wert den sie bereits haben. Dann koennte man die Zahlen hintereinander in die Page setzen, und haette auch keinen abnutzung, denn die kommt ja nur durchs Loeschen, nicht durchs Programmieren...

Der Zweck waere ein Datenlogger der regelmaessig eingeschaltet wird, dann Temperatur, Luftfeuchte usw. misst diese in den Flash schreibt und dann wieder abschaltet, ohne dass man noch einen weiteren Speicher braucht. Man wuerde sich also ein 256Byte batteriegepuffertes RAM sparen in das man die Daten schreibt bis es voll ist, und das dann auf eine Page im Flash.

In jedem Fall wuerde ich mir solche Funktionen auch fuer SD-Karten wuenschen, aber da verstecken die sich in der Firmware der Karte und man kennt noch nichtmal sector size und page size.

Reply to
Carla Schneider
Loading thread data ...

Am 22.09.23 um 16:05 schrieb Carla Schneider:

Theoretisch ja, praktisch eher nein.

Das Problem sind die Multi-Level Cell und Fehlerkorrekturinformationen. Mindestens letztere ändern sich natürlich jedes mal.

Oder ein kleines serielles EEProm. Die sind auch hart im nehmen und brauchen keine Batterie.

Wie gesagt, der interne Controller kann ja alles mögliche mit den Daten machen. Er könnte gar versuchen, sie zu komprimieren.

Marcel

Reply to
Marcel Mueller

Ja, die gibts inzwischen bis 4MBit, also 512 KB mit SPI. 25CSM04 von Microchip. Da kann man sich das Flash schon fast sparen, abhängig von der Datenmenge die man loggen will.

Gerrit

Reply to
Gerrit Heitsch

Das Flash hat den Vorteil dass es bereits im Raspberry Pi pico eingebaut ist.

Reply to
Carla Schneider

Bei STM-Controllern habe ich das schon öfter gemacht, sogar bitweise als Betriebsstundenzähler. Funktioniert prima. Bei den Typen mit ECC geht's bei 64-Bit Speicher leider nur 8-Byte-Weise.

Gruß Andreas

Reply to
Andreas Fecht

Korrekt, bei NOR-Flash geht das so. Entweder, man hat Versionszähler an den Daten, so daß man erkennen kann, welches die neueste Version ist. Oder man überschreibt die alten, ungültigen Daten mit 0x00 und schreibt die neuen Daten in den ersten freien Bereich dahinter. Wenn Du mehr als einen Datenblock hast, wirst Du mindestens 2 Flash-Pages brauchen, damit Du eine davon löschen kannst, ohne alle Daten zu verlieren.

Alternativ könntest Du fertigen Code nehmen, der das bereits kann, z.B. spiffs:

formatting link
cu Michael

Reply to
Michael Schwingen

Wo ist das ein Vorteil, wenn Du Bedenken wegen des mehrfachen Überschreibens hast? Ist der Flash ausreichend geschädigt, ist der ganze Controller Schrott :-(

DoDi

Reply to
Hans-Peter Diettrich

Hingegen kann man ein externes SPI-EEPROM in einen Sockel stecken und bei Bedarf tauschen.

Gerrit

Reply to
Gerrit Heitsch

Kann dann ggf. sogar zum Datenaustausch benutzt werden...

Im Arduino Forum wird auch FRAM empfohlen, mit fast unbeschränktem Überschreiben. Kernspeicher rulez?

DoDi

Reply to
Hans-Peter Diettrich

Der Vorteil ist weniger Arbeit wenn man mehrere von den Dinger zusammenbasteln will. Die Bedenken sind ja nicht das Problem, sondern die tatsaechlichen Eigenschaften des Geraets.

Nicht der ganze Controller ich brauche nur einen Teil des Flashs zum Datenloggen.

Ich habe da GPS Logger, gekauft vor 10 Jahren deren Memory war schon 3 Jahre nach dem Kauf nicht mehr funktionfaehig. Und mehr als 200 Stunden haben die pro Jahr nicht geloggt. Die waren etwa 10 mal teuer wie ein Raspberry Pi Pico, der eine taugt noch als GPS-Maus der andere geht gar nicht mehr.

Reply to
Carla Schneider

Letzteren muss man heutzutage aber selber stricken.

Gerrit

Reply to
Gerrit Heitsch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.