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.
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:

Top comments (0)