The ESP32-S3-N16R8 is a powerhouse module featuring 16MB of Quad SPI Flash and 8MB of Octal SPI PSRAM. However, the extra memory comes with a strict hardware trade-off: the Octal PSRAM interface permanently consumes specific GPIO pins that are available on lesser models. Below is the definitive pinout reference for the standard ESP32-S3-DevKitC-1 (N16R8 variant), integrating functional mappings with standard embedded wiring color codes for building reliable custom harnesses.
ESP32-S3-N16R8 Master Pinout & Function Table
This table maps the physical header pins on the standard DevKitC-1 carrier board to their internal GPIO assignments, default boot functions, and the recommended wire color based on standard hobbyist and industrial embedded harness conventions. Refer to the ESP32-S3 Datasheet for absolute maximum ratings.
| Header Pin | GPIO | Default / Primary Function | N16R8 Specific Status | Standard Harness Color |
|---|---|---|---|---|
| 3V3 | N/A | 3.3V Power Output (Max 500mA) | Active | Red (Hobby) / Brown (IEC) |
| GND | N/A | System Ground | Active | Black (Hobby) / Blue (IEC) |
| 5V | N/A | 5V USB VBUS Input/Output | Active | Red (Striped) / White-Red |
| GPIO43 | 43 | Default UART0 TX | Active | Yellow |
| GPIO44 | 44 | Default UART0 RX | Active | White |
| GPIO19 | 19 | USB1 D- (Native USB OTG) | Routed to USB-C | White (USB Std) |
| GPIO20 | 20 | USB1 D+ (Native USB OTG) | Routed to USB-C | Green (USB Std) |
| GPIO38 | 38 | SPI3 MOSI / General GPIO | Active | Orange |
| GPIO33 | 33 | Octal SPI PSRAM IO0 | CONSUMED (Do Not Use) | N/A |
| GPIO34 | 34 | Octal SPI PSRAM IO1 | CONSUMED (Do Not Use) | N/A |
| GPIO35 | 35 | Octal SPI PSRAM IO2 | CONSUMED (Do Not Use) | N/A |
| GPIO36 | 36 | Octal SPI PSRAM IO3 | CONSUMED (Do Not Use) | N/A |
| GPIO37 | 37 | Octal SPI PSRAM IO4 | CONSUMED (Do Not Use) | N/A |
Rows People Get Wrong: Strapping Pins & Internally Routed GPIOs
The most common cause of silent failures and boot loops on the N16R8 variant stems from misunderstanding which pins are actually available and how strapping pins behave during the reset sequence.
Unlike the N8R8 (which uses Quad PSRAM), the N16R8's 8MB PSRAM requires an Octal SPI interface. This permanently consumes GPIO33, 34, 35, 36, and 37 for memory data lines, plus GPIO26-32 for the SPI flash. If you attempt to assign GPIO35 to an I2C SDA line or use GPIO36 for an ADC reading in your firmware, the ESP32 will either fail to boot, crash randomly when the garbage collector runs, or corrupt the PSRAM heap. Treat these pins as physically disconnected.
Strapping Pin Hazards
Strapping pins are sampled by the internal bootloader during the rising edge of the EN (reset) signal. If your external circuit pulls these pins to the wrong state, the board will enter the wrong boot mode.
- GPIO0: Controls boot mode. Pulled LOW enters Serial Download mode. Pulled HIGH (or floating, due to internal pull-up) enters normal SPI Flash boot. Mistake: Leaving a button wired to GPIO0 without a 10kΩ pull-up resistor causes random boot failures if the button is pressed or bouncing during reset.
- GPIO3: Determines JTAG signal source. LOW = JTAG from USB1; HIGH = JTAG from GPIO pins. Mistake: Hard-pulling this HIGH disables native USB JTAG debugging, forcing you to use external JTAG hardware.
- GPIO45: Selects VDD_SPI voltage (3.3V vs 2.8V). The N16R8 module requires 3.3V. Mistake: Pulling this HIGH switches the internal SPI regulator to 2.8V, which will brownout the 16MB flash chip and cause immediate boot panics.
- GPIO46: Selects boot log output. LOW = ROM boot messages disabled; HIGH = enabled on GPIO43. Mistake: Tying this LOW makes debugging early-stage panics impossible because the ROM bootloader stays silent.
Embedded Wiring Color Standards: UART, USB, and Sensor Buses
When building custom wire harnesses for the S3, you must reconcile different color code standards. A single-region presentation is dangerous here because 'standard' depends entirely on the connector ecosystem you are mating with.
| Standard / Ecosystem | Power (+) | Ground (-) | Data / Signal 1 | Data / Signal 2 |
|---|---|---|---|---|
| Hobbyist Dupont / JST-XH | Red | Black | Yellow (TX) | White (RX) |
| IEC 60446 (Industrial Sensors) | Brown | Blue | Black (Signal) | White (Signal 2) |
| USB IF (Type-C / Micro) | Red (VBUS) | Black (GND) | Green (D+) | White (D-) |
| Seeed Grove / SparkFun Qwiic | Red (3.3V/5V) | Black (GND) | Yellow (SCL/TX) | White (SDA/RX) |
Practical Application: If you are wiring a raw industrial M12 inductive sensor (IEC standard) to the ESP32-S3's GPIO for a high-speed counter, the sensor's Brown wire goes to the board's 5V (or 3V3 if it's a 3V sensor), Blue to GND, and Black to your chosen GPIO. Do not use Red/Black/White harness wire for industrial sensor pigtails; an inspector or maintenance tech will assume it is a USB or serial line and misdiagnose faults.
Safe Interpretation When Board Markings Are Faded or Missing
Silkscreen on cheap clone DevKits frequently rubs off, or you may be reverse-engineering a custom carrier board where the ESP32-S3-N16R8 module is soldered directly without header labels. Never guess pin assignments on a 3.3V logic board; a 5V tolerance mistake will fry the S3's input pads. Use this multimeter and oscilloscope decision path to safely map the board.
- Find Ground: Set your multimeter to continuity mode. Probe the metal shield of the USB-C port. Probe the header pins until you find a beep. Mark all GND pins. (The S3 ground plane is extensive; you will find multiple GND pins).
- Find 5V VBUS: Set the meter to Diode Test mode. Place the red probe on the USB-C VBUS pin (Pin A4/B9) and the black probe on your known GND. Now, test the header pins with the red probe. A reading of ~0.3V to 0.5V indicates the 5V rail (forward voltage of the Schottky protection diode).
- Find 3V3: Power the board via USB. Set the meter to DC Voltage. Probe the remaining power pins. The 3.3V rail will read between 3.25V and 3.35V. Do not confuse this with the VDD_SPI pin, which may read slightly lower depending on load.
- Find Default UART TX (GPIO43): Connect your oscilloscope or logic analyzer to the remaining unknown digital pins. Press the EN (Reset) button. The default UART TX pin will burst a sequence of 115200 baud data (the ROM boot log) within milliseconds of reset release. Mark this pin as TX.
- Identify USB D+/D- (GPIO19/20): These will trace directly to the center pins of the USB-C connector. Verify with continuity mode while the board is unpowered.
For complete peripheral matrix routing, including which GPIOs support the LEDC PWM hardware and which are strictly input-only, consult the ESP32-S3 Technical Reference Manual, specifically Chapter 5 (GPIO & IO MUX). Always verify your specific carrier board's schematic, as third-party manufacturers occasionally route GPIO43/44 to secondary UART headers and break out GPIO1/2 for the primary debug serial port.






