Rev 1307 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1307 | Rev 1308 | ||
---|---|---|---|
Line -... | Line 1... | ||
- | 1 | ||
- | 2 | ====================================================== |
|
- | 3 | ||
- | 4 | ATMEL AVR UART Bootloader for AVR-GCC/avr-libc |
|
- | 5 | ||
- | 6 | by Martin Thomas, Kaiserslautern, Germany |
|
- | 7 | mthomas@rhrk.uni-kl.de |
|
- | 8 | eversmith@heizung-thomas.de |
|
- | 9 | http://www.siwawi.arubi.uni-kl.de/avr_projects |
|
- | 10 | ||
- | 11 | ** Addtional code and improvements contributed ** |
|
- | 12 | ** by Uwe Bonnes, Bjoern Riemer and Olaf Rempel. ** |
|
- | 13 | ||
- | 14 | Eearly versions of this bootloader-code have been |
|
- | 15 | based on the AVR Butterfly bootloader-source REV02 |
|
- | 16 | which has been available from atmel.com. |
|
- | 17 | ||
- | 18 | ====================================================== |
|
- | 19 | ||
- | 20 | ||
- | 21 | Programming-Software (on the "PC-Side"): |
|
- | 22 | ||
- | 23 | * AVRProg (included in AVRStudio) available at www.atmel.com. |
|
- | 24 | MS-Windows only. AVRProg can be used as stand-alone application. |
|
- | 25 | (avrprog.exe) |
|
- | 26 | ||
- | 27 | * avrdude available at http://savannah.nongnu.org/projects/avrdude/ |
|
- | 28 | "Multiplattform" |
|
- | 29 | ||
- | 30 | * Installation instructions at the end of this file. |
|
- | 31 | ||
- | 32 | ||
- | 33 | 3. Dec. 2008 - Version 0.85 |
|
- | 34 | ||
- | 35 | * disable U2X before jump to app as suggested be Alexander Döller |
|
- | 36 | * moved UBRR-macros to main.c and changed them. Inspired by code from avr-libc setbaud. |
|
- | 37 | (macros which are commented out (//) are from Pavel Fertser) |
|
- | 38 | ||
- | 39 | 6. Nov. 2008 - Version 0.84 |
|
- | 40 | ||
- | 41 | * Added definitions for ATmega64 provided by Pavel Fertser - Thanks. |
|
- | 42 | ||
- | 43 | 12. Apr. 2008 - Version 0.83 |
|
- | 44 | ||
- | 45 | * Added definitions for ATmega644P and ATmega324P |
|
- | 46 | * Tested with ATmega324P, gcc 4.2.2, avr-libc 1.4.6 |
|
- | 47 | * Added testapp to verify "exit bootloader" with |
|
- | 48 | watchdog (n.b.: watchdog-disable called early in testapp) |
|
- | 49 | ||
- | 50 | 27. Jan. 2007 - Version 0.82 |
|
- | 51 | ||
- | 52 | * Added definitions for ATmega644. |
|
- | 53 | * Using avr-lib's eeprom-functions (old "direct-access"-code |
|
- | 54 | has not been compatible with ATmega644). |
|
- | 55 | * Watchdog-disable at startup (configurable): avoids problems with |
|
- | 56 | repeated login to bootloader. Not needed if the bootloader is |
|
- | 57 | never re-entered again between an "exit programming" and |
|
- | 58 | a system-reset/power-toogle. |
|
- | 59 | * Additional watchdog disable-function for ATmega644. |
|
- | 60 | * Made watchdog-enable time at exit-programming a configuration-value |
|
- | 61 | (define). |
|
- | 62 | * Bootloader read-protection: if enabled the bootloader fakes |
|
- | 63 | an empty boot-section (configurable by define) |
|
- | 64 | Since more of the avr-libc functions's are used this version |
|
- | 65 | should be more portable for other AVRs but the size of the |
|
- | 66 | binary increases a little bit. |
|
- | 67 | Make sure to disable the watchdog early in the user-application |
|
- | 68 | esp. when using a "modern" AVR (i.e. ATmega48/88/168/644/324P/644P). |
|
- | 69 | ||
- | 70 | 3. Dec. 2006 - Version 0.81 |
|
- | 71 | ||
- | 72 | * Added definitions for ATmega162. |
|
- | 73 | * Fixed init for double-speed (bitmask). Thanks to Bernhard Roth |
|
- | 74 | ||
- | 75 | 28. May 2006 - Version 0.8beta3 |
|
- | 76 | ||
- | 77 | * Supports discarding of interrupt-vectors which saves some space |
|
- | 78 | if no interrupts are needed in the bootloader. Added option |
|
- | 79 | in makefile to enable this feature, modified LDFLAGS, |
|
- | 80 | additional code in main.c for a pseudo default_interrupt ISR. |
|
- | 81 | The modified linker-scripts have been contributed by |
|
- | 82 | Olaf Rempel (basicly just the .vector-section is not linked). |
|
- | 83 | * Reverted the order of signatur-byte-numbers in part- |
|
- | 84 | configurations to the usual order in the datasheet, |
|
- | 85 | also reverted in main.c for sending the signature. |
|
- | 86 | * Definitions for lock/fuse-readout. |
|
- | 87 | * Updated installation-instruction at the end of this file. |
|
- | 88 | * Added DEVTYPE_ISP/DEVTYPE_BOOT to part-configurations, |
|
- | 89 | added configuration-option for this in main.c. |
|
- | 90 | * A remark about the DEVTYPE: Usualy there are two |
|
- | 91 | Part-Codes/Device-Codes. One is for ISP: AVRProg shows |
|
- | 92 | the type of the AVR. The other code is for bootloading: |
|
- | 93 | AVRprog shows the type plus "BOOT". When a boot-device-code |
|
- | 94 | gets detected by AVRprog it "knows" how do handle the |
|
- | 95 | limited functionality of bootloaders. (When receiving the |
|
- | 96 | ISP-code AVRProg expects an AVR910-type programmer.) |
|
- | 97 | The offset between the codes is usualy 0x01 where the |
|
- | 98 | ISP-code is the smaller value, i.e. ATmega32 ISP-code |
|
- | 99 | is 0x72->"ATmega32" and boot-code is 0x73->"ATmega32 BOOT". |
|
- | 100 | When using avrdude the bootloader's device-code must match |
|
- | 101 | the device-code in the avrdude.conf. Check the avrdude- |
|
- | 102 | code to see if both codes (AVR910 and AVR109) are supported. |
|
- | 103 | -- I have got some e-mails from users which have been |
|
- | 104 | confused by this. Hopefully this explanation is good enough. |
|
- | 105 | * This bootloader lets the watchdog do a reset when the |
|
- | 106 | user selects "Exit programmer" (i.e. in AVRProg) after an |
|
- | 107 | update. Make sure to disable or reset the watchdog early in |
|
- | 108 | your application. |
|
- | 109 | ||
- | 110 | 27. May 2006 - Version 0.8beta2 |
|
- | 111 | ||
- | 112 | * More very well done improvements contributed by Olaf Rempel. |
|
- | 113 | * Olaf Rempel also modified the STARTUP_WAIT method. |
|
- | 114 | ||
- | 115 | 21. May 2006 - Version 0.8beta |
|
- | 116 | ||
- | 117 | * Version contributed by Olaf Rempel. He has done a lot of modifications. |
|
- | 118 | -> "cleaner code", smaller binaries. |
|
- | 119 | ||
- | 120 | 09. Feb. 2006 - Version 0.75 |
|
- | 121 | ||
- | 122 | * additional STARTUP_WAIT support contributed by Bjoern Riemer |
|
- | 123 | ||
- | 124 | 18. Aug. 2005 - Version 0.74 |
|
- | 125 | ||
- | 126 | * AT90CAN128 support contributed by Uwe Bonnes |
|
- | 127 | * Makefile modifications contributed by Uwe Bonnes |
|
- | 128 | ||
- | 129 | 23. Feb. 2005 - Version 0.7 |
|
- | 130 | ||
- | 131 | * (Version 0.6 has never been available on the web-page) |
|
- | 132 | * ATmega128 support |
|
- | 133 | * code cleanup |
|
- | 134 | * This version has been tested with ATmega8, ATmega32 and |
|
- | 135 | ATmega128 |
|
- | 136 | ||
- | 137 | 7. Apr. 2004 - Version 0.5 |
|
- | 138 | ||
- | 139 | * added different startup-methods |
|
- | 140 | * compatible with ATmega8 now |
|
- | 141 | * included makefile adapted to ATmega8 now |
|
- | 142 | (ATmega16 options still available) |
|
- | 143 | * fixed jump to application which did not work |
|
- | 144 | reliably before |
|
- | 145 | * tested with ATmega8 |
|
- | 146 | * minimal options and startup-code result in |
|
- | 147 | bootloader-size < 512 words |
|
- | 148 | ||
- | 149 | 6. Apr. 2004 - Version 0.4 |
|
- | 150 | ||
- | 151 | * Buffered read of chars from UART during programming |
|
- | 152 | since eeprom-write is too slow for unbuffered |
|
- | 153 | operation. So EEPROM-upload does work now. |
|
- | 154 | * Added BOOTICE-mode to flash JTAGICE-compatible |
|
- | 155 | hardware (ATmega16@7,3Mhz) (if you know about BOOTICE, |
|
- | 156 | you may unterstand why this has been added, if not |
|
- | 157 | just keep the option disabled) |
|
- | 158 | * small changes in (my)boot.h (lock-bit-mask) found |
|
- | 159 | out during the development of the STK-500-compatible |
|
- | 160 | bootloader. But setting lock-bits still does not |
|
- | 161 | work with this bootloader. |
|
- | 162 | * read of the low-fuse byte works (high byte still TODO) |
|
- | 163 | * read of the lock-byte works (write still TODO) |
|
- | 164 | ||
- | 165 | 27. Mar 2004 - Version 0.3 |
|
- | 166 | ||
- | 167 | Felt that as much functions from avr-libc's boot.h |
|
- | 168 | as possible should be used without modifications. |
|
- | 169 | Latest CVS-version of boot.h is included. |
|
- | 170 | Only the read-routine is still "self-made" based |
|
- | 171 | on ATMELs assembler-code. |
|
- | 172 | EEPROM write on Mega16 does not work (and did not |
|
- | 173 | work with V0.2 too). May be caused by my old Mega16 |
|
- | 174 | chip. Needs testing. Flash read/write and EEPROM |
|
- | 175 | read works. Still only tested with ATmega16. |
|
- | 176 | This version may not work with the ATmega169 any |
|
- | 177 | more. |
|
- | 178 | ||
- | 179 | 24. Mar 2004 - Version 0.2 |
|
- | 180 | ||
- | 181 | During the development of a data-logger application |
|
- | 182 | with the AVR-Butterfly there was a need to make |
|
- | 183 | some changes in the bootloader. The same problem |
|
- | 184 | again: no IAR compiler. The same way to solve the |
|
- | 185 | problem: a port of the code to avr-gcc/avr-libc. |
|
- | 186 | So this code is based on the ATMEL Butterfly |
|
- | 187 | bootloader source code Rev 0.2 for IAR. |
|
- | 188 | ||
- | 189 | The bootloader-port for the Butterfly which mimics |
|
- | 190 | the complete functionality of the original |
|
- | 191 | BF-bootloader is availabe at: |
|
- | 192 | www.siwawi.arubi.uni-kl.de/avr_projects |
|
- | 193 | ||
- | 194 | Atmel used a separate "lib" written in "pure" |
|
- | 195 | assembly to access the low-level functions |
|
- | 196 | for flash read/write. Well, so far I |
|
- | 197 | don't know how to use "mixed language sources" |
|
- | 198 | with the avr-gcc toolchain, so the low-level |
|
- | 199 | routines have been implemented as inline assembler. |
|
- | 200 | The avr-libc boot.h module written by Eric |
|
- | 201 | Weddington served as a template Three of the four |
|
- | 202 | low-level routines found in lowlevel.c come from |
|
- | 203 | boot.h with minimal changes. The read routine has |
|
- | 204 | been developed based on the ATMEL assembler code. |
|
- | 205 | ||
- | 206 | Ignore the fuse and lock-bit readout. Read and Set is |
|
- | 207 | not enabled (TODO). |
|
- | 208 | ||
- | 209 | ||
- | 210 | --------------- Installation ----------------- |
|
- | 211 | ||
- | 212 | - Change the MCU type in the makefile. |
|
- | 213 | ||
- | 214 | - Change the boot(loader)-size in Makefile. The needed |
|
- | 215 | space depends on the features selected in main.c |
|
- | 216 | ||
- | 217 | - Set baudrate in main.c, a doublespeed configuration-option |
|
- | 218 | is available too. |
|
- | 219 | ||
- | 220 | - Change the F_CPU in main.c to the clock-frequency |
|
- | 221 | of your board. See the datasheet for frequencies |
|
- | 222 | with minimum error at the selected baudrate. |
|
- | 223 | ||
- | 224 | - Select the start-condition in main.c. |
|
- | 225 | ||
- | 226 | - Please use at least avr-gcc 3.3.1/avr-libc 1.0 |
|
- | 227 | or WINAVR Sept. 2003 or later to compile and link |
|
- | 228 | this bootloader. |
|
- | 229 | ||
- | 230 | - Upload the hex-File to the AVR (STK500, STK200, SP12 |
|
- | 231 | evertool, AVR910 etc.) |
|
- | 232 | ||
- | 233 | - Program the "Boot Flash section size" (BOOTSZ fuses) |
|
- | 234 | according to the boot-size selected in the makefile |
|
- | 235 | i.e. BOOTSZ=00 for boot-size 1024 words (2048 bytes) |
|
- | 236 | on ATmega16 |
|
- | 237 | ||
- | 238 | - enable the BOOT Reset Vector fuse (BOOTRST=0) |
|
- | 239 | ||
- | 240 | - Set the lock bits to protect the bootloader from |
|
- | 241 | SPM-writes (Boot Loader Protection Mode 2 in STK500- |
|
- | 242 | plugin) so that it can not overwrite itself. |
|
- | 243 | ||
- | 244 | - Connect the AVR UART Pins via level-shifter/inverter |
|
- | 245 | (i.e. MAX232) to your PCs COM-Port. |
|
- | 246 | ||
- | 247 | - Reset the AVR while fullfilling the bootloader start- |
|
- | 248 | condition. (Default: selected pin connected to GND). |
|
- | 249 | The condition must be "true" until you see the |
|
- | 250 | AVRPROG dialog or avrdude connects. |
|
- | 251 | ||
- | 252 | - Start AVRPROG (AVRStudio/Tools or stand-alone avrprog.exe) |
|
- | 253 | AVRDUDE is supported too, check it's manual |
|
- | 254 | for command-line options. Read the text above for |
|
- | 255 | information about Device-Types and AVRDUDE |
|
- | 256 | ||
- | 257 | - AVRPROG or AVRDUDE should detect the bootloader. |
|
- | 258 | ||
- | 259 | - see AVRStudio's online-help for more information how |
|
- | 260 | to use AVRPROG |
|
- | 261 | ||
- | 262 | - make sure to EXIT from AVRPROG (button) to start |
|
- | 263 | your main-application or toogle power/reset. |
|
- | 264 | ||
- | 265 | ||
- | 266 | Feedback welcome, Good luck. |
|
- | 267 | Martin |