------- 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.