“USB JTAG/serial debug unit” is not an adapter you bought. It is the USB port built into the ESP32-S3, ESP32-C3, C6, H2, C5, C61 and P4 (USB ID 303A:1001), and it carries two things at once: a serial port that Windows 11 handles on its own, and a JTAG interface that needs WinUSB before OpenOCD can open it. If flashing works but debugging fails with LIBUSB_ERROR_NOT_FOUND, only that second interface is missing its driver. Last checked: 11 November 2026.

⬇ Espressif USB JTAG driver (official link) · Zadig 2.9 (mirrored)

Windows 10 / 11 · x86 and x64 · fixes the JTAG interface only; the COM port needs nothing

Espressif ESP32 USB JTAG driver 6.1.7600.16386 (GitHub release, 5.2 MB)

File: ESP32.USB.JTAG-v6.1.7600.16386.zip · 5,452,291 bytes · SHA-256 92fe5974e521a94c0ebe4f402aef6866dcef0b69770c93bef90fcee8bcdcee50 · released 17 Jul 2024 in espressif/esp-win-usb-drivers. We link instead of mirroring: Espressif’s README says the bundled WinUSB co-installer DLLs are redistributed under Microsoft’s grant to Espressif as the hardware vendor.

Download Zadig-2.9.zip (fallback, 5.1 MB)

File: Zadig-2.9.zip · 5,321,281 bytes · SHA-256 a1a653be3be514116eea78fb024bf44cc1927907e54daed29277142c3b60dd5f · contains the unmodified zadig-2.9.exe from pbatard/libwdi releases (GPL-3). Official home: zadig.akeo.ie.

What Windows 11 actually sees

Open Device Manager → Properties → Details → Hardware Ids on each new entry. The serial half is a CDC-ACM device, which Espressif documents as “a COM* port in the Windows Device Manager” with no driver to install, and it lands under Ports (COM & LPT) as USB Serial Device (COMx). The JTAG half is the one whose ID ends in MI_02: that is the exact hardware ID in Espressif’s INF, USB\VID_303A&PID_1001&MI_02. Once the driver is in, the INF renames it to USB JTAG debug unit under Universal Serial Bus devices.

Diagram: an ESP32-S3, C3, C6, H2, C5, C61 or P4 enumerates as USB JTAG/serial debug unit 303A:1001; its CDC-ACM serial interface binds the in-box usbser.sys and becomes USB Serial Device COMx for esptool and Arduino IDE, while its MI_02 vendor-class JTAG interface needs WinUSB from Espressif's INF or Zadig for OpenOCD, otherwise LIBUSB_ERROR_NOT_FOUND
One cable, two interfaces. Drawn from Espressif’s INF and the ESP-IDF documentation listed under Sources.

Which chips have it, and on which pins

From the ESP-IDF “Configure Built-in JTAG Interface” page of each chip and the *-builtin.cfg board files in Espressif’s OpenOCD. The original ESP32 and the ESP32-S2 have no built-in config: their USB port, if any, goes through a CP2102, CH340 or similar bridge, so it cannot do JTAG.

Chip USB D− / D+ OpenOCD config Note
ESP32-S3 GPIO19 / GPIO20 board/esp32s3-builtin.cfg DevKitC-1 has two ports; only the one wired to GPIO19/20 is this device
ESP32-C3 GPIO18 / GPIO19 board/esp32c3-builtin.cfg Debugging needs chip revision v0.3 or newer; v0.1/v0.2 need ESP-Prog
ESP32-C6 GPIO12 / GPIO13 board/esp32c6-builtin.cfg
ESP32-C61 GPIO12 / GPIO13 board/esp32c61-builtin.cfg
ESP32-C5 GPIO13 / GPIO14 board/esp32c5-builtin.cfg
ESP32-H2 GPIO26 / GPIO27 board/esp32h2-builtin.cfg
ESP32-P4 GPIO24 / GPIO25 board/esp32p4-builtin.cfg
ESP32, ESP32-S2 no USB Serial/JTAG controller use the board’s bridge-chip driver, or ESP-Prog for JTAG

The two official driver packages, compared

Espressif ships this driver from two places. We unpacked both (without running anything) and read the INF and the catalog signatures:

GitHub release (current) dl.espressif.com (used by idf-env)
File ESP32.USB.JTAG-v6.1.7600.16386.zip idf-driver-esp32-usb-jtag-2021-07-15.zip
Size / SHA-256 5,452,291 B · 92fe5974…cdcee50 5,446,239 B · 84e741db…f9db0f30e
INF identical: DriverVer = 07/14/2021, 6.1.7600.16386, generated by libwdi, installs Microsoft’s WinUSB for MI_02 only
Catalog signed by Espressif, cert valid 13 Oct 2022 – 15 Oct 2025, signed 12 Jul 2024, timestamped Espressif, cert valid 23 Sep 2019 – 14 Oct 2022, signed 15 Jul 2021, timestamped
Architectures INF sections NTx86, NTamd64, NTarm (32-bit ARM, with no arm folder in either zip). No NTarm64: on an ARM64 Windows laptop (Snapdragon X) this INF does not match

Both certificates have expired, but each signature carries a timestamp from inside its validity window, which is what Windows checks.

Install on Windows 11

  1. Espressif package. Extract the zip, right-click USB_JTAG_debug_unit.inf → Install (the method in Espressif’s README), or from an admin prompt: pnputil /add-driver USB_JTAG_debug_unit.inf /install. Unplug and replug the board.
  2. Or let Espressif’s tools do it. ESP-IDF’s docs list eim install-drivers (Espressif Installation Manager) and idf-env.exe driver install --espressif; the second downloads the dl.espressif.com zip above.
  3. Check. openocd -f board/esp32s3-builtin.cfg (swap in your chip) should print esp_usb_jtag: Device found. Base speed ….

When it still fails

FAQ

Do I need any driver just to upload Arduino sketches to an ESP32-S3 over its USB port? No. The serial interface uses Windows’ in-box usbser.sys; if that port shows a Code 28, see our usbser.sys Code 28 fix.

Does replacing the driver on interface 2 break the COM port? No, as long as you leave interface 0 alone. That is the one mistake to avoid in Zadig.

Related guides

Sources