Every USB device announces itself with two 16-bit numbers, a Vendor ID and a Product ID, and the operating system picks the driver from that pair before it reads anything else. If you can read the pair, you can name the chip on a no-name board, tell a programmer from its clone, and know which driver page to open. Below: where the pair is shown on each OS, a lookup table of 53 bench devices (more than 90 VID:PID pairs) built from the kernel drivers, the tools’ own source code and the usb.ids database, and six cases where the number says less than people think.

Where to read the pair

Windows: Device Manager, right-click the device, Properties, Details tab, property Hardware Ids. The first line reads, for example, USB\VID_067B&PID_2303&REV_0300: vendor, product, and the device’s own revision number. This works even when the device sits under “Other devices” with a yellow mark, which is exactly when you need it. Linux: lsusb prints ID 1a86:7523 plus a name, if the ID is in the usb.ids file. macOS: system_profiler SPUSBDataType lists “Vendor ID” and “Product ID” per device.

Anatomy of a Windows USB Hardware ID: USB, VID_067B, PID_2303, REV_0300, with each field explained
The Hardware Ids string Windows shows for a PL2303 adapter, field by field. Only VID and PID choose the driver; REV is the device’s own firmware or silicon revision and is what tells a PL2303HXA from an HXD. Diagram: TechBenchLab.

The lookup table

IDs are written the way Windows shows them (upper-case hex). Where one device has several IDs, they are listed in the order of the names. “Guide” links to the TechBenchLab post that hosts the driver or tool. Sources are per row group and listed at the end.

USB-to-serial bridges

Device VID:PID Enumerates as Driver / tool Guide
CH340G, CH340C, CH340E 1A86:7523 “USB-SERIAL CH340”, COM port WCH CH341SER CH340 driver
CH340K 1A86:7522 COM port WCH CH341SER CH340 driver
CH341 in UART mode 1A86:5523 COM port WCH CH341SER CH340 driver
CH341A in programmer (EPP/I2C/SPI) mode 1A86:5512 Vendor-specific interface, no COM port WCH CH341PAR; AsProgrammer CH341A + AsProgrammer
CH343 1A86:55D3 “USB-Enhanced-SERIAL CH343” WCH CH343SER CH9102 / CH343 driver
CH9102F, CH9102X 1A86:55D4 “USB-Enhanced-SERIAL CH9102” WCH CH343SER CH9102 / CH343 driver
CH347T (mode 3), CH347F 1A86:55DD, 1A86:55DE UART + JTAG/SPI composite WCH CH343SER + OpenOCD —
CP2102, CP2102N, CP2104 10C4:EA60 “Silicon Labs CP210x USB to UART Bridge” Silicon Labs CP210x VCP CP2102 driver
CP2105 (dual), CP2108 (quad) 10C4:EA70, 10C4:EA71 Two or four COM ports Silicon Labs CP210x VCP CP2102 driver
FT232R, FT232RL 0403:6001 “USB Serial Converter” + “USB Serial Port” FTDI CDM (VCP) FTDI FT232 driver
FT2232C/D/H, FT4232H, FT232H 0403:6010, 0403:6011, 0403:6014 Converter A/B (C/D), one per channel FTDI CDM; D2XX or WinUSB for JTAG FTDI FT232 driver
FT230X, FT231X, FT234X (FT-X) 0403:6015 COM port FTDI CDM FTDI FT232 driver
PL2303 HXA, HXD, TA, TB (generation is in REV, see below) 067B:2303 “Prolific USB-to-Serial Comm Port” Prolific, version depends on the chip PL2303 “Phased Out” fix
PL2303 GC, GB, GT, GL, GE, GS 067B:23A3, 23B3, 23C3, 23D3, 23E3, 23F3 COM port Prolific 4.x PL2303 “Phased Out” fix
Arduino Uno R3, Mega 2560 R3 (ATmega16U2) 2341:0043, 2341:0042 CDC-ACM COM port usbser.sys, built in Arduino IDE 2 port not showing
Arduino Leonardo (sketch / bootloader) 2341:8036, 2341:0036 CDC-ACM + HID usbser.sys, built in Arduino IDE 2 port not showing
STM32 USB CDC (ST’s default Virtual COM Port example) 0483:5740 “STMicroelectronics Virtual COM Port” usbser.sys (Windows 10+) —

Native-USB microcontrollers, bootloaders and phone download modes

