5.4 KiB
ESP32 SPIFFS Filesystem Test Project
This project tests the SPIFFS filesystem implementation on ESP32.
Overview
This project demonstrates:
- Building SPIFFS filesystem images
- Uploading SPIFFS images to ESP32
- Mounting and reading SPIFFS filesystem on ESP32
- Downloading and extracting SPIFFS images from ESP32
Requirements
- PlatformIO
- ESP32 development board
- USB cable
Project Structure
arduino-spiffs/
├── data/ # Files to be included in SPIFFS image
│ ├── test.txt
│ ├── README.md
│ └── ...
├── src/
│ └── spiffs_test.ino # Main Arduino sketch
├── partitions.csv # Partition table with SPIFFS partition
├── platformio.ini # PlatformIO configuration
└── unpacked_fs/ # Downloaded files (created by download_spiffs)
Usage
1. Build Firmware
pio run
2. Build SPIFFS Filesystem Image
Place your files in the data/ directory, then:
pio run -t buildfs
This creates a SPIFFS filesystem image at:
.pio/build/esp32dev/spiffs.bin
3. Upload Firmware and Filesystem
# Upload firmware
pio run -t upload
# Upload filesystem
pio run -t uploadfs
4. Monitor Serial Output
pio run -t monitor
Expected output:
SPIFFS mounted successfully
Total space: 1507328
Used space: 12345
Listing directory: /
FILE: test.txt SIZE: 12
FILE: README.md SIZE: 456
Test complete
5. Download Filesystem from Device
To download and extract the filesystem from the device:
pio run -t download_spiffs
Files will be extracted to unpacked_fs/ directory.
Partition Table
The partitions.csv defines the flash layout:
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x140000,
app1, app, ota_1, 0x150000,0x140000,
spiffs, data, spiffs, 0x290000,0x170000,
The spiffs partition:
- Type: data
- SubType: spiffs (0x82)
- Offset: 0x290000 (2,686,976 bytes)
- Size: 0x170000 (1,507,328 bytes = ~1.44 MB)
SPIFFS Configuration
Default SPIFFS configuration (can be customized in platformio.ini):
board_build.spiffs.page_size = 256
board_build.spiffs.block_size = 4096
board_build.spiffs.obj_name_len = 32
board_build.spiffs.meta_len = 4
board_build.spiffs.use_magic = true
board_build.spiffs.use_magic_len = true
board_build.spiffs.aligned_obj_ix_tables = false
These match ESP-IDF defaults:
CONFIG_SPIFFS_PAGE_SIZE = 256CONFIG_SPIFFS_OBJ_NAME_LEN = 32CONFIG_SPIFFS_META_LENGTH = 4CONFIG_SPIFFS_USE_MAGIC = trueCONFIG_SPIFFS_USE_MAGIC_LENGTH = true
Troubleshooting
"SPIFFS Mount Failed"
Possible causes:
- Filesystem not uploaded
- Wrong partition table
- Corrupted filesystem
Solutions:
# Rebuild and upload filesystem
pio run -t buildfs
pio run -t uploadfs
# Or erase flash and start fresh
pio run -t erase
pio run -t upload
pio run -t uploadfs
"No SPIFFS filesystem partition found"
Cause: Partition table doesn't have a SPIFFS partition
Solution: Check partitions.csv has a partition with SubType: spiffs
Files not appearing
Cause: Files not in data/ directory when building
Solution:
- Add files to
data/directory - Rebuild filesystem:
pio run -t buildfs - Upload:
pio run -t uploadfs
Code Example
#include "FS.h"
#include "SPIFFS.h"
void setup() {
Serial.begin(115200);
// Mount SPIFFS filesystem
if (!SPIFFS.begin(false)) {
Serial.println("SPIFFS Mount Failed");
return;
}
// List files
File root = SPIFFS.open("/");
File file = root.openNextFile();
while (file) {
Serial.printf("File: %s, Size: %d\n",
file.name(), file.size());
file = root.openNextFile();
}
// Read file
File f = SPIFFS.open("/test.txt", "r");
if (f) {
String content = f.readString();
Serial.println(content);
f.close();
}
// Write file
f = SPIFFS.open("/output.txt", "w");
if (f) {
f.println("Hello from ESP32!");
f.close();
}
}
void loop() {
// Your code here
}
Platform Configuration
This project uses a custom platform with SPIFFS filesystem support:
[env:esp32dev]
platform = espressif32
framework = arduino
board = esp32dev
board_build.filesystem = spiffs
board_build.partitions = partitions.csv
Comparison with Other Filesystems
| Feature | SPIFFS | LittleFS | FatFS |
|---|---|---|---|
| Wear Leveling | Built-in | Built-in | Requires WL layer |
| Max File Size | ~1MB | Limited by partition | 4GB |
| Directories | No | Yes | Yes |
| Performance | Medium | Fast | Fast |
| RAM Usage | Low | Low | Medium |
| Reliability | Good | Excellent | Good |
References
Notes
- SPIFFS does not support directories (flat filesystem)
- File names are limited to 32 characters by default
- SPIFFS has built-in wear leveling
- Maximum file size depends on available RAM
- SPIFFS is being deprecated in favor of LittleFS in newer ESP-IDF versions