🛠 Gérer la flash 4 Mo : partitions et LittleFS
Objetivos
Comprender dónde residen los datos en la memoria flash QSPI de 4 MB del ESP-12E y utilizar LittleFS, el sistema de archivos moderno del core esp8266 (sucesor de SPIFFS, más robusto ante cortes de corriente). Los menús «Flash Size» y «Flash Mode» de Arduino IDE seleccionan el esquema de particiones grabado al inicio de la flash: bootloader, dos slots de sketch para OTA, zona NVS (calibración Wi-Fi + parámetros) y partición de archivos. Una inconsistencia entre la flash real del módulo y el preset elegido provoca bucles de reinicio (boot loops) característicos. Aprenderás a formatear, escribir, releer un archivo de configuración y mostrar el espacio utilizado.
Material
- 1 módulo ESP8266-ESP-12E con flash de 4 MB (verifica el marcado: los clones ESP-12 vendidos como 12E a veces tienen 512 KB o 1 MB)
- 1 cable USB-serie (el plugin «LittleFS Data Upload» o la herramienta ESP8266FS para subir archivos desde el IDE)
- Fuente de alimentación de 3,3 V estable ≥ 500 mA
- Arduino IDE + core esp8266 reciente (LittleFS está integrado)
Código completo
#include <ESP8266WiFi.h>
#include <LittleFS.h>
void setup {
Serial.begin(115200);
// Montage ; formatage seulement au premier lancement
if (!LittleFS.begin) {
Serial.println("LittleFS absent -> formatage (efface TOUT)");
if (!LittleFS.format) { Serial.println("Echec format : verifie Flash Size 4MB"); while (true) yield; }
LittleFS.begin;
}
// Etat de la partition
fs::FSInfo info;
LittleFS.info(info);
Serial.printf("Flash totale : %u Ko | LittleFS : %u Ko utilises sur %u Ko\n",
ESP.getFlashChipSize / 1024, info.usedBytes / 1024, info.totalBytes / 1024);
// Ecriture d'un fichier de configuration
{
File f = LittleFS.open("/config.txt", "w");
if (f) { f.println("ssid=mon-reseau"); f.println("seuil=42"); f.close; }
}
// Relecture ligne par ligne
File f = LittleFS.open("/config.txt", "r");
if (f) {
Serial.println("--- config.txt ---");
while (f.available) Serial.write(f.read);
f.close;
} else {
Serial.println("Fichier absent");
}
// Inventaire
File d = LittleFS.open("/");
if (d.isDirectory) {
File e = d.openNextFile;
while (e) { Serial.printf("%s (%u octets)\n", e.name, e.size); e = d.openNextFile; }
}
}
void loop { yield; }
Verificación esperada
En la primera ejecución: «LittleFS ausente -> formateando», luego el inventario muestra config.txt con sus dos líneas. La línea de estado debe indicar aproximadamente 4096 KB de flash total (si no, tu preset es incorrecto). Vuelve a ejecutar sin modificar el código: ya no se formatea, el archivo se conserva — bórralo desde el monitor o vuelve a formatear para verificar el ciclo nuevamente. Sube un archivo con la herramienta LittleFS Data Upload: aparecerá en el inventario tras reiniciar.
Errores frecuentes
- Boot loop «ets ... load 0x40...» tras la carga: el tamaño de flash declarado no corresponde al chip real (preset de 4 MB en un clon de 1 MB, o DOUT en un módulo QIO); prueba el otro Flash Mode (DIO/DOUT) y verifica el marcado.
- Creer que LittleFS y SPIFFS comparten la partición: ocupan la misma zona con formatos diferentes; usa la herramienta de conversión o formatea, de lo contrario begin fallará.
- Escribir en cada loop: la flash soporta ~100 000 ciclos de escritura por sector; mantén el estado en RAM y escribe solo ocasionalmente (o mediante rotación de archivos).
- Olvidar f.close: los datos permanecen en el búfer y el archivo aparece vacío tras reiniciar.
- Abrir demasiados archivos simultáneamente: el límite es bajo (~10), y cada archivo abierto consume valiosa RAM (80 KB de heap en total).
- Formatear para ahorrar tiempo en cada arranque: el desgaste prematuro de la flash se paga con corrupción meses después.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht11.inoArduinoluxmetre.inoArduinoserveur-web.inoArduino