Device VID:PID Enumerates as Driver / tool Guide
STM32 built-in DFU bootloader 0483:DF11 “STM32 BOOTLOADER” WinUSB via Zadig; dfu-util, STM32CubeProgrammer STM32 DFU driver
RP2040 in BOOTSEL 2E8A:0003 RPI-RP2 drive + “RP2 Boot” vendor interface Mass storage, no driver; picotool needs WinUSB Pico not detected
RP2350 (Pico 2) in BOOTSEL 2E8A:000F RP2350 drive Mass storage; picotool Pico not detected
Pico SDK USB serial (RP2040 / RP2350) 2E8A:000A, 2E8A:0009 CDC-ACM COM port usbser.sys Pico not detected
Raspberry Pi Debug Probe, Picoprobe 2E8A:000C, 2E8A:0004 CMSIS-DAP + CDC None; OpenOCD, pyOCD —
ESP32-S3, C3, C6, H2 USB-Serial/JTAG 303A:1001 “USB JTAG/serial debug unit” (CDC + vendor) usbser.sys for the port; esptool talks to it directly esptool step by step
ESP32-S2 USB DFU 303A:0002 DFU runtime dfu-util (idf.py dfu-flash) ESP-IDF install
Teensy HalfKay bootloader / Teensyduino serial 16C0:0478, 16C0:0483 HID / CDC-ACM Teensy Loader; usbser.sys —
Digispark (Micronucleus bootloader) 16D0:0753 Vendor-specific libusb via Zadig —
Qualcomm EDL (Emergency Download), “QDLoader 9008” 05C6:9008 COM port once the Qualcomm driver is in Qualcomm HS-USB driver (proprietary) —
Qualcomm diagnostic port 05C6:900E COM port Qualcomm HS-USB driver —
MediaTek BROM / Preloader 0E8D:0003 / 0E8D:2000, 0E8D:2001 VCOM port, appears for a few seconds MediaTek USB VCOM driver (proprietary); mtkclient —

Programmers and debug probes

Device VID:PID Enumerates as Driver / tool Guide
ST-Link/V2, including the aluminium clone dongles 0483:3748 “STM32 STLink” ST-Link USB driver (STSW-LINK009) ST-Link V2 driver
ST-Link/V2-1 (on Nucleo and Discovery boards) 0483:374B, 0483:3752 ST-Link + VCP + mass storage ST-Link USB driver ST-Link V2 driver
STLINK-V3 (loader / modes) 0483:374D / 374E, 374F, 3753, 3754, 3755, 3757 ST-Link + VCP (+ bridge) ST-Link USB driver ST-Link V2 driver
SEGGER J-Link (classic / new-format PIDs) 1366:0101 / 1366:1001 to 1366:101F and up Vendor interface, optionally CDC and MSD J-Link Software; WinUSB mode is encoded in the PID J-Link driver + J-Flash Lite
CMSIS-DAP, DAPLink (any vendor’s board) 0D28:0204 HID (v1) or WinUSB (v2) + CDC + MSD None; OpenOCD, pyOCD, Keil —
WCH-LinkE in RISC-V mode / in ARM (DAP) mode 1A86:8010 / 1A86:8012 Vendor interface / CMSIS-DAP WCH-LinkUtility, MounRiver; OpenOCD (WCH build), wlink —
Black Magic Probe (application / DFU) 1D50:6018 / 1D50:6017 Two CDC-ACM ports (GDB + UART) usbser.sys; GDB connects directly —
USBasp and every clone 16C0:05DC (Objective Development’s shared PID) “USBasp”, vendor-specific libusbK or WinUSB via Zadig; avrdude Zadig + USBasp
USBtiny, USBtinyISP 1781:0C9F Vendor-specific libusb via Zadig; avrdude avrdude on Windows
AVRISP mkII, AVR Dragon, JTAGICE3, Atmel-ICE 03EB:2104, 03EB:2107, 03EB:2140, 03EB:2141 Vendor / HID (ICE) Microchip Studio; libusb for avrdude avrdude on Windows
PICkit 2, PICkit 3, PICkit 4 04D8:0033, 04D8:900A, 04D8:9012 HID None; MPLAB X / IPE PICkit + MPLAB IPE
MPLAB ICD 3, ICD 4, REAL ICE 04D8:9009, 04D8:9015, 04D8:9004 HID / vendor MPLAB X PICkit + MPLAB IPE
TL866A, TL866CS 04D8:E11C Vendor-specific MiniPro software; minipro (Linux) minipro on Linux
TL866II Plus, XGecu T48 and T56 (all three share it) A466:0A53 Vendor-specific Xgpro driver; minipro TL866II Plus vs T48 vs T56
XGecu T76 A466:1A86 Vendor-specific Xgpro Xgpro download
Olimex ARM-USB-OCD-H, ARM-USB-TINY-H 15BA:002B, 15BA:002A FT2232-based, two interfaces WinUSB via Zadig; OpenOCD —
Bus Pirate v4 04D8:FB00 CDC-ACM usbser.sys —

