Last checked: 2 November 2026.

A USBtinyISP, a SparkFun Pocket AVR or Tiny AVR Programmer, a FabISP and an Adafruit Trinket in bootloader mode all enumerate as the same USB device, USB\VID_1781&PID_0C9F, and none of them is a COM port. When avrdude says Could not find USBtiny device (0x1781/0xc9f) (cannot find USBtiny device from avrdude 7.1 on), the programmer is usually visible in Device Manager: what is missing is a driver that the USB library inside your avrdude can open. Which driver that is depends on the avrdude build, and no vendor page says so.

⬇ Zadig 2.9 + AVRDUDE 8.3 for Windows (official builds) · Adafruit driver installer (official link)

Windows 10/11 x64 · Zadig installs WinUSB, libusbK or libusb-win32 on 1781:0C9F · AVRDUDE 8.3 (11 Sep 2026) opens all three · no installers, unzip and run

Download Zadig 2.9 (5.1 MB)

File: Zadig-2.9.zip · SHA-256 a1a653be3be514116eea78fb024bf44cc1927907e54daed29277142c3b60dd5f · the zadig-2.9.exe inside (5,334,088 bytes) hashes 4ecaa95df3da3621486a043aef8b3050b8bafe7c901402871e816229ef82039b, identical to the asset of pbatard/libwdi v1.5.1 (13 Jun 2024, still the current release) · GPL v3.

Download AVRDUDE 8.3 for Windows x64 (7.3 MB)

File: avrdude-v8.3-windows-x64.zip · 7,657,431 bytes · SHA-256 8630c7d8bb9682a1685aaa9ad42550ae1131c9d13528f0d20975368ba615e9b0 · contains avrdude.exe, avrdude.pdb and avrdude.conf (built 11 Sep 2026) · GPL v2 or later, source at github.com/avrdudes/avrdude · unmodified mirror of the MSVC x64 asset of release v8.3, re-downloaded on 2 Nov 2026.

Adafruit’s own package, official link only: adafruit_drivers_2.5.0.0.exe (12 Nov 2020, 14,147,750 bytes, SHA-256 665936f79a3c9f8354e5c80cbd859a5647d791ea29dda2866b15a90e14256f6b). The repository is MIT, but the installer bundles FTDI and Silicon Labs drivers under their own licences, so we don’t mirror it. The two USBtiny INF files it is built from are readable in the repository: USBtinyISP (libusb-win32) and USBtinyISP_WinUSB.

Matrix of four avrdude Windows builds against the three generic drivers libusb0.sys, libusbK.sys and WinUSB, showing that the Arduino 6.3 build cannot open WinUSB and that libusb-1.0 builds have a caveat with libusb0.sys 1.2.6.0
Which driver each avrdude build can open on 1781:0C9F, from the avrdude and libusb wikis and the contents of the Arduino tool packages. Diagram: TechBenchLab.

Why avrdude says “not found” while Device Manager shows the programmer

usbtiny.c asks libusb to list every USB device it can reach and looks for idVendor 0x1781, idProduct 0x0c9f (from avrdude.conf, programmer usbtiny). On Windows, libusb only lists devices that already have a libusb-compatible driver bound: the libusb wiki says “you must install a driver before you can communicate with it using libusb”. A programmer under Other devices with a yellow mark, or under a driver the library doesn’t support, is invisible to avrdude, and the loop ends in the “not found” line.

Device Manager avrdude says Meaning
Nothing appears when you plug it in, no sound Could not find / cannot find USBtiny device (0x1781/0xc9f) Not enumerated: charge-only cable, dead board, or a USB 3 port that dislikes this low-speed (1.5 Mbit/s) device. Check the green LED first (Adafruit help page)
Other devices → “USBtiny”, “FabISP” or “Unknown device”, yellow mark same Enumerated, no driver. Install one with Zadig (below)
Universal Serial Bus devices → USBtiny (WinUSB) same, only with avrdude 6.3 WinUSB is bound but the Arduino 6.3 build (libusb-win32) cannot open WinUSB devices. Switch the driver to libusb-win32/libusbK, or use avrdude 7.0+
libusb-win32 devices → USBtiny or FabISP programs, or initialization failed, rc=-1 Driver is right. rc=-1 is the target side: ISP wiring, target power, a fuse set to an external clock
Anything cannot open USB device: Permission denied + not found (Linux) udev rule missing; avrdude works as root. Not a Windows symptom

The two INF files Adafruit maintains for the same hardware ID

Both live in adafruit/Adafruit_Windows_Drivers; SparkFun’s Pocket AVR Programmer and Tiny AVR Programmer repositories ship the first one unchanged (their README names Adafruit’s usbtiny_signed_8.zip as the source). The table comes from reading the INF files, the catalog signatures and the extracted installer, not from running anything.

