Перейти к содержанию

Что значит «invalid header: 0xffffffff» в логе загрузки ESP32?

Обновлено Редакция GAW

Сразу после сброса ESP32 печатает на 115200 бит/с сообщение встроенного загрузчика (ROM). По нему видно, почему чип сбросился, как стояли выводы выбора режима и смог ли он прочитать загрузчик второй ступени из флеш-памяти.

Как читать первые строки

ПолеПримерЧто значит
rst:0xNNrst:0x1 (POWERON_RESET)причина сброса
boot:0xNN(SPI_FAST_FLASH_BOOT) в скобкахобычная загрузка из флеш-памяти
boot:0xNNboot:0x3 (DOWNLOAD_BOOT…)режим прошивки, GPIO0 был в нуле
mode:mode:DIO, clock div:1режим флеш-памяти из заголовка загрузчика
invalid headerinvalid header: 0xffffffffпо 0x1000 нет загрузчика

Значение boot — это биты регистра уровней выводов выбора режима: бит равен 1, если вывод был в единице при сбросе. Значение 0xffffffff в invalid header — то, что прочитано по адресу 0x1000; у стёртой флеш-памяти все биты — единицы.

Причины invalid header (esptool, Boot Mode Selection)

  1. Нет загрузчика по 0x1000 — флеш-память стёрта или загрузчик записан не туда; адреса файлов разобраны в статье «Прошивка ESP32».
  2. Флеш не читается — плохое соединение или питание флеш-памяти.
  3. GPIO12 (MTDI) в единице при сбросе — внутренний стабилизатор флеш-памяти включается на 1,8 В, и флеш на 3,3 В не работает; подробнее — на странице «Выводы выбора режима ESP32».
  4. GPIO2 — неверный уровень выбирает режим HSPI_FLASH_BOOT с другими выводами флеш-памяти.
  5. Шифрование флеш-памяти включено, а загрузчик записан открытым, или наоборот.

Сам процесс записи и параметры команд описаны в статье «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.

Источники

  1. 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 берутся из заголовка загрузчика
  2. Espressif. ESP32 Series Datasheet v5.3 — табл. 3-1: пять выводов выбора режима и их подтяжки по умолчанию — GPIO0 вверх (1), GPIO2 вниз (0), MTDI вниз (0), MTDO вверх (1), GPIO5 вверх (1); уровни защёлкиваются при сбросе

Нашли ошибку?