Logic analyzers and scopes

Device VID:PID Enumerates as Driver / tool Guide
Saleae Logic (original) and every 24 MHz 8-channel clone 0925:3881 Vendor-specific, no firmware yet WinUSB via Zadig; PulseView, Logic 1.2.40 24 MHz logic analyzer driver
Same clone after sigrok loads fx2lafw (8 ch / 16 ch) 1D50:608C / 1D50:608D “sigrok FX2 LA” sigrok PulseView download
Saleae Logic16, Logic 8, Logic Pro 8, Logic Pro 16 21A9:1001, 1004, 1005, 1006 Vendor-specific Saleae Logic 2 (bundled WinUSB) Saleae Logic 2 download
Hantek 6022BE, cold (two factory variants) 04B4:6022 or 04B5:6022 “Hantek6022BE DRIVER 1” / “DRIVER 2” Hantek driver, or sigrok (re-enumerates as 1D50:608E) Hantek 6022BE driver
Hantek 6022BL 04B4:602A or 04B5:602A Same pattern Hantek driver, or sigrok Hantek 6022BE driver
DSLogic, DSLogic Pro, Plus, Basic 2A0E:0001, 0003, 0020, 0021 Vendor-specific DSView; sigrok —
Rigol DS1000Z / MSO1000Z (USBTMC) 1AB1:04CE USB Test & Measurement class Class driver on Linux; NI-VISA or IVI on Windows —

Six things the number does not tell you

  1. Three programmers, one PID. The TL866II Plus, the T48 and the T56 all enumerate as A466:0A53; the minipro project’s udev file carries one rule for the three. The model only becomes known after the software talks to the device, which is why a T56 with the wrong Xgpro version still “installs” and then fails.
  2. Some devices change ID after you open them. A Hantek 6022BE plugs in as 04B4:6022; the moment sigrok uploads its firmware the scope re-enumerates as 1D50:608E. The same happens to a Saleae clone, 0925:3881 to 1D50:608C. Device Manager shows two different devices over time, and Zadig has to be applied to the first one.
  3. The PL2303 generation lives in REV, not in the PID. Every HXA, HXD, TA and TB answers 067B:2303. The Linux driver decides the type from bcdUSB and bcdDevice: USB 1.1 with device revision 0300 is HX(A), 0400 is HXD; USB 2.0 with 0300 is TA, 0500 is TB. On Windows that revision is the REV_0300 at the end of the Hardware Id, which is how you know in advance whether the “Phased Out” message is coming.
  4. 1A86:7523 is not always a CH340. WCH’s newer CH343C claims the same pair with REV_8234, and the two INF files name it differently; the CH9102 / CH343 guide above has the full INF table.
  5. lsusb knows fewer vendors than you expect. The usb.ids release of 26 June 2026 has no entry for vendor 2E8A (Raspberry Pi) or 303A (Espressif), so a Pico or an ESP32-S3 shows up as bare numbers with no name. The device is fine; the database is behind.
  6. One probe, two IDs by mode. A WCH-LinkE is 1A86:8010 in RISC-V mode and 1A86:8012 in ARM mode; the switch is done by the WCH tool, not by the cable. A J-Link encodes whether it is in SEGGER-driver or WinUSB mode inside the PID itself.

FAQ

Device Manager shows no VID at all, only “Unknown USB Device (Device Descriptor Request Failed)”. What now? The host never got the descriptor, so no driver was ever a candidate. That is a cable, hub, power or dead-chip problem, not a driver one. Try another cable and a rear port before downloading anything.

The pair is in the table but the yellow mark stays after installing the driver. Check REV and the interface. A composite device (ST-Link/V2-1, ESP32-S3, Black Magic Probe) exposes several interfaces under one PID; the driver you installed may cover only one of them, and Zadig applied to the wrong interface takes a working port away.

Can I trust a VID to prove a chip is genuine? No. The VID:PID is written into the chip or its EEPROM by whoever made the board; clones copy it on purpose, which is the whole story behind the FTDI and Prolific driver lockouts.

Related guides

Sources