2017-04-10 10:06:35 -04:00
|
|
|
Wear Levelling APIs
|
|
|
|
===================
|
|
|
|
|
|
|
|
Overview
|
|
|
|
--------
|
|
|
|
Most of the flash devices and specially SPI flash devices that are used in ESP32
|
2017-07-31 00:50:20 -04:00
|
|
|
have sector based organization and have limited amount of erase/modification cycles
|
|
|
|
per memory sector. To avoid situation when one sector reach the limit of erases when
|
2017-04-10 10:06:35 -04:00
|
|
|
other sectors was used not often, we have made a component that avoid this situation.
|
2017-07-31 00:50:20 -04:00
|
|
|
The wear levelling component share the amount of erases between all sectors in the
|
2017-04-10 10:06:35 -04:00
|
|
|
memory without user interaction.
|
|
|
|
The wear_levelling component contains APIs related to reading, writing, erasing,
|
2017-07-31 00:50:20 -04:00
|
|
|
memory mapping data in the external SPI flash through the partition component. It
|
|
|
|
also has higher-level APIs which work with FAT filesystem defined in
|
2017-03-26 18:01:52 -04:00
|
|
|
the :doc:`FAT filesystem </api-reference/storage/fatfs>`.
|
2017-04-10 10:06:35 -04:00
|
|
|
|
2017-07-31 00:50:20 -04:00
|
|
|
The wear levelling component, together with FAT FS component, works with FAT FS sector size 4096
|
|
|
|
bytes which is standard size of the flash devices. In this mode the component has best performance,
|
|
|
|
but needs additional memoty in the RAM. To save internal memory the component has two additional modes
|
|
|
|
to work with sector size 512 bytes: Performance and Safety modes. In Performance mode by erase sector
|
|
|
|
operation data will be stored to the RAM, sector will be erased and then data will be stored
|
|
|
|
back to the flash. If by this operation power off situation will occur, the complete 4096 bytes
|
|
|
|
will be lost. To prevent this the Safety mode was implemented. In safety mode the data will be first
|
|
|
|
stored to the flash and after sector will be erased, will be stored back. If power off situation will
|
|
|
|
occur, after power on, the data will be recovered.
|
|
|
|
By default defined the sector size 512 bytes and Performance mode. To change these values please use
|
|
|
|
the configuration menu.
|
2017-07-20 06:09:39 -04:00
|
|
|
|
|
|
|
|
2017-07-31 00:50:20 -04:00
|
|
|
The wear levelling component does not cache data in RAM. Write and erase functions
|
2017-04-10 10:06:35 -04:00
|
|
|
modify flash directly, and flash contents is consistent when the function returns.
|
|
|
|
|
|
|
|
|
|
|
|
Wear Levelling access APIs
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
This is the set of APIs for working with data in flash:
|
|
|
|
|
|
|
|
- ``wl_mount`` mount wear levelling module for defined partition
|
|
|
|
- ``wl_unmount`` used to unmount levelling module
|
|
|
|
- ``wl_erase_range`` used to erase range of addresses in flash
|
|
|
|
- ``wl_write`` used to write data to the partition
|
|
|
|
- ``wl_read`` used to read data from the partition
|
|
|
|
- ``wl_size`` return size of avalible memory in bytes
|
|
|
|
- ``wl_sector_size`` returns size of one sector
|
|
|
|
|
|
|
|
Generally, try to avoid using the raw wear levelling functions in favor of
|
|
|
|
filesystem-specific functions.
|
|
|
|
|
|
|
|
Memory Size
|
|
|
|
-----------
|
|
|
|
|
2017-07-31 00:50:20 -04:00
|
|
|
The memory size calculated in the wear Levelling module based on parameters of
|
2017-04-10 10:06:35 -04:00
|
|
|
partition. The module use few sectors of flash for internal data.
|
|
|
|
|