Back to Docs
Hardware Setup

ESP32 USB Driver Guide

Before you can flash firmware to your ESP32, you need the correct USB-to-UART driver installed. Your board's USB chip determines which driver you need. This page auto-detects your OS and provides one-click downloads.

Detecting your operating system...

We'll show the best drivers for your system.

Step 1: Identify Your USB Chip

ESP32 boards use different USB-to-UART bridge chips. You need to know which one your board has before downloading the correct driver. Most ESP32 DevKit v1 boards use the CP2102 chip.

CH340 WCH

Common on affordable clone boards. Small chip with "CH340G" or "CH340C" printed on it. 16-pin SOP package.

Printed on chip: CH340G / CH340C

Not sure? Check the bottom of your ESP32 board. The USB chip is usually a small black rectangle near the USB port. Zoom in with your phone camera to read the text printed on it.

Step 2: Auto-Detect Your Chip

Connect your ESP32 to your computer via USB, then click the button below. We'll scan your system's serial ports to identify which chip your board uses.

Serial Port Scanner

Make sure your ESP32 is plugged in, then scan for connected devices.

Step 3: Download Drivers

Select your chip below and download the driver for your operating system. If you auto-detected your chip above, the recommended driver is highlighted.

CP2102 / CP2102N Driver Silicon Labs

For boards with the CP2102 USB-to-UART bridge chip

Windows 10 / 11
CP210x Universal Windows Driver — Installer (.exe)
Download
macOS 10.9+ (Intel & Apple Silicon)
CP210x VCP Driver — DMG installer
Download
Linux (Ubuntu, Debian, Fedora)
Kernel built-in — No driver needed! Just add your user to the dialout group.
Built-in

CH340 / CH341 Driver WCH

For boards with the CH340 USB-to-UART bridge chip

Windows 7 / 8 / 10 / 11
CH341SER — Installer (.exe)
Download
macOS 10.9+ (Intel & Apple Silicon)
CH341SER_MAC — ZIP archive
Download
Linux (Ubuntu, Debian, Fedora)
Kernel built-in since Linux 2.6+ — No driver needed!
Built-in

Step 4: Install the Driver

After downloading, follow the instructions for your operating system below.

Troubleshooting

Common issues and how to fix them.

Device Manager shows "Unknown Device"

You likely have the wrong driver installed, or no driver at all. Uninstall any existing COM port drivers from Device Manager, then install the correct driver for your chip (CP2102 or CH340).

No COM port appears after plugging in

Try a different USB cable — many cables are charge-only and don't have data lines. Also try a different USB port. If using a USB hub, connect directly to the computer instead.

Flashing fails with "Failed to connect" or "Timed out"

Put the ESP32 in download mode: hold the BOOT button on the board, press and release RESET, then release BOOT. The board should now accept firmware uploads.

macOS: "System Extension Blocked" after driver install

Go to System Settings → Privacy & Security. Scroll down and click "Allow" next to the blocked system extension from Silicon Labs or WCH. You may need to restart.

Linux: "Permission denied" when accessing serial port

Your user isn't in the dialout group. Run sudo usermod -a -G dialout $USER and log out/back in. As a temporary fix, run your flash command with sudo.

Windows: Driver install fails with "Hash not found"

This happens on Windows 10/11 with strict driver signing. Temporarily disable driver signature enforcement: Settings → Update & Security → Recovery → Advanced startup → Restart now → Troubleshoot → Startup Settings → Disable driver signature enforcement.

Board resets repeatedly when plugged in

This is often a power issue. Some boards draw too much current for the USB port. Try a powered USB hub, or a different USB port (USB 3.0 ports provide more power). Also check for solder bridges on the bottom of the board.

Quick Reference

Driver download links and common device identifiers at a glance.

Chip Manufacturer Windows Port Name macOS Device Linux Device
CP2102 Silicon Labs COM3 (varies) /dev/cu.SLAB_USBtoUART /dev/ttyUSB0
CH340G WCH COM3 (varies) /dev/cu.wchusbserial1420 /dev/ttyUSB0
CH340C WCH COM3 (varies) /dev/cu.wchusbserial1420 /dev/ttyUSB0

ESP32-S2, ESP32-S3, ESP32-C3 boards have native USB — they don't need a USB-to-UART driver. These appear as /dev/ttyACM* on Linux and /dev/cu.usbmodem* on macOS. Flash them directly with the ESP Web Flasher or esptool.py.