When an Arduino UNO R3 or Mega 2560 R3 shows up as “ATmega16u2 DFU” or “Arduino Uno DFU” with a yellow triangle, its USB chip is sitting in Atmel’s DFU bootloader at USB\VID_03EB&PID_2FEF, waiting for firmware. Two tools can write it on Windows 11: Atmel’s FLIP 3.4.7 (2012, needs Java and its own libusb-win32 driver) and the open-source dfu-programmer 1.1.0 (2023, works with WinUSB from Zadig). Everything below was read from the FLIP installer, the dfu-programmer source and Arduino’s firmware folder; the forum threads are linked at the end.

⬇ dfu-programmer 1.1.0 for Windows x64 (mirrored) · Atmel FLIP 3.4.7 (official link) · Zadig 2.9

Windows 10/11 x64 · command-line DFU flasher for ATmega8U2/16U2/32U2/16U4/32U4 and AT90USB · GPL-2.0 · no installer

Download dfu-programmer-x64-1.1.0.zip (414 KB)

File: dfu-programmer-x64-1.1.0.zip · 423,421 bytes · SHA-256 0ab135fd9f7c54d142fdd9112f2183d82f5a362032dc3d52860a84756fe96e27 · byte-identical mirror of the official v1.1.0 release of 8 Jul 2023 (contains dfu-programmer.exe, libusb-1.0.dll, the HTML manual and a licenses folder).

Atmel FLIP 3.4.7.112, official link only (Microchip licence, not mirrored): Flip Installer – 3.4.7.112.exe · 5,907,981 bytes · SHA-256 129cf866b949af4ae315aa84e4a83ebd872c9af08fbbc34f450b5625bc84e0d1 · product page: microchip.com/flip. This installer does not include Java.

Zadig 2.9 (mirrored): Zadig-2.9.zip · 5,321,281 bytes · SHA-256 a1a653be3be514116eea78fb024bf44cc1927907e54daed29277142c3b60dd5f · official: zadig.akeo.ie.

Which chip, which USB ID, which board

The DFU product IDs, flash sizes and bootloader sizes are copied from the target_map table in dfu-programmer’s src/arguments.c; the same IDs appear in FLIP’s atmel_usb_dfu.inf. Arduino’s own DFU bootloader keeps Atmel’s VID and these per-chip PIDs “to maintain compatibility with their FLIP software” (Arduino’s firmware README).

Chip ID in DFU mode Flash / DFU bootloader dfu-programmer target Where you meet it
ATmega16U2 03EB:2FEF 16 KB / 4 KB atmega16u2 UNO R3, Mega 2560 R3, Mega ADK R3 (USB-serial chip; normal ID 2341:0043 / 0042 / 0044)
ATmega8U2 03EB:2FEE 8 KB / 4 KB atmega8u2 original UNO and Mega 2560 (2341:0001 / 0010)
ATmega32U2 03EB:2FF0 32 KB / 4 KB atmega32u2 USB-HID projects, some keyboards
ATmega16U4 / 32U4 03EB:2FF3 / 2FF4 16 / 32 KB, 4 KB atmega16u4 / atmega32u4 chips that kept Atmel’s factory DFU bootloader (not Leonardo/Micro, which ship Arduino’s Caterina bootloader)
AT90USB162 / 82 03EB:2FFA / 2FF7 16 / 8 KB, 4 KB at90usb162 / at90usb82 early LUFA hobby boards
AT90USB646/647, 1286/1287 03EB:2FF9 / 2FFB 64 / 128 KB, 8 KB at90usb646… at90usb1287 Atmel AT90USBKEY-style boards (Teensy++ uses PJRC’s own bootloader instead)

What is actually inside FLIP’s DFU driver

This is the part nobody writes down, and it explains most of the Windows 11 trouble. Read from the 3.4.7.112 installer (7-Zip, nothing executed):

