Pin Reference
The ESP32-S3 provides a generous set of GPIOs by microcontroller standards, but the 16-bit RGB parallel display interface consumes nineteen of them in one stroke. Understanding exactly which pins are committed to which peripheral — and which remain available for your application — is essential for effective hardware design around this board. The CH422G IO expander partially compensates for this GPIO pressure by offloading several control signals to the I2C bus, but the allocation still requires careful planning.
RGB LCD Interface (16-bit RGB565)
Section titled “RGB LCD Interface (16-bit RGB565)”The display uses a 16-bit RGB565 parallel interface, meaning five bits for red, six for green, and five for blue — plus synchronization and clock signals. The ESP32-S3’s LCD peripheral drives these pins directly at the pixel clock rate (21 MHz). Because there are not enough GPIOs to support full 24-bit RGB888 color, the lower bits of each color channel (R0-R2, G0-G1, B0-B2) are tied to GND on the PCB, fixing them at zero. The visible result is 65K colors, which is more than sufficient for LVGL interfaces and typical embedded UI work.
| GPIO | Function | Description |
|---|---|---|
| IO0 | R4 | Red channel bit 4 |
| IO1 | B6 | Blue channel bit 6 |
| IO2 | B5 | Blue channel bit 5 |
| IO3 | VSYNC | Vertical sync |
| IO4 | R3 | Red channel bit 3 (LSB) |
| IO5 | DE | Data enable |
| IO6 | G3 | Green channel bit 3 (LSB) |
| IO7 | PCLK | Pixel clock (21 MHz) |
| IO14 | B3 | Blue channel bit 3 (LSB) |
| IO21 | G7 | Green channel bit 7 (MSB) |
| IO38 | B4 | Blue channel bit 4 |
| IO39 | G2 | Green channel bit 2 |
| IO40 | R7 | Red channel bit 7 (MSB) |
| IO41 | R6 | Red channel bit 6 |
| IO42 | R5 | Red channel bit 5 |
| IO45 | G4 | Green channel bit 4 |
| IO46 | HSYNC | Horizontal sync |
| IO47 | B7 | Blue channel bit 7 (MSB) |
| IO48 | G5 | Green channel bit 5 |
I2C Bus (Shared)
Section titled “I2C Bus (Shared)”The board routes a single I2C bus to three on-board devices and an external expansion header. All devices share the same SDA/SCL pair, and proper I2C address management is critical to avoid bus collisions.
| GPIO | Function | Devices |
|---|---|---|
| IO8 | SDA | GT911 touch, CH422G IO expander, PCF85063A RTC |
| IO9 | SCL | GT911 touch, CH422G IO expander, PCF85063A RTC |
I2C Address Map
Section titled “I2C Address Map”| Address | Device | Function |
|---|---|---|
| 0x20-0x27 | CH422G | IO expander (8-address range) |
| 0x51 | PCF85063A | Real-time clock (Type B only) |
| 0x5D | GT911 | Capacitive touch controller |
Communication Interfaces
Section titled “Communication Interfaces”The board provides two industrial serial buses and a shared UART path for programming. The CAN and RS-485 interfaces use dedicated transceivers with screw terminal connections on the board edge.
| Interface | GPIO | Function |
|---|---|---|
| RS-485 TX | IO43 | UART TX to SP3485 transceiver |
| RS-485 RX | IO44 | UART RX from SP3485 transceiver |
| CAN TX | IO15 | TWAI TX to TJA1051T transceiver |
| CAN RX | IO16 | TWAI RX from TJA1051T transceiver |
Note that IO43 and IO44 are shared between the RS-485 transceiver and the CH343P USB-UART bridge. The FSUSB42 multiplexer (controlled by CH422G EXIO5) determines which path is active. During firmware upload, the USB-UART path is selected; during normal operation, the firmware can switch to the RS-485 path.
SPI Bus (SD Card)
Section titled “SPI Bus (SD Card)”The microSD card slot operates in SPI mode. Three of the four SPI signals use dedicated GPIOs, while the chip select routes through the CH422G expander to conserve a GPIO pin.
| GPIO | Function |
|---|---|
| IO11 | MOSI (Master Out, Slave In) |
| IO12 | SCK (Serial Clock) |
| IO13 | MISO (Master In, Slave Out) |
| CH422G EXIO4 | CS (Chip Select, active low) |
The dual USB Type-C topology uses an analog multiplexer to share the ESP32-S3’s USB data pins between two physical ports.
| GPIO | Function | Notes |
|---|---|---|
| IO43 | ESP_TXD | USB-UART via CH343P (Type-C2, programming port) |
| IO44 | ESP_RXD | USB-UART via CH343P (Type-C2, programming port) |
| IO19 | USB D- | Native USB Host/OTG (Type-C1, side port) |
| IO20 | USB D+ | Native USB Host/OTG (Type-C1, side port) |
The FSUSB42 multiplexer, controlled by CH422G EXIO5, switches between the UART bridge and native USB paths. Only one USB mode can be active at any given time.
Touch Panel
Section titled “Touch Panel”The GT911 capacitive touch controller connects through the shared I2C bus with an interrupt line and an expander-controlled reset.
| GPIO | Function |
|---|---|
| IO4 | TP_IRQ (touch interrupt, active low) |
| IO8 | TP_SDA (shared I2C data) |
| IO9 | TP_SCL (shared I2C clock) |
| CH422G EXIO1 | TP_RST (touch controller reset) |
The interrupt line (IO4) signals the ESP32-S3 when a touch event occurs, allowing event-driven rather than polled touch handling. The reset line through CH422G EXIO1 enables software-controlled touch controller initialization and recovery from fault states.
CH422G IO Expander Pin Map
Section titled “CH422G IO Expander Pin Map”The CH422G sits at the nexus of several board subsystems. Its outputs control critical functions that would otherwise consume scarce GPIOs. Understanding this mapping is essential for proper board initialization — the CH422G must be configured before the display, SD card, or USB multiplexer can function.
| EXIO Pin | Connected To | Function |
|---|---|---|
| EXIO1 (OC0) | CTP_RST | Touch controller reset (active low) |
| EXIO2 (OC1) | LCD_BL | LCD backlight enable (high = on) |
| EXIO3 (OC2) | LCD_RST | LCD panel reset (active low) |
| EXIO4 (OC3) | SDCS | SD card chip select (active low) |
| EXIO5 (IO0) | USB_SEL | USB switch control (FSUSB42 mux select) |
| EXIO0 / EXIO5 | DI0, DI1 | Isolated digital inputs (Type B) |
| OD0 / OD1 | DO0, DO1 | Isolated digital outputs (Type B) |
The open-collector outputs (OC0-OC3) can sink current but require external pullups, which are provided on the PCB for each controlled signal. The bidirectional IO pins and open-drain outputs handle the isolated I/O channels on the Type B variant.
Strapping Pins
Section titled “Strapping Pins”The ESP32-S3 samples certain GPIO states during reset to determine boot mode and voltage configuration. These pins must be in the correct state during power-on or reset, and care should be taken if connecting external circuits to them.
| GPIO | Default | Pull | Function |
|---|---|---|---|
| IO0 | HIGH | 10K pullup to 3.3V | Boot mode: HIGH = normal boot, LOW = download mode |
| IO45 | LOW | Internal pulldown | VDD_SPI voltage: LOW = 3.3V (default) |
| IO46 | LOW | Internal pulldown | Boot mode: LOW = SPI boot (default) |
The BOOT button on the board pulls IO0 low when pressed. To enter download mode for firmware flashing, hold BOOT while pressing RESET (or during power-on), then release BOOT after the chip has sampled the pin state.
Available GPIOs for User Expansion
Section titled “Available GPIOs for User Expansion”After accounting for all on-board peripherals, the following GPIOs remain available for user applications.
These GPIOs have no on-board connections and are fully available for user applications via the expansion headers:
| GPIO | ADC Channel | Notes |
|---|---|---|
| IO17 | ADC2_CH6 | General purpose |
| IO18 | ADC2_CH7 | General purpose |
| IO35 | — | General purpose |
| IO36 | — | General purpose |
| IO37 | — | General purpose |
These GPIOs are assigned to on-board peripherals but can be repurposed if their peripheral is not needed:
| GPIO | Default Assignment | Available If |
|---|---|---|
| IO15 | CAN TX (TWAI) | CAN bus interface not used |
| IO16 | CAN RX (TWAI) | CAN bus interface not used |
| IO19 | USB D- (native) | Native USB Host/OTG not used |
| IO20 | USB D+ (native) | Native USB Host/OTG not used |
Physical Connectors
Section titled “Physical Connectors”The board exposes its interfaces through a variety of connectors suited to their intended use — FPC for display and touch ribbon cables, screw terminals for field-wired industrial buses, and pin headers for prototyping.
| Designator | Type | Function |
|---|---|---|
| PORT1 | 40-pin FPC (0.5mm pitch) | Display panel (RGB565 + backlight) |
| — | 40-pin FPC (0.5mm pitch) | Touch panel (GT911 I2C + interrupt) |
| Type-C1 | USB Type-C (side) | Native USB Host/OTG |
| Type-C2 | USB Type-C (top) | USB-UART programming (CH343P) |
| J1 | 3-pin screw terminal | RS-485 (A, B, GND) |
| J7 | 3-pin screw terminal | CAN bus (CANH, CANL, GND) |
| J5 | MX1.25 / PH2.0 2-pin | Li-Po battery (3.7V) |
| H1 | 8-pin header | Touch panel breakout |
| H7 | Pin header | Expansion (I2C, ADC, GPIO) |
| H8 | Pin header | Expansion (power, GPIO) |
| — | TF card slot | microSD (push-push, SPI mode) |
| — | CR927 holder | RTC backup battery (Type B) |