ESP32-D0WD-V3 boot failure

ant000
Posts: 10
Joined: Wed Mar 11, 2026 4:31 am

ESP32-D0WD-V3 boot failure

Postby ant000 » 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.
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);
    }
}

ant000
Posts: 10
Joined: Wed Mar 11, 2026 4:31 am

Re: ESP32-D0WD-V3 boot failure

Postby ant000 » Wed Mar 11, 2026 11:24 am

So after some more research I was right on both counts. I did not understand both how the firmware is flashed and how to use the esptool command. I need to flash the bootload.bin, partition-table.bin and my-app.bin. I saw an example where 0x0, 0x8000 and 0x10000 as the memory locations. I am having trouble finding the flash memory location table for the range of ES32 modules as I have been doing my testing on an old ESP32-WROOM-32D prototyping board but will be using a S3 once I get that board assembled. If anyone know where this information is, it would be helpful,

I will give those values a try tomorrow as it is getting late.

ant000
Posts: 10
Joined: Wed Mar 11, 2026 4:31 am

Re: ESP32-D0WD-V3 boot failure

Postby ant000 » Thu Mar 12, 2026 12:46 am

So no luck. I have looked at the datasheet for both the 32D and the S3 as well as the S3 technical reference manual and cannot find anything about the memory locations. I also checked the esptool online guide and the local man pages.

After bouncing around the website trying to find these memory locations I stumbled across this page for the 32D about the partition table.
https://docs.espressif.com/projects/esp ... ables.html

The following command worked for me run from the workspace folder where FlashTest is the project name:

Code: Select all

esptool --after hard-reset --chip auto --port /dev/ttyUSB0 --baud 921600  write-flash 0x1000 "./FlashTest/build/bootloader/bootloader.bin" 0x8000 "./FlashTest/build/partition_table/partition-table.bin" 0x10000 "./FlashTest/build/app-template.bin"
The S3 page looks pretty much identical so I expect this will work across most devices. Note that I do not fully understand the webpage I referenced so these values may change depending on your device and project. They just worked for me.

So in short:
Boot bin file - 0x1000
Parition bin file - 0x8000
App bin file - 0x10000

MicroController
Posts: 2661
Joined: Mon Oct 17, 2022 7:38 pm
Location: Europe, Germany

Re: ESP32-D0WD-V3 boot failure

Postby MicroController » Thu Mar 12, 2026 10:58 am

The bootloader has to reside at 0x1000, IIRC.
The partition table's location defaults to 0x8000, but is configurable in case your (custom) bootloader would grow too big.
The partition table's contents then define where the other parts of the application reside in flash.
And IDF build should automatically generate a couple of "flash_..._args" files in the build directory which contain the corresponding esptool.py arguments to flash all or parts of an application according to the project's configuration, but "idf.py flash" should take care of all that for you.

ant000
Posts: 10
Joined: Wed Mar 11, 2026 4:31 am

Re: ESP32-D0WD-V3 boot failure

Postby ant000 » Thu Mar 26, 2026 8:32 am

While this works for the old ESP32:

Boot bin file - 0x1000
Partition bin file - 0x8000
App bin file - 0x10000

The S3 boot file needs to be:

Boot bin file - 0x0

These are not using encryption

Who is online

Users browsing this forum: No registered users and 2 guests