LUFA Library - DFU Class Bootloader
|
The following list indicates what microcontrollers are compatible with this demo.
The following table gives a rundown of the USB utilization of this demo.
USB Mode: | Device |
USB Class: | Device Firmware Update Class (DFU) |
USB Subclass: | None |
Relevant Standards: | USBIF DFU Class Standard, Atmel USB Bootloader Datasheet |
Supported USB Speeds: | Low Speed Mode Full Speed Mode |
This bootloader enumerates to the host as a DFU Class device, allowing for DFU-compatible programming software to load firmware onto the AVR.
Out of the box this bootloader builds for the AT90USB1287 with an 8KB bootloader section size, and will fit into 4KB of bootloader space. If you wish to alter this size and/or change the AVR model, you will need to edit the MCU, FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB values in the accompanying makefile.
When the bootloader is running, the board's LED(s) will flash at regular intervals to distinguish the bootloader from the normal user application.
This bootloader is designed to be compatible with Atmel's provided Windows DFU class drivers. You will need to install Atmel's DFU drivers prior to using this bootloader on Windows platforms. If you are using a 64 bit Windows OS, you will need to either disable the driver signing requirement (see online tutorials for details) or use a digitally signed version of the official Atmel driver provided by a third party AVR user at http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=2196&item_type=project.
This bootloader is compatible with Atmel's FLIP utility on Windows machines, and dfu-programmer on Linux machines.
FLIP (Flexible In-System Programmer) is a utility written by Atmel, and distributed for free on the Atmel website. The FLIP utility is designed to assist in the bootloader programming of a range of Atmel devices, through several popular physical interfaces including USB. It is written in Java, however makes use of native extensions for USB support and thus is only offered on Windows.
To program a device using FLIP, refer to the Atmel FLIP documentation.
dfu-programmer is an open-source command line solution for the bootloader programming of Atmel devices through a USB connection, using the DFU protocol, available for download at http://sourceforge.net/projects/dfu-programmer/.
The following example loads a HEX file into the AVR's FLASH memory using dfu-programmer:
Several user application functions for FLASH and other special memory area manipulations are exposed by the bootloader, allowing the user application to call into the bootloader at runtime to read and write FLASH data.
By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the following layout:
From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address BOOTLOADER_MAGIC_SIGNATURE_START
and comparing them to the value BOOTLOADER_MAGIC_SIGNATURE
. The class of bootloader can be determined by reading the FLASH memory bytes located at address BOOTLOADER_CLASS_SIGNATURE_START
and comparing them to the value BOOTLOADER_DFU_SIGNATURE
. The start address of the bootloader can be retrieved by reading the bytes of FLASH memory starting from address BOOTLOADER_ADDRESS_START
.
The following illustration indicates the final memory map of the device when loaded with the bootloader.
* +----------------------------+ 0x0000 * | | * | | * | | * | | * | | * | | * | | * | | * | User Application | * | | * | | * | | * | | * | | * | | * | | * | | * +----------------------------+ FLASHEND - BOOT_AUX_SECTION_SIZE * | Booloader Start Trampoline | * | (Not User App. Accessible) | * +----------------------------+ FLASHEND - (BOOT_AUX_SECTION_SIZE - 4) * | | * | Auxillery Bootloader | * | Space for Smaller Devices | * | (Not User App. Accessible) | * | | * +----------------------------+ FLASHEND - BOOT_SECTION_SIZE * | | * | Bootloader Application | * | (Not User App. Accessible) | * | | * +----------------------------+ FLASHEND - 96 * | API Table Trampolines | * | (Not User App. Accessible) | * +----------------------------+ FLASHEND - 32 * | Bootloader API Table | * | (User App. Accessible) | * +----------------------------+ FLASHEND - 8 * | Bootloader ID Constants | * | (User App. Accessible) | * +----------------------------+ FLASHEND *
To make the bootloader function on smaller devices (those with a physical bootloader section of smaller than 6KB)
The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
Define Name: | Location: | Description: |
---|---|---|
SECURE_MODE | AppConfig.h | If defined to true , the bootloader will not accept any memory commands other than a chip erase on start-up, until an erase has been performed. This can be used in conjunction with the AVR's lockbits to prevent the AVRs firmware from being dumped by unauthorized persons. When false, all memory operations are allowed at any time. |