BootloaderDFU.txt 7.06 KB
Newer Older
1
2
3
4
5
/** \file
 *
 *  This file contains special DoxyGen information for the generation of the main page and other special
 *  documentation pages. It is not a project source file.
 */
6

7
8
/** \mainpage DFU Class USB AVR Bootloader
 *
9
 *  \section Sec_Compat Demo Compatibility:
10
11
12
 *
 *  The following list indicates what microcontrollers are compatible with this demo.
 *
13
14
15
 *  - Series 7 USB AVRs (AT90USBxxx7)
 *  - Series 6 USB AVRs (AT90USBxxx6)
 *  - Series 4 USB AVRs (ATMEGAxxU4)
16
 *  - Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2)
17
 *
18
 *  \section Sec_Info USB Information:
19
20
21
22
23
24
25
26
27
28
29
30
 *
 *  The following table gives a rundown of the USB utilization of this demo.
 *
 * <table>
 *  <tr>
 *   <td><b>USB Mode:</b></td>
 *   <td>Device</td>
 *  </tr>
 *  <tr>
 *   <td><b>USB Class:</b></td>
 *   <td>Device Firmware Update Class (DFU)</td>
 *  </tr>
31
 *  <tr>
32
33
34
35
36
37
38
39
40
41
42
43
44
 *   <td><b>USB Subclass:</b></td>
 *   <td>None</td>
 *  </tr>
 *  <tr>
 *   <td><b>Relevant Standards:</b></td>
 *   <td>USBIF DFU Class Standard, Atmel USB Bootloader Datasheet</td>
 *  </tr>
 *  <tr>
 *   <td><b>Usable Speeds:</b></td>
 *   <td>Full Speed Mode</td>
 *  </tr>
 * </table>
 *
45
 *  \section Sec_Description Project Description:
46
47
48
 *
 *  This bootloader enumerates to the host as a DFU Class device, allowing for DFU-compatible programming
 *  software to load firmware onto the AVR.
49
 *
50
51
52
 *  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.
53
54
55
56
57
58
59
60
61
62
 *
 *  When the bootloader is running, the board's LED(s) will flash at regular intervals to distinguish the
 *  bootloader from the normal user application.
 *
 *  \section Sec_Installation Driver Installation
 *
 *  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
63
 *  <a>http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=2196&item_type=project</a>.
64
 *
65
66
67
 *  \note This device spoofs Atmel's DFU Bootloader USB VID and PID so that the Atmel DFU bootloader
 *        drivers included with FLIP will work. If you do not wish to use Atmel's ID codes, please
 *        manually change them in Descriptors.c and alter your driver's INF file accordingly.
68
 *
69
70
71
 *  \section Sec_HostApp Host Controller Application
 *  
 *  This bootloader is compatible with Atmel's FLIP utility on Windows machines, and dfu-programmer on Linux machines.
72
 *
73
74
75
76
77
78
79
80
81
82
83
84
85
 *  \subsection SSec_FLIP FLIP (Windows)
 *
 *  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.
 *
 *  \subsection SSec_DFUProgrammer dfu-programmer (Linux)
 *
 *  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 <a>http://sourceforge.net/projects/dfu-programmer/</a>.
86
 *
87
88
89
90
 *  The following example loads a HEX file into the AVR's FLASH memory using dfu-programmer:
 *  \code
 *  dfu-programmer at90usb1287 erase flash Mouse.hex
 *  \endcode
91
 *
92
93
94
95
96
 *  \section Sec_API User Application API
 *
 *  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.
 *
97
 *  \warning The APIs exposed by the DFU class bootloader are \b NOT compatible with the API exposed by the official Atmel DFU bootloader.
98
99
100
101
102
 *
 *  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:
 *
 *  \code
103
104
105
 *  #define BOOTLOADER_API_TABLE_SIZE          32
 *  #define BOOTLOADER_API_TABLE_START         ((FLASHEND + 1UL) - BOOTLOADER_API_TABLE_SIZE)
 *  #define BOOTLOADER_API_CALL(Index)         (void*)((BOOTLOADER_API_TABLE_START + (Index * 2)) / 2)
106
107
108
109
110
111
112
113
114
 *
 *  void    (*BootloaderAPI_ErasePage)(uint32_t Address)               = BOOTLOADER_API_CALL(0);
 *  void    (*BootloaderAPI_WritePage)(uint32_t Address)               = BOOTLOADER_API_CALL(1);
 *  void    (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_CALL(2);
 *  uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address)           = BOOTLOADER_API_CALL(3);
 *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_CALL(4);
 *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_CALL(5);
 *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_CALL(6);
 *
115
 *  #define BOOTLOADER_MAGIC_SIGNATURE_START   (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 2))
116
117
 *  #define BOOTLOADER_MAGIC_SIGNATURE         0xDCFB
 *
118
119
 *  #define BOOTLOADER_CLASS_SIGNATURE_START   (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 4))
 *  #define BOOTLOADER_CDC_SIGNATURE           0xDFB1
120
 *
121
 *  #define BOOTLOADER_ADDRESS_START           (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 8))
122
 *  #define BOOTLOADER_ADDRESS_LENGTH          4
123
124
 *  \endcode
 *
125
 *  From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address
126
127
128
129
 *  \c BOOTLOADER_MAGIC_SIGNATURE_START and comparing them to the value \c BOOTLOADER_MAGIC_SIGNATURE. The class of bootloader
 *  can be determined by reading the FLASH memory bytes located at address \c BOOTLOADER_CLASS_SIGNATURE_START and comparing them
 *  to the value \c BOOTLOADER_CDC_SIGNATURE. The start address of the bootloader can be retrieved by reading the bytes of FLASH
 *  memory starting from address \c BOOTLOADER_ADDRESS_START.
130
 *
131
 *  \section Sec_Options Project Options
132
 *
133
 *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
134
135
136
137
138
139
140
141
142
143
 *
 *  <table>
 *   <tr>
 *    <td><b>Define Name:</b></td>
 *    <td><b>Location:</b></td>
 *    <td><b>Description:</b></td>
 *   </tr>
 *   <tr>
 *    <td>SECURE_MODE</td>
 *    <td>BootloaderDFU.h</td>
144
 *    <td>If defined to \c true, the bootloader will not accept any memory commands other than a chip erase on start-up, until an
145
146
147
148
149
 *        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.</td>
 *   </tr>
 *  </table>
 */
150