aboutsummaryrefslogtreecommitdiffstats
path: root/Bootloaders/CDC/BootloaderCDC.txt
blob: ab45ad1b8279f685ac34c52c6735b0dd246b48c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/** \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.
 */

/** \mainpage CDC Class USB AVR Bootloader
 *
 *  \section Sec_Compat Demo Compatibility:
 *
 *  The following list indicates what microcontrollers are compatible with this demo.
 *
 *  - Series 7 USB AVRs (AT90USBxxx7)
 *  - Series 6 USB AVRs (AT90USBxxx6)
 *  - Series 4 USB AVRs (ATMEGAxxU4)
 *  - Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2)
 *
 *  \section Sec_Info USB Information:
 *
 *  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>Communications Device Class (CDC)</td>
 *   </tr>
 *   <tr>
 *    <td><b>USB Subclass:</b></td>
 *    <td>Abstract Control Model (ACM)</td>
 *   </tr>
 *   <tr>
 *    <td><b>Relevant Standards:</b></td>
 *    <td>USBIF CDC Class Standard</td>
 *   </tr>
 *   <tr>
 *    <td><b>Usable Speeds:</b></td>
 *    <td>Full Speed Mode</td>
 *   </tr>
 *  </table>
 *
 *  \section Sec_Description Project Description:
 *
 *  This bootloader enumerates to the host as a CDC Class device (virtual serial port), allowing for AVR109
 *  protocol compatible programming software to load firmware onto the AVR.
 *
 *  Out of the box this bootloader builds for the USB1287, and will fit into 4KB of bootloader space. If
 *  you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU
 *  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.
 *
 *  \section Sec_Installation Driver Installation
 *
 *  After running this bootloader for the first time on a new computer, you will need to supply the .INF
 *  file located in this bootloader project's directory as the device's driver when running under Windows.
 *  This will enable Windows to use its inbuilt CDC drivers, negating the need for custom drivers for the
 *  device. Other Operating Systems should automatically use their own inbuilt CDC-ACM drivers.
 *
 *  \section Sec_HostApp Host Controller Application
 *
 *  This bootloader is compatible with the open source application AVRDUDE, Atmel's AVRPROG, or other
 *  applications implementing the AVR109 protocol, which is documented on the Atmel website as an application
 *  note.
 *
 *  \subsection SSec_AVRDude AVRDUDE (Windows, Mac, Linux)
 *
 *  AVRDude is a free, cross-platform and open source command line programmer for Atmel and third party AVR
 *  programmers. It is available on the the Windows platform as part of the "WinAVR" package, or on other systems
 *  either from a build from the official source code, or in many distributions as a precompiled binary package.
 *
 *  To load a new HEX file with AVRDude, specify "AVR109" as the programmer, with the allocated COM port. On Windows
 *  platforms this will be a COMx port name:
 *  \code
 *  avrdude -c AVR109 -p at90usb1287 -P COM0 -U flash:w:Mouse.hex
 *  \endcode
 *
 *  On Linux systems, this will typically be a /dev/ttyACMx port name:
 *  \code
 *  avrdude -c AVR109 -p at90usb1287 -P /dev/ttyACM0 -U flash:w:Mouse.hex
 *  \endcode
 *
 *  Refer to the AVRDude project documentation for additional usage instructions.
 *
 *  \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.
 *
 *  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
 *  #define BOOTLOADER_API_START(Index)        (void*)(((FLASHEND - 32) + (2 * Index)) / 2)
 *  void    (*BootloaderAPI_ErasePage)(uint32_t Address)               = BOOTLOADER_API_START(0);
 *  void    (*BootloaderAPI_WritePage)(uint32_t Address)               = BOOTLOADER_API_START(1);
 *  void    (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_START(2);
 *  uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address)           = BOOTLOADER_API_START(3);
 *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_START(4);
 *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_START(5);
 *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_START(6);
 *  \endcode
 *
 *  \section Sec_Options Project Options
 *
 *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
 *
 *  <table>
 *   <tr>
 *    <td>NO_BLOCK_SUPPORT</td>
 *    <td>Makefile LUFA_OPTS</td>
 *    <td>Define to disable memory block read/write support in the bootloader, requiring all reads and writes to be made
 *        using the byte-level commands.</td>
 *   </tr>
 *   <tr>
 *    <td>NO_EEPROM_BYTE_SUPPORT</td>
 *    <td>Makefile LUFA_OPTS</td>
 *    <td>Define to disable EEPROM memory byte read/write support in the bootloader, requiring all EEPROM reads and writes
 *        to be made using the block-level commands.</td>
 *   </tr>
 *   <tr>
 *    <td>NO_FLASH_BYTE_SUPPORT</td>
 *    <td>Makefile LUFA_OPTS</td>
 *    <td>Define to disable FLASH memory byte read/write support in the bootloader, requiring all FLASH reads and writes
 *        to be made using the block-level commands.</td>
 *   </tr>
 *   <tr>
 *    <td>NO_LOCK_BYTE_WRITE_SUPPORT</td>
 *    <td>Makefile LUFA_OPTS</td>
 *    <td>Define to disable lock byte write support in the bootloader, preventing the lock bits from being set programmatically.</td>
 *   </tr>
 *  </table>
 */