Fat filesystem on external flash for the ESP32
FatFlash utilizes my ExtFlash component to provide FATFS support on external flash chips.
It uses the FATFS and wear leveling components from the esp-idf SDK rather than distributing local copies.
To clone this repo, use the following to automatically clone the extflash submodule:
git clone --recurse-submodules https://github.com/lllucius/esp32_fatflash
To use, just add the "extflash" and "fatflash" components to your components directory and initialize it with something like:
#include "fatflash.h"
void app_main()
{
ExtFlash flash;
esp_err_t err;
ext_flash_config_t cfg =
{
.vspi = true,
.sck_io_num = PIN_SPI_SCK,
.miso_io_num = PIN_SPI_MISO,
.mosi_io_num = PIN_SPI_MOSI,
.ss_io_num = PIN_SPI_SS,
.hd_io_num = PIN_SPI_HD,
.wp_io_num = PIN_SPI_WP,
.speed_mhz = 40,
.dma_channel = 1,
.queue_size = 2,
.sector_size = 0,
.capacity = 0
};
err = flash.init(&cfg);
if (err != ESP_OK)
{
...
}
fat_flash_config_t fat_cfg =
{
.flash = &extflash,
.base_path = MOUNT_POINT,
.open_files = 4,
.auto_format = true
};
err = fatflash.init(&fat_cfg);
if (err != ESP_OK)
{
...
}
...
}
The configuration options for FatFlash are:
typedef struct
{
ExtFlash *flash; // initialized instance of ExtFlash
const char *base_path; // mount point
int open_files; // number of open files to support
bool auto_format; // true=format if not valid
} fat_flash_config_t;
More documentation to follow.