DEV Community

Cover image for ESP32-C3 Pinout: Why Your Board Won't Enter Download Mode
Dibyaprakash Pradhan
Dibyaprakash Pradhan

Posted on Edited on Originally published at pcbeditor.com

ESP32-C3 Pinout: Why Your Board Won't Enter Download Mode

The ESP32-C3 is Espressif's small single-core RISC-V chip with Wi-Fi and Bluetooth LE, and it sits on a long list of boards, from Espressif's own ESP32-C3-MINI-1 module to the XIAO ESP32C3 and the Super Mini.

I went through the ESP32-C3 Series datasheet (v2.4), the ESP32-C3-MINI-1 datasheet (v2.2) and Espressif's hardware design guidelines, and drew the MINI-1 pin map on Espressif's own KiCad footprint. The detail that trips up new boards: the boot mode needs two pins, not one.

ESP32-C3-MINI-1 footprint, top view, every pad labelled with its pin number, name and main function, coloured by role

The short version

The ESP32-C3 has 22 GPIOs, GPIO0 to GPIO21. GPIO11 to GPIO17 belong to the flash, so the ESP32-C3-MINI-1 brings out 15 of them on 53 pads.

  • Boot button on GPIO9 (pad 23). GPIO9 low at reset enters download mode, but only while GPIO8 (pad 22) is high. GPIO8 floats, so give it a pull-up.
  • USB: GPIO18 is D− and GPIO19 is D+.
  • UART0: GPIO21 (TX) and GPIO20 (RX).
  • ADC1: GPIO0 to GPIO4.
  • I²C and SPI: any free GPIO.
  • Power: feed 3V3 with at least 0.5 A.

The GPIOs with a job

The MINI-1 is 13.2 × 16.6 × 2.4 mm with pads on a 0.8 mm pitch. Many of its pads are not connected: the module only brings out the GPIOs the chip has free.

GPIO MINI-1 pad Use with care because
GPIO2 5 Strapping pin. Espressif recommends a pull-up
GPIO4 to GPIO7 18 to 21 JTAG (MTMS, MTDI, MTCK, MTDO); free if you debug over USB
GPIO8 22 Strapping pin: must be high to enter download mode, and it floats at reset
GPIO9 23 Strapping pin: the BOOT button. Weak pull-up
GPIO11 to GPIO17 None The flash supply and flash interface. Not on the MINI-1
GPIO18, GPIO19 26, 27 USB D− and D+. GPIO18 is driven high for about 50 µs at power-up
GPIO20, GPIO21 30, 31 UART0: flashing and the boot log

GPIO0, GPIO1, GPIO3 and GPIO10 are free; GPIO0 and GPIO1 also take the optional 32.768 kHz crystal. UART1, I²C, I²S, TWAI (CAN) and the LED PWM outputs have no fixed pins: the GPIO matrix routes them to any free GPIO.

Why your board won't enter download mode

Three pins are read when EN goes high, and Espressif asks for them to hold their level for at least 3 ms:

Pin Default at reset What it does
GPIO9 (pad 23) Weak pull-up High: boot from flash. Low with GPIO8 high: download mode over UART0 or USB
GPIO8 (pad 22) Floating Must be high for download mode
GPIO2 (pad 5) Floating Does not select the boot mode, but Espressif recommends a pull-up because of glitches

A board with only a BOOT button on GPIO9 may enter download mode on one unit and not on the next, because GPIO8 floats. Anything that pulls GPIO8 low at reset blocks download mode every time. The fix:

  • give GPIO8 a pull-up to 3V3 (10 kΩ is a common value);
  • keep large capacitors off GPIO9, because Espressif warns that one there may start the chip in download mode.

The Arduino core's generic ESP32-C3 board puts SDA on GPIO8 and SCL on GPIO9, so an I²C bus sits on both boot pins. A sensor that holds SCL low while the chip starts can send it into download mode. On your own board, put I²C on other free GPIOs.

Flashing over USB without buttons stops working if the firmware does any of these:

  • turns the USB PHY off;
  • uses the port as a USB host or device;
  • gives GPIO18 and GPIO19 to another peripheral.

Then you need the BOOT button, which is why Espressif recommends keeping control of the strapping pins.

ADC pins

ADC1 reads GPIO0 to GPIO4 and is factory-calibrated. ADC2 has one channel, on GPIO5. It is not calibrated and does not work on some chip revisions.

Calibrated ranges from the hardware design guidelines:

Attenuation Range Total error
0 0 to 750 mV ±10 mV
1 0 to 1,050 mV ±10 mV
2 0 to 1,300 mV ±10 mV
3 0 to 2,500 mV ±35 mV

XIAO ESP32C3 and Super Mini

From the Arduino core's variant files:

  • XIAO ESP32C3: D0 to D10 are GPIO2, 3, 4, 5, 6, 7, 21, 20, 8, 9 and 10, with SDA on GPIO6 and SCL on GPIO7. That puts D8 and D9 on the two boot pins.
  • Super Mini: plain GPIO numbers, with the LED on GPIO8, one of the boot pins.

What your board needs

  • Power: 3.3 V on pad 3, at least 0.5 A, with 10 µF and 0.1 µF at the module.
  • EN: 10 kΩ to 3V3 and 1 µF to ground, plus a reset button.
  • Boot:
    • a button from GPIO9 to ground;
    • pull-ups on GPIO8 and GPIO2.
  • Flashing: either of these:
    • USB-C to GPIO18 and GPIO19, with room for 22 to 33 Ω series resistors;
    • a USB-to-UART bridge to TXD0 and RXD0, with 499 Ω in series with U0TXD.
  • Antenna:
    • put it at the board edge with no copper under it;
    • leave at least 15 mm of clearance inside the enclosure.

The full guide has all 53 MINI-1 pins, the module variants, the USB notes and how PCBEditor wires the boot pins:

ESP32-C3 pinout: every GPIO, every ESP32-C3-MINI-1 pin, and the two pins that decide whether it boots

Top comments (0)