Запись в SPIFF микроконтроллера Espressif ESP32 может приводить к потере данных. Чтобы этого избежать нужно делить память SPIFF на партиции. В файле партиций пишем:
spiffs, data, spiffs, 0x411000,0x240000, spiffs2, data, spiffs, 0x651000,0x0C0000,
С первой партицией работаем также, как и работали. В нее идет запись. Вот так инициализируем вторую при старте:
#ifdef TWO_SPIFFS_PARTITIONS esp_vfs_spiffs_conf_t conf = { .base_path = "/spiffs2", .partition_label = "spiffs2", .max_files = 10, .format_if_mount_failed = false }; esp_err_t err = esp_vfs_spiffs_register(&conf); if(err != ESP_OK){ MH_LOGE("Mounting SPIFFS2 failed! Error: %d", err); } #endif
Открываем файлы через fopen(«/spiffs2/filename», mode). Для детектирования повреждения партиции есть следующие способы:
- Не получается смонтировать партицию.
- Свободное место в партиции сильно отличается от того, что должно быть.
Если партиция повреждена, то форматируем:
bool SPIFFSFS::format() { disableCore0WDT(); esp_err_t err = esp_spiffs_format(partitionLabel_); enableCore0WDT(); if(err){ log_e("Formatting SPIFFS failed! Error: %d", err); return false; } return true; }