Запись в 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;
}