Что значит «invalid header: 0xffffffff» в логе загрузки ESP32?
Обновлено Редакция GAW
Сразу после сброса ESP32 печатает на 115200 бит/с сообщение встроенного загрузчика (ROM). По нему видно, почему чип сбросился, как стояли выводы выбора режима и смог ли он прочитать загрузчик второй ступени из флеш-памяти.
Как читать первые строки
| Поле | Пример | Что значит |
|---|---|---|
rst:0xNN | rst:0x1 (POWERON_RESET) | причина сброса |
boot:0xNN | (SPI_FAST_FLASH_BOOT) в скобках | обычная загрузка из флеш-памяти |
boot:0xNN | boot:0x3 (DOWNLOAD_BOOT…) | режим прошивки, GPIO0 был в нуле |
mode: | mode:DIO, clock div:1 | режим флеш-памяти из заголовка загрузчика |
invalid header | invalid header: 0xffffffff | по 0x1000 нет загрузчика |
Значение boot — это биты регистра уровней выводов выбора режима: бит равен 1, если вывод был в единице при сбросе. Значение 0xffffffff в invalid header — то, что прочитано по адресу 0x1000; у стёртой флеш-памяти все биты — единицы.
Причины invalid header (esptool, Boot Mode Selection)
- Нет загрузчика по 0x1000 — флеш-память стёрта или загрузчик записан не туда; адреса файлов разобраны в статье «Прошивка ESP32».
- Флеш не читается — плохое соединение или питание флеш-памяти.
- GPIO12 (MTDI) в единице при сбросе — внутренний стабилизатор флеш-памяти включается на 1,8 В, и флеш на 3,3 В не работает; подробнее — на странице «Выводы выбора режима ESP32».
- GPIO2 — неверный уровень выбирает режим HSPI_FLASH_BOOT с другими выводами флеш-памяти.
- Шифрование флеш-памяти включено, а загрузчик записан открытым, или наоборот.
Сам процесс записи и параметры команд описаны в статье «esptool», а раскладка флеш-памяти после загрузчика — в словаре на странице «Таблица разделов».
Похожие вопросы
Что значит boot:0x3 и «waiting for download»?
Что при сбросе GPIO0 был в нуле, и ROM ждёт прошивку по UART — режим DOWNLOAD_BOOT. Это нормально во время прошивки; если так происходит при обычном включении, GPIO0 прижат к земле — кнопкой BOOT, схемой автосброса или подключённой периферией.
Прошивка записалась без ошибок, а лог всё равно invalid header — почему?
Проверьте адрес: у ESP32 загрузчик второй ступени пишут с 0x1000, а при записи объединённого файла — с 0x0. Если адрес верный, пройдите по остальным причинам из документации esptool: соединение и питание флеш-памяти, уровень GPIO12 и GPIO2 при сбросе, совпадение настроек шифрования флеш-памяти и загрузчика.
Как увидеть этот лог, если монитор показывает мусор?
ROM печатает на скорости 115200 бит/с, а программа может работать на другой. Откройте монитор на 115200 и нажмите EN: первые строки — сообщение ROM с полями rst и boot.
Источники
- Espressif. esptool Documentation (latest), ESP32: Boot Mode Selection — вторая строка ROM на 115200 бит/с — rst:0xNN (причина сброса) и boot:0xNN (уровни выводов из регистра GPIO_STRAP); DOWNLOAD_BOOT — режим прошивки, SPI_FAST_FLASH_BOOT — обычная загрузка, прочие режимы не поддерживаются; Invalid header <значение по 0x1000>: загрузчика нет по 0x1000 (не тот адрес, флеш стёрта), плохое соединение или питание флеш, несоответствие шифрования, режим HSPI_FLASH_BOOT из-за GPIO2, VDDSDIO 1,8 В из-за MTDI/GPIO12 при флеш на 3,3 В; строка mode: и clock div берутся из заголовка загрузчика
- Espressif. ESP32 Series Datasheet v5.3 — табл. 3-1: пять выводов выбора режима и их подтяжки по умолчанию — GPIO0 вверх (1), GPIO2 вниз (0), MTDI вниз (0), MTDO вверх (1), GPIO5 вверх (1); уровни защёлкиваются при сбросе
Нашли ошибку?
Смотрите также
- Прошивка ESP32Загрузчик ПЗУ, GPIO0 и автосброс, write-flash и адреса, ошибки esptool и питание
- Strapping-выводы ESP32Какие GPIO читаются при сбросе: загрузка, напряжение флеш-памяти, JTAG — для ESP32, S2, S3, C2, C3, C5, C6, H2, P4
- esptoolПрошивка ESP32 и ESP8266: команды, адреса загрузчика, режим загрузки, ошибки
- Таблица разделов ESP32Карта флеш-памяти ESP32: где приложение, NVS, OTA и данные
- Загрузчик (bootloader)Прошивка МК без программатора через UART или USB