ESP32-D0WD-V3 boot failure
Posted: Wed Mar 11, 2026 5:10 am
I am moving from the Arduino IDE to Eclipse with ESP-IDF due to limitations and am having some boot issues. The device boots fine with Arudino code but not sample code from Eclipse.
I Installed Eclipse and ESP-IDF, then opened a new workspace and project. I was prompted to import ESP-IDF which I confirmed and the sample code listed at the bottom of this post was loaded. After compiling I uploaded it with a script using esptool which also verifies, and my script gave me the output in quotations below. I tried both 0x0 and 0x1000 but I am not using encryption so I did not expect the second option to work. I also tried completely wiping the flash with esptool.py but this did not help. The device ends up in continually rebootint with an invalid header error.
rst:0x10 (RTCWDT_RTC_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
invalid header: 0x020150aa
Any suggestions on where I should start looking to figure this out would be appreciated. I am thinking possibly the bootloader.bin is not merging when the compiled bin file is created, but I am not a programmer and have limited experience so I am probably wrong. The other, more likely option is that I am using the esptool command incorrectly.
I Installed Eclipse and ESP-IDF, then opened a new workspace and project. I was prompted to import ESP-IDF which I confirmed and the sample code listed at the bottom of this post was loaded. After compiling I uploaded it with a script using esptool which also verifies, and my script gave me the output in quotations below. I tried both 0x0 and 0x1000 but I am not using encryption so I did not expect the second option to work. I also tried completely wiping the flash with esptool.py but this did not help. The device ends up in continually rebootint with an invalid header error.
rst:0x10 (RTCWDT_RTC_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
invalid header: 0x020150aa
Any suggestions on where I should start looking to figure this out would be appreciated. I am thinking possibly the bootloader.bin is not merging when the compiled bin file is created, but I am not a programmer and have limited experience so I am probably wrong. The other, more likely option is that I am using the esptool command incorrectly.
esptool v5.2.0
esptool.py v4.7.0
MCU:
Chip is ESP32-D0WD-V3 (revision v3.0)
Crystal is 40MHz
MAC: c4:dd:57:eb:3b:dc
Detected flash size: 4MB
----------------------
Press enter to program
----------------------
Flashing partition-table.bin to /dev/ttyUSB0 at 921600 to memory location 0x0
Using command:
esptool --after hard-reset
--chip auto
--port /dev/ttyUSB0
--baud 921600
write-flash 0x0 "partition-table.bin"
esptool v5.2.0
Connected to ESP32 on /dev/ttyUSB0:
Chip type: ESP32-D0WD-V3 (revision v3.0)
Features: Wi-Fi, BT, Dual Core + LP Core, 240MHz, Vref calibration in eFuse, Coding Scheme None
Crystal frequency: 40MHz
MAC: c4:dd:57:eb:3b:dc
Stub flasher running.
Changing baud rate to 921600...
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00000fff...
Wrote 3072 bytes (103 compressed) at 0x00000000 in 0.0 seconds (612.3 kbit/s).
Hash of data verified.
Hard resetting via RTS pin...
---------
Verifying
---------
esptool v5.2.0
Connected to ESP32 on /dev/ttyUSB0:
Chip type: ESP32-D0WD-V3 (revision v3.0)
Features: Wi-Fi, BT, Dual Core + LP Core, 240MHz, Vref calibration in eFuse, Coding Scheme None
Crystal frequency: 40MHz
MAC: c4:dd:57:eb:3b:dc
Stub flasher running.
Changing baud rate to 921600...
Changed.
Configuring flash size...
Verifying 0xc00 (3072) bytes at 0x00000000 in flash against 'partition-table.bin'...
Verification successful (digest matched).
Hard resetting via RTS pin...
Finished
Code: Select all
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
void app_main(void)
{
while (true) {
printf("Hello from app_main!\n");
sleep(1);
}
}