I'm currently working on a project involving an ESP32 microcontroller on a custom PCB. However, I've encountered a persistent issue where the ESP32 remains in download mode after a reset, and I can't seem to get it to boot normally.
Problem Description:
Device: ESP32-WROOM-32
Custom PCB with Battery Power Supply
After flashing my firmware successfully, the ESP32 does not boot into the application but stays in download mode, showing the following message repeatedly on the serial monitor:
Code: Select all
boot:0x2 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
waiting for download
I've identified that the root cause seems to be related to the GPIO0 pin state. According to the ESP32 documentation, GPIO0 should be high for normal boot mode and low for download mode. However, on my PCB, GPIO0 appears to remain low even after a reset, preventing the device from exiting download mode.
What I've Tried:
Checked Pull-up Resistor: I verified that GPIO0 is connected to a 10kΩ pull-up resistor to 3.3V. Despite this, the pin still reads low on boot.
Power Supply Issues: The PCB is powered by a battery, and without it, the board doesn't power on at all. The battery provides a stable 3.7V-4.2V. Maybe battery is discharged?
Disconnecting Peripherals: I tried disconnecting any external peripherals that might pull GPIO0 low, but there was no change.
Manual Reset: Pressing the reset button doesn't seem to change the GPIO0 state or the boot mode.
Additional Details:
Power Supply Configuration: The board uses a battery for power, and it seems the ESP32 won't boot without it.
Request for Help:
I'm reaching out to see if anyone has experienced a similar issue or can provide insights into why GPIO0 might be staying low, causing the ESP32 to remain in download mode. Could it be related to the power supply or a specific hardware design flaw? Any suggestions or troubleshooting steps would be greatly appreciated!
Schematics attached.
Thanks in advance for your help!