The board features two USB Type-C ports, each serving a distinct purpose. This dual-port architecture separates the programming and debug interface from the native USB peripheral, which is a practical design choice that avoids the common frustration of losing serial debug output when switching to native USB mode.
Connected through a CH343P USB-to-UART bridge IC. This is the primary programming and debugging interface. Connect here for serial monitor output, firmware flashing via esptool, and general development work. The CH343P supports baud rates up to 2 Mbps and includes DTR/RTS signals for the automatic download circuit.
Type-C1 (Side Port) -- Native USB
Connected to the ESP32-S3’s built-in USB peripheral (IO19 D-, IO20 D+) through an FSUSB42UMX analog multiplexer. Supports USB Device mode (CDC serial, HID keyboard/mouse, mass storage) and USB Host mode (connecting external USB peripherals like keyboards, mice, and flash drives).
The FSUSB42UMX is a high-speed USB 2.0 analog switch that routes the ESP32-S3’s native USB data lines (IO19 D-, IO20 D+) between device mode and host mode. The switch is controlled by the CH422G IO expander’s EXIO5 pin.
EXIO5 State
USB Mode
Description
LOW
Device
Board appears as a USB device to a connected host PC
HIGH
Host
Board acts as a USB host, powering and communicating with connected peripherals
Switching between modes in software requires setting the CH422G’s EXIO5 output:
The Type-C2 port includes an automatic download circuit that uses the DTR and RTS signals from the CH343P to control the ESP32-S3’s EN (reset) and IO0 (boot mode) pins. This allows programming tools like esptool.py and the Arduino IDE to automatically enter bootloader mode and flash firmware without requiring you to manually hold the BOOT button and press RESET.
The sequence works by toggling DTR and RTS in a specific pattern that pulses EN low while holding IO0 low, placing the ESP32-S3 into download mode. After flashing completes, the tool releases both signals, allowing the chip to boot normally into the newly flashed firmware.
The CH343P is usually auto-detected via Windows Update and will appear as a COM port in Device Manager. If the driver does not install automatically, download the CH343SER installer from the WCH (Nanjing Qinheng Microelectronics) website and run it manually.
Linux has built-in kernel support for CH343 devices via the ch341 kernel module. The device will appear as /dev/ttyACM0 or /dev/ttyUSB0 automatically. No additional driver installation is needed.
To verify the device is detected:
Terminal window
dmesg|grep-ich34
# Expected output: ch341-uart ttyUSB0: ch341-uart converter now connected
If you encounter permission issues, add your user to the dialout group:
Terminal window
sudousermod-aGdialout$USER
# Log out and back in for the change to take effect
Install the CH34XSER_MAC driver package from the WCH website. After installation and a reboot, the device will appear as /dev/tty.wchusbserial* in the system.
When using the Arduino IDE with the ESP32-S3 board package, the “USB CDC On Boot” setting in the Tools menu controls whether Serial.print() output goes to the USB-UART bridge (Type-C2) or the native USB port (Type-C1).
Setting
Behavior
Disabled (default)
Serial outputs to USB-UART (Type-C2). This is the standard configuration.
Enabled
Serial outputs to native USB CDC (Type-C1). Useful when Type-C2 is not connected.
Both USB ports are protected by LESD8LH5.0CT5G ESD protection diodes on the data lines. These provide clamping for ESD events that commonly occur during cable insertion, protecting the CH343P and the ESP32-S3’s USB transceiver from damage.
When in device mode (EXIO5 LOW, the default), the ESP32-S3’s native USB peripheral can present itself as various USB device classes.
CDC (Serial)
The most common use case. The board appears as a virtual serial port on the host PC. Useful for high-speed data transfer without the baud rate limitations of the UART bridge.
HID (Keyboard / Mouse)
The board can emulate a USB keyboard or mouse. This is useful for building custom input devices, macro pads, or automated testing tools that type keystrokes or move the cursor.
MSC (Mass Storage)
The board can present the SD card or internal flash as a USB mass storage device, allowing a connected PC to read and write files directly.
When in host mode (EXIO5 HIGH), the ESP32-S3 can enumerate and communicate with connected USB peripherals through the Type-C1 port. The ESP-IDF USB Host library supports HID devices (keyboards, mice, gamepads), CDC devices (serial adapters), and mass storage devices. This opens up interesting possibilities for building standalone systems that accept input from standard USB peripherals without needing a PC in the loop.