C
Carla Schneider
Guest
https://www.makermatrix.com/blog/read-and-write-data-with-the-pi-pico-onboard-flash/
-------
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.
-------
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.