Flashing the USB DFU bootloader
Introduction
If you have an atmega32u4 breakout board with the Arduino bootloader (or empty flash) and would like to use the board with the avr-cmake-template
and/or dfu-programmer to flash your applications using just a USB cable, we will need to do a couple different things.
To begin you will need to gather the necessary tools outlined in the Prerequisite section.
Prerequisites
You will need the following tools to write the USB DFU bootloader
- avrdude
- AVR ISP programmer (1x of the following)- AVRISP MKII programmer
- Atmel ICE
- Arduino running the Arduino ISPexample sketch
 
If you use an Arduino as an ISP programmer, make sure it is an Arduino with 3.3V logic levels. An Arduino Uno, for example, will not work as it runs a 5V logic level and can cause damage to the atmega32u4 pins.
Writing the fuses
When using the DFU bootloader we recommend setting the fuses to immediately boot the user application at address 0x0000 and to enter the DFU bootloader you initiate
the boot reset sequence using the nRST and HWB pins. To apply this methodology we need to set two fuses - the BOOTRST and the HWBE
fuses. We need to set the BOOTRST fuse to be unprogammed (1b) which causes the MCU to start executing at address 0x0000. The HWBE fuse needs to be
programmed (0b) which allows us to use the E2 / HWB GPIO to conditionally execute starting at the bootloader address (default address of 0x3800).
The remaining fuses such as clock speed, brown-out detection level, etc can be set as the application needs. We recommend using the AVR Fuse Calculator to configure your fuses with an easy to use GUI.
The fuse settings below are the recommended values for the atmegaXu4_breakout board. To write the fuses you need to connect the 6pin ISP header to your programmer and then execute the following via CLI (The below uses the Atmel ICE programmer). Remember
to replace the low, high and extended fuse values with your needed fuse values.
avrdude -p atmega32u4 -c atmelice_isp -U lfuse:w:0xce:m -U hfuse:w:0x99:m -U efuse:w:0xc3:m
Flashing the USB-DFU bootloader
To write the USB-DFU bootloader we need to retrieve the .hex from this Github repository. The .hex
image is also available on Microchips site, but we've stored it in a Github repository just in case Microchips site is down or the image is removed in the future. Once cloned
we can flash the bootloader image.
avrdude -p atmega32u4 -c atmelice_isp -U flash:w:ATMega32U4-usbdevice_dfu-1_0_0.hex:h
With the bootloader flashed, we're ready to upload an application via USB. We have a seperate guide for initiating and utilizing the DFU bootloader here