USBtinyISP\USBtiny.inf USBtinyISP_WinUSB\USBtiny_WinUSB.inf
Driver bound libusb0.sys (libusb-win32) 1.2.6.0, signed by its author Travis Lee Robinson, timestamp 17 Jan 2012 WinUSB.sys (part of Windows)
DriverVer 01/15/2013, 1.2.6.0 03/07/2020, 1.0.0.0
Device class / name shown “libusb-win32 devices” / USBtiny USBDevice / USBtiny
Catalog usbtiny.cat present, signed with Adafruit Industries’ GlobalSign code-signing certificate (issued Oct 2016, timestamped) Declares usbtiny_winusb.cat, but no .cat file exists in the folder: an unsigned package, which 64-bit Windows refuses to install outside test-signing mode
In the released installer 2.5.0.0? Yes, byte-identical to the repository (INF, .cat and libusb0.sys hashes match) No. The installer script has an optional “(alt driver)” section for it, but the shipped adafruit_drivers_2.5.0.0.exe contains no USBtinyISP_WinUSB folder
Works with Arduino’s avrdude 6.3 (made for it); avrdude 7.0+ with the 1.2.6.0 caveat below avrdude 7.0 and later; not Arduino’s 6.3-arduino17

So the Adafruit installer still gives you the 2013 libusb-win32 package and nothing else; WinUSB on this programmer comes only from Zadig or from Device Manager’s “WinUsb device” entry (the procedure the avrdude wiki documents, naming the USBtinyISP as an example).

Install the driver on Windows 11 with Zadig

  1. Plug the programmer in directly, no target attached. Start zadig-2.9.exe, open Options → List All Devices. Without that option the programmer does not appear, which is the detour the Arduino forum thread below took.
  2. Pick the entry whose USB ID reads 1781 0C9F. Its name is whatever the firmware reports: SparkFun’s units report FabISP, Adafruit’s INF names it USBtiny.
  3. Choose the target driver with the arrows, then Install Driver (or Replace Driver). Which one:
    • Arduino IDE 1.8.x, or IDE 2 with “Arduino AVR Boards” 1.8.6 or older: libusb-win32. That IDE runs avrdude 6.3.0-arduino17, whose package contains libusb0.dll 1.2.6.0: it opens libusb0.sys and libusbK.sys and cannot see WinUSB.
    • IDE 2 with “Arduino AVR Boards” 1.8.7 or 1.8.8, which switched the tool to avrdude 8.0-arduino.1, a static build on libusb-1.0: WinUSB or libusbK. libusb-1.0 also drives libusb0.sys, but its wiki warns that libusb0.sys 1.2.6.0, the exact version in Adafruit’s package, “cannot send libusb_control_transfer with zero wLength”, and the programmer’s power-up command in usbtiny.c is a zero-length control transfer. Zadig’s libusb-win32 is a newer 1.4.0.0 and is not affected by that note.
    • Standalone avrdude 8.x (the zip above): WinUSB, which is what the avrdude project recommends; libusb0 and libusbK also work with the MSVC build.
  4. Check in Device Manager: the programmer now sits under Universal Serial Bus devices (WinUSB), libusbK USB Devices or libusb-win32 devices. Then avrdude -c usbtiny -p attiny85 -v (no -P: a port makes no sense here) should print the signature.

Which avrdude your IDE runs is in the verbose upload output: …\tools\avrdude\6.3.0-arduino17\bin\avrdude or …\8.0.0-arduino1\….

Five boards, one hardware ID

Board USB ID Product string / name avrdude -c Source
Adafruit USBtinyISP 1781:0C9F “USBtiny” (INF); usb.ids lists 0C9F as “USBtiny” under vendor 1781 “Multiple Vendors” usbtiny USBtiny.inf, usb.ids
SparkFun Pocket AVR Programmer 1781:0C9F, bcdDevice 1.04 FabISP (what dmesg and Zadig show) usbtiny usbtiny.h in the firmware (“SparkFun Licensed VendorID”, USBTINY_DEVICE_VERSION 0x104); forum thread
SparkFun Tiny AVR Programmer 1781:0C9F FabISP usbtiny Arduino forum thread 1216550 (“recognized … as FabISP”)
FabISP (Fab Academy build of USBtiny) 1781:0C9F FabISP usbtiny same firmware family
Adafruit Trinket / Gemma bootloader 1781:0C9F “bootloader disguised as USBtiny”, 10 s window after reset adafruit_gemma (usbtiny type) avrdude.conf; Adafruit Trinket guide
Arduino Gemma bootloader 2341:0C9F same bootloader, Arduino’s VID arduino_gemma avrdude.conf

So a Trinket that “stopped being detected” and a USBtinyISP that “stopped being detected” are the same Windows problem, and one Zadig install covers both.

What the forum threads actually found

FAQ

Device Manager shows “FabISP” under libusb-win32 devices. Wrong driver? No: FabISP is the product string of SparkFun’s firmware, and that class means libusb0.sys is bound, the right driver for the Arduino 6.3 avrdude.

Can I keep WinUSB and still use Arduino IDE 1.8.19? Not with its bundled avrdude 6.3. Switch the driver to libusb-win32 or libusbK with Zadig, or upload from the command line with avrdude 8.3 (see the AVRDUDE on Windows guide).

Related guides

Sources