SPIFFS • LittleFS • FATFS (FFat)
This guide explains how to create filesystem images, flash them, and use them in ESP32 projects.
C:\Users\<user_name>\AppData\Local\Arduino15\packages\esp32\tools\mkspiffs\0.2.3\mkspiffs.exe
C:\Users\<user_name>\AppData\Local\Arduino15\packages\esp32\tools\mklittlefs\3.0.0-gnu12-dc7f933\mklittlefs.exe
your_project/
├── main.ino
└── data/
├── index.html
├── config.json
spiffs, data, spiffs, <Offset>, <Size>,
spiffs, data, spiffs, 0x290000, 0x170000,
Offset: 0x290000
Size: 0x170000
mkspiffs -c <data_folder_name> -p 256 -b 4096 -s <size_given_in_parition_table> spiffs.bin
mkspiffs -c data -p 256 -b 4096 -s 0x170000 spiffs.bin
mklittlefs -c <data_folder_name> -p 256 -b 4096 -s <size_given_in_parition_table> littlefs.bin
mklittlefs -c data -p 256 -b 4096 -s 0x170000 littlefs.bin
esptool.py --chip esp32 --port COM5 --baud 921600 write_flash 0x290000 spiffs.bin
ESP-IDF can automatically generate and flash the SPIFFS image without manual tools.
spiffs_create_partition_image(spiffs data FLASH_IN_PROJECT)
idf.py build
idf.py flash
This will:
data/idf.py menuconfig
Go to: Component config → SPIFFS → Enable SPIFFS
REQUIRES spiffs
#include <stdio.h>
#include "esp_log.h"
#include "esp_spiffs.h"
static const char *TAG = "SPIFFS";
void app_main(void)
{
esp_vfs_spiffs_conf_t conf = {
.base_path = "/spiffs",
.partition_label = NULL,
.max_files = 5,
.format_if_mount_failed = true
};
if (esp_vfs_spiffs_register(&conf) != ESP_OK) {
ESP_LOGE(TAG, "Mount failed");
return;
}
FILE *f = fopen("/spiffs/config.json", "r");
if (!f) {
ESP_LOGE(TAG, "File open failed");
return;
}
char line[128];
while (fgets(line, sizeof(line), f)) {
printf("%s", line);
}
fclose(f);
}
#include <SPIFFS.h>
void setup() {
Serial.begin(115200);
if (!SPIFFS.begin(true))
{
Serial.println("SPIFFS Mount Failed");
return;
}
File file = SPIFFS.open("/config.json", "r");
if (file)
{
Serial.println(file.readString());
file.close();
}
}
void loop() {}
#include <LittleFS.h>
void setup()
{
Serial.begin(115200);
if (!LittleFS.begin(true))
{
Serial.println("LittleFS Mount Failed");
return;
}
File file = LittleFS.open("/config.json", "r");
if (file)
{
Serial.println(file.readString());
file.close();
}
}
void loop() {}
#include <FFat.h>
void setup() {
Serial.begin(115200);
if (!FFat.begin(true)) {
Serial.println("FFat Mount Failed");
return;
}
File file = FFat.open("/test.txt", FILE_WRITE);
file.println("Hello from FATFS!");
file.close();
file = FFat.open("/test.txt");
while (file.available()) {
Serial.write(file.read());
}
file.close();
}
void loop() {}
| Type | .bin Required | Tool |
|---|---|---|
| SPIFFS | Yes | mkspiffs |
| LittleFS | Yes | mklittlefs |
| FATFS (FFat) | No | Runtime |
/spiffs/ prefix