Диагностика: печатать сектор EEPROM и границы FS против физического флеша
commit() возвращает false, то есть падает сам вызов SDK (spi_flash_erase_sector либо spi_flash_write). Самая вероятная причина — сектор EEPROM за пределами физической микросхемы. При раскладке 4MB/FS:2MB сектор EEPROM это 1019 (смещение 0x3FB000), что требует чипа не меньше 4 МБ. Теперь лог сам печатает это смещение и сравнивает с ESP.getFlashChipRealSize(), а также границы файловой системы — последнее важно, потому что при том же дефекте LittleFS по адресу 0x400000 окажется недоступен ровно так же. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,7 @@
|
|||||||
#include <WiFiManager.h>
|
#include <WiFiManager.h>
|
||||||
#include <EEPROM.h>
|
#include <EEPROM.h>
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
|
#include <flash_hal.h> // EEPROM_start / FS_PHYS_ADDR — только для диагностики
|
||||||
#include <Adafruit_GFX.h>
|
#include <Adafruit_GFX.h>
|
||||||
#include <Adafruit_SSD1306.h>
|
#include <Adafruit_SSD1306.h>
|
||||||
|
|
||||||
@@ -721,9 +722,24 @@ void setup() {
|
|||||||
flashIde == flashReal ? "совпадает" : "!!! НЕ СОВПАДАЕТ !!!");
|
flashIde == flashReal ? "совпадает" : "!!! НЕ СОВПАДАЕТ !!!");
|
||||||
Serial.printf("[FLASH] скетч %u Б, свободно под скетч %u Б\n",
|
Serial.printf("[FLASH] скетч %u Б, свободно под скетч %u Б\n",
|
||||||
ESP.getSketchSize(), ESP.getFreeSketchSpace());
|
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) {
|
if (flashIde != flashReal) {
|
||||||
Serial.println(F("[FLASH] ВНИМАНИЕ: выберите в IDE верный размер флеша,"));
|
Serial.println(F("[FLASH] ВНИМАНИЕ: размер флеша в IDE не соответствует"));
|
||||||
Serial.println(F("[FLASH] иначе EEPROM не сохраняется."));
|
Serial.println(F("[FLASH] микросхеме. Ни EEPROM, ни LittleFS работать не будут,"));
|
||||||
|
Serial.println(F("[FLASH] пока в Tools -> Flash Size не выбран верный размер."));
|
||||||
}
|
}
|
||||||
|
|
||||||
EEPROM.begin(EEPROM_SIZE);
|
EEPROM.begin(EEPROM_SIZE);
|
||||||
|
|||||||
Reference in New Issue
Block a user