Item Value Why it matters on Windows 11
Driver atmel_usb_dfu.inf, header “Copyright (c) 2010 libusb-win32 (GNU LGPL)”, DriverVer 10/02/2010, 1.2.2.0 it is plain libusb-win32 (libusb0.sys 1.2.2.0), not an Atmel kernel driver
Devices 40 USB IDs, all VID_03EB, PID_2FD6…PID_2FFF (XMEGA, UC3, megaxU2/U4, AT90USB, AT89C51) covers every chip in the table above
Architectures NT, NTAMD64, NTIA64 no NTARM64: nothing for Windows on ARM laptops
Signature atmel_usb_dfu.cat signed 26 Jul 2012 by “Atmel Norway” (certificate valid 1 May–31 Dec 2012, VeriSign Class 3 Code Signing 2010 CA, timestamped) an Authenticode signature from 2012, no Microsoft (WHQL) signature; FLIP’s changelog: “Windows 8 is now supported thanks to the signed inf file”
GUI launcher flip.exe = 32-bit (i386) launcher that reads HKLM\SOFTWARE\JavaSoft\Java Runtime Environment → CurrentVersion → JavaHome, then runs bin\javaw.exe -jar Java 9 and later register under SOFTWARE\JavaSoft\JRE instead (JDK-8187906), so FLIP prints “Could not find a Java Virtual Machine, cannot continue.” even with a modern Java installed
Command line bin\batchisp.exe, 32-bit console program, no Java reference in its strings the scriptable path if you cannot install Java 8
Diagram: an ATmega16U2 in DFU mode (USB VID 03EB PID 2FEF) can be bound to FLIP's libusb-win32 driver, which FLIP needs, or to WinUSB via Zadig, which dfu-programmer 1.1.0 needs; with no driver Windows shows an unknown device
One USB ID, one driver at a time: pick the driver for the tool you are going to use. Drawn from atmel_usb_dfu.inf, dfu-programmer 1.1.0 and the libusb Windows wiki.

Path A: FLIP on Windows 11

  1. Install Java 8 (it writes the registry key FLIP looks for). flip.exe is a 32-bit program, and Windows shows 32-bit programs the WOW6432Node view of HKLM\SOFTWARE, so if the 64-bit Java 8 is not found, install the x86 one as well.
  2. Install FLIP 3.4.7 and put the board in DFU: on an UNO R3, briefly short the two pins of the 16U2’s ICSP header nearest the USB jack (RESET to GND). The COM port disappears and a new device appears.
  3. Device Manager → the unknown device → Update driver → Browse my computer → the usb folder inside FLIP’s install folder. It should land under “Atmel USB Devices” as ATmega16U2.
  4. In FLIP: Device → Select → ATmega16U2; Settings → Communication → USB → Open; File → Load HEX File; leave Erase, Program and Verify ticked in the operations flow and run it; then unplug and replug the board.

Path B: dfu-programmer + WinUSB

  1. With the chip in DFU, open Zadig, Options → List All Devices, pick the 03EB:2FEF device and install WinUSB.
  2. Unzip dfu-programmer and run:
    dfu-programmer atmega16u2 erase
    dfu-programmer atmega16u2 flash Arduino-usbserial-atmega16u2-Uno-Rev3.hex
    dfu-programmer atmega16u2 reset
  3. Unplug and replug: the board comes back as 2341:0043 “Arduino Uno” with a COM port.

Why not keep FLIP’s driver for both? dfu-programmer’s README says libusb-win32 works, but the libusb Windows wiki states that libusb-1.0 reaches libusb0.sys only through libusbK.dll, and the 1.1.0 zip does not ship that DLL. If dfu-programmer says “no device present” on a FLIP-driven chip, switch it to WinUSB. To go back to FLIP, reinstall atmel_usb_dfu.inf on that device.

Which hex: through DFU, flash the usbserial-only file (Arduino-usbserial-atmega16u2-Uno-Rev3.hex, Mega2560 and MegaADK variants beside it) from firmwares/atmegaxxu2/arduino-usbserial in the AVR core. The …COMBINED-dfu-usbserial… files contain the DFU bootloader too and are meant for ICSP, which is where thread 318432 went wrong.

The errors in the threads, and what fixed them

Symptom Cause Fix
“Could not find a Java Virtual Machine, cannot continue.” no Java 8 registry key (Java 9+ uses JavaSoft\JRE) install Java 8 (x86 if needed) or use batchisp.exe / dfu-programmer
New UNO shows as “ATmega16u2 DFU” from day one (867957, 366761) the 16U2 has no USB-serial firmware, only the bootloader flash the usbserial hex (Path A or B)
Code 37 after installing FLIP (451010) FLIP’s installer does not bind the device by itself point Device Manager at FLIP’s usb folder (318432)
dfu-programmer: “no device present” (1422209) wrong target name, a pre-16U2 build (the thread had 0.6.1), or no usable driver use 1.1.0, the exact target from the table, WinUSB
Shorting the pins does nothing (1458951, Sep 2026) clone without the DFU bootloader, or header not wired to the 16U2 ICSP: avrdude -c usbasp -p m16u2 -U flash:w:…COMBINED…Uno-Rev3.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m (fuses from Arduino’s README; worked in 1426555)

FAQ

Does the UNO R4 use FLIP? No. It has no 16U2; see UNO R4 not detected.

My Leonardo / Pro Micro shows no DFU device. Those 32U4 boards run Arduino’s Caterina bootloader, not Atmel DFU; see the 8-second bootloader guide.

Related guides

Sources