diff --git a/pump_controller_8_2_OLED_DONE/pump_controller_8_2_OLED_DONE.ino b/pump_controller_8_2_OLED_DONE/pump_controller_8_2_OLED_DONE.ino index fc6dc87..6b19a40 100644 --- a/pump_controller_8_2_OLED_DONE/pump_controller_8_2_OLED_DONE.ino +++ b/pump_controller_8_2_OLED_DONE/pump_controller_8_2_OLED_DONE.ino @@ -41,6 +41,7 @@ #include #include #include +#include // EEPROM_start / FS_PHYS_ADDR — только для диагностики #include #include @@ -721,9 +722,24 @@ void setup() { flashIde == flashReal ? "совпадает" : "!!! НЕ СОВПАДАЕТ !!!"); Serial.printf("[FLASH] скетч %u Б, свободно под скетч %u Б\n", ESP.getSketchSize(), ESP.getFreeSketchSpace()); + + // Куда именно EEPROM собирается писать. Если это смещение выходит за размер + // физической микросхемы, spi_flash_erase_sector() провалится и commit() + // вернёт false — то есть настройки не сохранятся никогда. + uint32_t eepromOffset = EEPROM_start - 0x40200000; + Serial.printf("[FLASH] EEPROM пишет в сектор %u (смещение 0x%06X)%s\n", + eepromOffset / SPI_FLASH_SEC_SIZE, eepromOffset, + eepromOffset + SPI_FLASH_SEC_SIZE <= flashReal + ? "" : " <<< ЗА ПРЕДЕЛАМИ ФИЗИЧЕСКОГО ФЛЕША!"); + Serial.printf("[FLASH] файловая система: смещение 0x%06X, размер %u Б%s\n", + FS_PHYS_ADDR, FS_PHYS_SIZE, + FS_PHYS_ADDR + FS_PHYS_SIZE <= flashReal + ? "" : " <<< ЗА ПРЕДЕЛАМИ ФИЗИЧЕСКОГО ФЛЕША!"); + if (flashIde != flashReal) { - Serial.println(F("[FLASH] ВНИМАНИЕ: выберите в IDE верный размер флеша,")); - Serial.println(F("[FLASH] иначе EEPROM не сохраняется.")); + Serial.println(F("[FLASH] ВНИМАНИЕ: размер флеша в IDE не соответствует")); + Serial.println(F("[FLASH] микросхеме. Ни EEPROM, ни LittleFS работать не будут,")); + Serial.println(F("[FLASH] пока в Tools -> Flash Size не выбран верный размер.")); } EEPROM.begin(EEPROM_SIZE);