Erasing or uploading anything to ESP32-S3-WROOM-1 Module using Espressif ESP-PROG seems to be a epic failure everytime. I have tried pressing and holding the boot button and that has failed to enter bootloader mode .
but i have also tried only pressing reset button on ESP-PROG, The error is serial not detected. The voltage that i can measure on on EN is 3.28V and GPIO0 is 3.20V . The input voltage through ESP-PROG is around 3.3V
i have tried everything possible and no luck to have it work. Even using different Laptops, PCs, OSes but nothing works. The Serial connection seems to be fine. I have test ESP32-S3-WROOM-1 devboard that works fine since i am able to erase_flash and write_flash on the dev board.
i have reached the end of my endless hours trying to solve it . i need help.
# esptool.py -p /dev/ttyUSB2 -b 115200 --before default_reset --after hard_reset --chip esp32s3 erase_flash esptool.py v4.4 Serial port /dev/ttyUSB2 Connecting......................................
A fatal error occurred: Failed to connect to ESP32-S3: Wrong boot mode detected (0x14)! The chip needs to be in download mode. For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
When i do screen monitor
#screen /dev/ttyUSB2 115200
i can see that the flash seems to be empty i.e has no image
invalid header: 0xa5ff005a
invalid header: 0xa5ff005a
invalid header: 0xa5ff005a
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x7 (TGOWDT_SYS_RST), boot:0x1c (SPI_FAST_FLASH_BOOT)
Saved PC:0x400048836
invalid header: 0xa5ff005a
invalid header: 0xa5ff005a
invalid header: 0xa5ff005a
The ESP32 has a few common problems, specially when you are trying to upload new sketches or install the ESP32 add-on on the Arduino IDE. This guide is dedicated to the ESP32 when programmed with Arduino IDE. Here, we provide a compilation with some of the most common problems with the ESP32 and how to fix them.
Important: make sure you have the latest Arduino IDE installed. Using a different Arduino IDE version might cause other unexpected problems and errors.
Note: Espressif found some silicon design errors in the ESP32 which might be responsible for some unexplained errors/behavior. The errors are detailed in the following document:
- https://espressif.com/sites/default/files/documentation/eco_and_workarounds_for_bugs_in_esp32_en.pdf
Of particular note are 3.1 (relating to power up and deep sleep wake-up) and 3.4 (relating to not restarting on brownout). The old v0 and v1 chips were used in modules labelled ESP32-WROOM-32. The errors are fixed in modules ESP32-WROOM-32E and any other ESP32 designations ending in E.
See https://www.espressif.com/en/products/modules for full details. So, to avoid getting issues with your ESP32, we recommend searching for the ones labeled ESP32-WROOM-32E.
1. How do I install the ESP32 add-on for the Arduino IDE?
There’s an add-on for the Arduino IDE that allows you to program the ESP32 using the Arduino IDE and its programming language. Follow one of the next Units to prepare your Arduino IDE to work with the ESP32 in your operating system:
- Windows instructions – ESP32 Board in Arduino IDE
- Mac and Linux instructions – ESP32 Board in Arduino IDE
2. I can’t see the ESP32 boards in the Arduino IDE Tools menu (Windows PC)
If you still don’t see the boards in the Arduino IDE, make sure you click on the small arrow (highlighted in the figure below) to scroll all the way down through the boards:
If at this moment you can’t find your ESP32 board name, we recommend repeating the installation process from scratch.
- Windows instructions – ESP32 Board in Arduino IDE
- Mac and Linux instructions – ESP32 Board in Arduino IDE
3. C:\Users\ User\Documents \Arduino\ hardware\ espressif\ esp32/tools /xtensa-esp32-elf /bin/ xtensa-esp32- elf-g++”: file does not exist
After installing the ESP32 add-on, if you open the Arduino IDE and it fails to compile code to your ESP32 board, we recommend re-running the Arduino IDE ESP32 add-on intallation.
Note: Windows PCs often have multiple Arduino IDE versions installed (portable and local installations). Make sure you are running the Arduino IDE where you installed the ESP32 add-on.
4. A fatal error occurred: “Failed to connect to ESP32: Timed out… Connecting…”
When you try to upload a new sketch to your ESP32 and it fails to connect to your board, it means that your ESP32 is not in flashing/uploading mode.
Having the right board name and COM por selected, follow these steps:
- Hold-down the “BOOT” button in your ESP32 board
- Press the “Upload” button in the Arduino IDE to upload a new sketch:
- After you see the “Connecting….” message in your Arduino IDE, release the finger from the “BOOT” button:
- After that, you should see the “Done uploading” message
That’s it. Your ESP32 should have the new sketch running. With those boards/with that setup, after uploading a new sketch, press the “ENABLE” button to restart the ESP32 and run the new uploaded sketch.
You’ll also have to repeat that button sequence every time you want to upload a new sketch. But if you want to solve this issue once for all without the need to press the BOOT button, follow the suggestions in the next guide:
- [SOLVED] Failed to connect to ESP32: Timed out waiting for packet header
To be honest we’re not sure why that happens with the newer boards. We don’t have any ESP32 board with that behavior. We think there might be something different with your specific board or the Arduino IDE fails to send the right command sequence to put the ESP32 automatically in flashing/uploading mode.
5. Error compiling WiFiScan sketch
If you try to upload the ESP32 WiFiScan.ino sketch provided in the ESP32 Getting Started guide:
And it fails to compile with a similar error message:
In function ‘void setup()’: ScanNetworks:52: error: ‘class WiFiClass’ has no member named ‘firmwareVersion’ String fv = WiFi.firmwareVersion();
It looks like your Arduino IDE is compiling the WiFi library for the Arduino board (instead of using the ESP32 WiFi library).
Note: you’ll probably never use any WiFi shield with your Arduino board, right? If you don’t use it, you need to remove that folder/those folders from your Arduino IDE (move it to your desktop, for example).
The WiFi library is located, in a similar path:
C:UsersruisantosDownloadsarduino-1.8.7-windowsarduino-1.8.7librariesWiFi
And/or at:
C:UsersruisantosDocumentsArduinolibrarieslibrariesWiFi
After removing the entire WiFi library folder from one location or both locations, restart your Arduino IDE and try to compile the code again.
If you plug your ESP32 board to your computer, but you can’t find the ESP32 Port available in your Arduino IDE (it’s grayed out):
It might be one of these two problems: 1. USB drivers missing or 2. USB cable without data wires.
1. If you don’t see your ESP’s COM port available, this often means you don’t have the USB drivers installed. Take a closer look at the chip next to the voltage regulator on board and check its name.
The ESP32 DEVKIT V1 DOIT board uses the CP2102 chip.
Go to Google and search for your particular chip to find the drivers and install them in your operating system.
You can download the CP2102 drivers on the Silicon Labs website.
After they are installed, restart the Arduino IDE and you should see the COM port in the Tools menu.
2. If you have the drivers installed, but you can’t see your device, double-check that you’re using a USB cable with data wires.
USB cables from powerbanks often don’t have data wires (they are charge only). So, your computer will never establish a serial communication with your ESP32. Using a a proper USB cable should solve your problem.
7. Arduino IDE Serial Monitor “doesn’t work”
If the ESP32 is only printing weird text or gibberish messages in your Arduino IDE Serial Monitor, make sure you have the right COM port selected and set the right baud rate as shown below. In most examples, we’re using 115200 baud rate.
8. Error: “Brownout detector was triggered”
When you open your Arduino IDE Serial monitor and the error message “Brownout detector was triggered” is constantly being printed over and over again. It means that there’s some sort of hardware problem.
It’s often related to one of the following issues:
- Poor quality USB cable;
- USB cable is too long;
- Board with some defect (bad solder joints);
- Bad computer USB port;
- Or not enough power provided by the computer USB port.
Solution: try a different shorter USB cable (with data wires), try a different computer USB port or use a USB hub with an external power supply.
9. I can’t make the ESP32 add-on work with Arduino IDE
If you’ve followed all the troubleshooting tips and the ESP32 add-on doesn’t work with the Arduino IDE, we recommend experimenting programming the ESP32 with Atom text editor and PlatformIO IDE. Follow this post: Atom text editor with PlatformIO IDE to program the ESP32.
Wrapping Up
We hope you’ve found this guide useful. If you encounter any other issues, please post them in comments below and we’ll try to help you solve your problem.
We have other tutorials with ESP32 that you might like:
- ESP32 with Multiple DS18B20 Temperature Sensors
- ESP32 Data Logging Temperature to MicroSD Card
- ESP32 with DC Motor and L298N Motor Driver – Control Speed and Direction
We hope you’ve found this tutorial useful. If you like ESP32 and you want to learn more, we recommend enrolling in Learn ESP32 with Arduino IDE course.
Thanks for reading.
Проблемы с прошивкой flash-памяти обычно непросто устранить. Ниже приедены несколько советов по решению распространенных проблем.
[Загрузчик не отвечает]
Если в serial-консоли появляются ошибки наподобие «Failed to connect», то возможно чип не может правильно запустить загрузчик:
• Проверьте, что в командной строке утилиты монитора (обычно это скрипт idf.py) правильно указано имя последовательного порта.
• Проверьте, что у Вас есть разрешения на доступ к последовательному порту, и что какое-то другое программное обеспечение (такое как modem-manager на Linux) не пытается взаимодействовать с нужным последовательным портом. Часто бывает, что в другом окне уже открыто забытое соединение с используемым портом, и второе подключение создать не удается.
• Проверьте, что на чипе присутствует питание 3.3V от стабилизированного источника (см. далее «Плохое питание»).
• Проверьте, что все выводы чипа подключены так, как описано в документации по выбору режима загрузки [2]. Проверьте напряжения на каждом выводе мультиметром или осциллографом, ножки с лог. 1 должны иметь напряжение, близкое к 3.3V, и ножки с лог. 0 близкое к 0V.
• Если к выводам GPIO чипа подключены другие устройства, попробуйте их отключить, и проверьте, заработает ли соединение с загрузчиком.
• Попробуйте уменьшить скорость соединения. Скорость 9600 самая маленькая допустимая скорость для соединения с загрузчиком, обычно используемая для отладки проблем скорости serial-соединения (настройте baud rate опцией -b 9600 скрипта idf.py).
[Случайные ошибки в процессе записи flash]
Если при записи происходят сбои, попробуйте уменьшить скорость подключения к последовательному порту. Также причиной случайных сбоев могут быть проблемы с питанием (см. «Плохое питание»).
[Запись произошла успешно, но приложение не запускается]
Если esptool может прошить Ваш модуль командой write_flash, но программа не запускается, то проверьте следующее:
Неправильно выбранный режим SPI flash. Некоторые устройства поддерживают только режим прошивки dio. Запись во flash в режиме qio происходит успешно, но чип не может обратно прочитать flash, чтобы запустить программу — так что загрузка приложения не происходит. Попробуйте передать опцию -fm dio в команду write_flash.
См. документацию [3] для получения полного описания режимов flash, и как определить, какие из них поддерживает Ваше устройство.
Плохое питание. Чип ESP может потреблять от 3.3V достаточно большой ток (до 70 мА непрерывно, 200 .. 300 мА в пике, или даже больше). На шине питания должен присутствовать конденсатор достаточной емкости, чтобы сгладить спады по питанию в пиках потребления тока.
Если Вы используете предварительно собранную отладочную плату или модуль, то установленный на плате регулятор напряжения может предоставлять недостаточную мощность, чтобы обеспечить стабильную работу системы. На модулях от Espressif и других известных поставщиков обычно такой проблемы нет. Однако в некоторых случаях модули, наподобие ESP-WROOM02 и ESP-WROOM32, могут потребовать подключения снаружи дополнительного блокирующего конденсатора.
Выход 3.3V адаптеров USB-UART (например FTDI FT232R), или плат Arduino часто не предоставляет достаточной мощности по питанию.
[Отсутствует загрузчик]
ESP-IDF использует загрузчик второй стадии, работающий после заводского аппаратного, который находится в постоянной памяти чипа (boot ROM). На ESP32 образ загрузчика должен быть прошит со смещением 0x1000 относительно начала памяти flash. Среда разработки ESP-IDF делает это автоматически после выполнения соответствующих команд компиляции и прошивки (idf.py build flash). См. документацию ESP-IDF для получения информации, какие двоичные файлы нужно прошить, и по какому смещению (также см. [4]).
[Проблемы с сигналами SPI]
В сравнении с ROM bootloader, утилита esptool и работающий код загрузчика второй стадии использует намного больше внешних выводов, чтобы обмениваться данными с SPI flash.
Если используется режим «Quad I/O» (-fm qio, что esptool использует по умолчанию), то для доступа к SPI flash используются выводы GPIO7, GPIO8, GPIO9 и GPIO10, и они не должны использоваться для других целей. Если установлен режим «Dual I/O» (-fm dio), то используются GPIO7 и GPIO8, и они не должны использоваться для других целей.
Попробуйте отключить все постороннее от этих выводов. Попробуйте поменять режим «Dual I/O», если использовался «Quad I/O», или наоборот. Проверьте целостность сигналов подключений к памяти SPI flash, отсутствие замыканий между ними и на другие цепи. Имейте в виду, что если GPIO9 и GPIO10 также подключены к входным выводам чипа SPI flash, их все еще нельзя использовать как порты ввода/вывода общего назначения.
В дополнение к этим выводам, ножки GPIO6 и GPIO11 также используются для доступа к SPI flash (во всех режимах). Если эти выводы подключены неправильно, то прошивка обычно не работает.
[Сбой на ранней стадии загрузки]
Используйте программу последовательного терминала, чтобы просмотреть сообщения лога загрузчика (ESP32 использует скорость 115200 bps). Это позволит увидеть сообщения об ошибке и понять причину сбоя загрузки или запуска программы.
Существует множество программ терминала, которые можно использовать для отладки и взаимодействия с приложением через последовательный порт UART. Модуль pyserial (который требуется для утилиты esptool) включает в себя одну из таких программ терминала, запускаемых в командной строке — miniterm.py. Для дополнительной информации см. документацию pyserial [5], или запустите подсказку командой miniterm -h.
ROM serial bootloader в чипах Espressif использует соединение UART с уровнями 3.3V. На большинстве отладочных плат разработчика такое соединение организовано через схему преобразователя USB-UART.
Однако если Вы используете чип ESP32 на своей плате, и сами подключили отдельный адаптер USB/Serial для соединения с хостом отладки, то необходимо выполнить следующие соединения:
Ножка чипа ESP | Сигнал адаптера USB-UART |
TX (передача) | RX (прием) |
RX (прием) | TX (передача) |
GND | GND |
Обратите внимание, что TX (передача) чипа ESP соединяется с RX (прием) адаптера последовательного порта, и наоборот. Внимание: не подключайте чип последовательным адаптерами с уровнями 5V TTL, особенно к «стандартным» адаптером RS-232! Используйте только уровни сигналов 3.3V!
[Настройки последовательного порта]
При соединении с ESP32 ROM serial bootloader, рекомендуются следующие настройки последовательного порта:
Baud rate | 115200 |
Data bits | 8 |
Stop bits | GND |
Parity | None |
Flow control | None |
[Трассировка взаимодействий esptool]
Запуск esptool.py —trace будет выводить дамп всех последовательных интерактивных взаимодействий в стандартный вывод (данных будет выводиться довольно много). Это полезно для отладки проблем с последовательным соединением, или когда предоставляете информацию для техподдержки в виде bug-репорта.
Для дополнительной информации см. секцию «Tracing Esptool Serial Communications» документации по последовательному протоколу [7].
[Часто встречающиеся ошибки]
Ниже приведен не исчерпывающий список самых частых ошибок esptool с объяснением возможных причин и способов устранения. Перед тем, как предпринять какие-либо действия по исправлению, выполните все ранее перечисленные указания.
No serial data received. Утилита esptool не принимает никакие байты данных, или не может успешно принять пакет SLIP [7]. Эта ошибка обычно означает какую-то аппаратную проблему (перепутаны ножки RX/TX, или не подключены). Проверьте уровни сигналов и их наличие осциллографом, а также нет ли проблем со сбросом и выбором режима загрузки после сброса [2].
Wrong boot mode detected (0xXX)! The chip needs to be in download mode. В этом случае обмен с чипом работает (виден лог ROM boot), но чип автоматически не сбрасывается в режим загрузки.
Для решения проблемы проверьте схему автосброса (если на Вашей плате она есть), или попробуйте вручную выполнить сброс в режим загрузки. Как это делать, см. секцию «Manual Bootloader» документации [2].
Download mode successfully detected, but getting no sync reply: The serial TX path seems to be down. Чип успешно сбрасывается в режим загрузки и посылает данные компьютеру хоста, но не получает ничего в ответ от утилиты esptool. Это означает наличие проблемы с сигналом передачи от хоста к устройству ESP (RX ESP32 и TX адаптера USB-UART). Еще раз проверьте вашу плату и сигналы последовательного порта.
Invalid head of packet (0xXX): Possible serial noise or corruption. Причины этой ошибки могут быть следующие:
• Некачественный кабель USB.
• Иногда на плате макетирования могут замыкать ножки SPI flash, создавая подобную проблему. Попробуйте извлечь плату разработки из платы макетирования.
• На чипе во время прошивки может сработать аппаратный детектор пониженного напряжения (brown out). Часто это бывает при подаче питания от 3.3V регулятора чипов FTDI, или наличие других проблем питания (см. выше секцию «Плохое питание»).
Что можно сделать:
• Попробуйте выполнить синхронизацию и обмен на пониженной скорости, например esptool.py —baud 9600 …
• Попробуйте вывести дамп трассировки запуском esptool.py —trace …, и посмотрите, принимается ли что-нибудь обратно.
• Попробуйте пропустить стадию автодетекта чипа путем явного указания используемого кристалла. Например, запустите esptool.py —chip ESP32 …
Если ничего не помогает, то откройте тикет в службе техподдержки (open a new issue на GitHub).
[Ссылки]
1. ESP32 Troubleshooting site:docs.espressif.com.
2. Boot Mode Selection site:docs.espressif.com.
3. SPI Flash Modes site:docs.espressif.com.
4. ESP32: процесс запуска приложения.
5. serial.tools.miniterm site:pyserial.readthedocs.io.
6. Serial Connection site:docs.espressif.com.
7. Serial Protocol site:docs.espressif.com.
8. ESP32: как реализовать автозагрузку прошивки.