0,0 → 1,267 |
|
====================================================== |
|
ATMEL AVR UART Bootloader for AVR-GCC/avr-libc |
|
by Martin Thomas, Kaiserslautern, Germany |
mthomas@rhrk.uni-kl.de |
eversmith@heizung-thomas.de |
http://www.siwawi.arubi.uni-kl.de/avr_projects |
|
** Addtional code and improvements contributed ** |
** by Uwe Bonnes, Bjoern Riemer and Olaf Rempel. ** |
|
Eearly versions of this bootloader-code have been |
based on the AVR Butterfly bootloader-source REV02 |
which has been available from atmel.com. |
|
====================================================== |
|
|
Programming-Software (on the "PC-Side"): |
|
* AVRProg (included in AVRStudio) available at www.atmel.com. |
MS-Windows only. AVRProg can be used as stand-alone application. |
(avrprog.exe) |
|
* avrdude available at http://savannah.nongnu.org/projects/avrdude/ |
"Multiplattform" |
|
* Installation instructions at the end of this file. |
|
|
3. Dec. 2008 - Version 0.85 |
|
* disable U2X before jump to app as suggested be Alexander Döller |
* moved UBRR-macros to main.c and changed them. Inspired by code from avr-libc setbaud. |
(macros which are commented out (//) are from Pavel Fertser) |
|
6. Nov. 2008 - Version 0.84 |
|
* Added definitions for ATmega64 provided by Pavel Fertser - Thanks. |
|
12. Apr. 2008 - Version 0.83 |
|
* Added definitions for ATmega644P and ATmega324P |
* Tested with ATmega324P, gcc 4.2.2, avr-libc 1.4.6 |
* Added testapp to verify "exit bootloader" with |
watchdog (n.b.: watchdog-disable called early in testapp) |
|
27. Jan. 2007 - Version 0.82 |
|
* Added definitions for ATmega644. |
* Using avr-lib's eeprom-functions (old "direct-access"-code |
has not been compatible with ATmega644). |
* Watchdog-disable at startup (configurable): avoids problems with |
repeated login to bootloader. Not needed if the bootloader is |
never re-entered again between an "exit programming" and |
a system-reset/power-toogle. |
* Additional watchdog disable-function for ATmega644. |
* Made watchdog-enable time at exit-programming a configuration-value |
(define). |
* Bootloader read-protection: if enabled the bootloader fakes |
an empty boot-section (configurable by define) |
Since more of the avr-libc functions's are used this version |
should be more portable for other AVRs but the size of the |
binary increases a little bit. |
Make sure to disable the watchdog early in the user-application |
esp. when using a "modern" AVR (i.e. ATmega48/88/168/644/324P/644P). |
|
3. Dec. 2006 - Version 0.81 |
|
* Added definitions for ATmega162. |
* Fixed init for double-speed (bitmask). Thanks to Bernhard Roth |
|
28. May 2006 - Version 0.8beta3 |
|
* Supports discarding of interrupt-vectors which saves some space |
if no interrupts are needed in the bootloader. Added option |
in makefile to enable this feature, modified LDFLAGS, |
additional code in main.c for a pseudo default_interrupt ISR. |
The modified linker-scripts have been contributed by |
Olaf Rempel (basicly just the .vector-section is not linked). |
* Reverted the order of signatur-byte-numbers in part- |
configurations to the usual order in the datasheet, |
also reverted in main.c for sending the signature. |
* Definitions for lock/fuse-readout. |
* Updated installation-instruction at the end of this file. |
* Added DEVTYPE_ISP/DEVTYPE_BOOT to part-configurations, |
added configuration-option for this in main.c. |
* A remark about the DEVTYPE: Usualy there are two |
Part-Codes/Device-Codes. One is for ISP: AVRProg shows |
the type of the AVR. The other code is for bootloading: |
AVRprog shows the type plus "BOOT". When a boot-device-code |
gets detected by AVRprog it "knows" how do handle the |
limited functionality of bootloaders. (When receiving the |
ISP-code AVRProg expects an AVR910-type programmer.) |
The offset between the codes is usualy 0x01 where the |
ISP-code is the smaller value, i.e. ATmega32 ISP-code |
is 0x72->"ATmega32" and boot-code is 0x73->"ATmega32 BOOT". |
When using avrdude the bootloader's device-code must match |
the device-code in the avrdude.conf. Check the avrdude- |
code to see if both codes (AVR910 and AVR109) are supported. |
-- I have got some e-mails from users which have been |
confused by this. Hopefully this explanation is good enough. |
* This bootloader lets the watchdog do a reset when the |
user selects "Exit programmer" (i.e. in AVRProg) after an |
update. Make sure to disable or reset the watchdog early in |
your application. |
|
27. May 2006 - Version 0.8beta2 |
|
* More very well done improvements contributed by Olaf Rempel. |
* Olaf Rempel also modified the STARTUP_WAIT method. |
|
21. May 2006 - Version 0.8beta |
|
* Version contributed by Olaf Rempel. He has done a lot of modifications. |
-> "cleaner code", smaller binaries. |
|
09. Feb. 2006 - Version 0.75 |
|
* additional STARTUP_WAIT support contributed by Bjoern Riemer |
|
18. Aug. 2005 - Version 0.74 |
|
* AT90CAN128 support contributed by Uwe Bonnes |
* Makefile modifications contributed by Uwe Bonnes |
|
23. Feb. 2005 - Version 0.7 |
|
* (Version 0.6 has never been available on the web-page) |
* ATmega128 support |
* code cleanup |
* This version has been tested with ATmega8, ATmega32 and |
ATmega128 |
|
7. Apr. 2004 - Version 0.5 |
|
* added different startup-methods |
* compatible with ATmega8 now |
* included makefile adapted to ATmega8 now |
(ATmega16 options still available) |
* fixed jump to application which did not work |
reliably before |
* tested with ATmega8 |
* minimal options and startup-code result in |
bootloader-size < 512 words |
|
6. Apr. 2004 - Version 0.4 |
|
* Buffered read of chars from UART during programming |
since eeprom-write is too slow for unbuffered |
operation. So EEPROM-upload does work now. |
* Added BOOTICE-mode to flash JTAGICE-compatible |
hardware (ATmega16@7,3Mhz) (if you know about BOOTICE, |
you may unterstand why this has been added, if not |
just keep the option disabled) |
* small changes in (my)boot.h (lock-bit-mask) found |
out during the development of the STK-500-compatible |
bootloader. But setting lock-bits still does not |
work with this bootloader. |
* read of the low-fuse byte works (high byte still TODO) |
* read of the lock-byte works (write still TODO) |
|
27. Mar 2004 - Version 0.3 |
|
Felt that as much functions from avr-libc's boot.h |
as possible should be used without modifications. |
Latest CVS-version of boot.h is included. |
Only the read-routine is still "self-made" based |
on ATMELs assembler-code. |
EEPROM write on Mega16 does not work (and did not |
work with V0.2 too). May be caused by my old Mega16 |
chip. Needs testing. Flash read/write and EEPROM |
read works. Still only tested with ATmega16. |
This version may not work with the ATmega169 any |
more. |
|
24. Mar 2004 - Version 0.2 |
|
During the development of a data-logger application |
with the AVR-Butterfly there was a need to make |
some changes in the bootloader. The same problem |
again: no IAR compiler. The same way to solve the |
problem: a port of the code to avr-gcc/avr-libc. |
So this code is based on the ATMEL Butterfly |
bootloader source code Rev 0.2 for IAR. |
|
The bootloader-port for the Butterfly which mimics |
the complete functionality of the original |
BF-bootloader is availabe at: |
www.siwawi.arubi.uni-kl.de/avr_projects |
|
Atmel used a separate "lib" written in "pure" |
assembly to access the low-level functions |
for flash read/write. Well, so far I |
don't know how to use "mixed language sources" |
with the avr-gcc toolchain, so the low-level |
routines have been implemented as inline assembler. |
The avr-libc boot.h module written by Eric |
Weddington served as a template Three of the four |
low-level routines found in lowlevel.c come from |
boot.h with minimal changes. The read routine has |
been developed based on the ATMEL assembler code. |
|
Ignore the fuse and lock-bit readout. Read and Set is |
not enabled (TODO). |
|
|
--------------- Installation ----------------- |
|
- Change the MCU type in the makefile. |
|
- Change the boot(loader)-size in Makefile. The needed |
space depends on the features selected in main.c |
|
- Set baudrate in main.c, a doublespeed configuration-option |
is available too. |
|
- Change the F_CPU in main.c to the clock-frequency |
of your board. See the datasheet for frequencies |
with minimum error at the selected baudrate. |
|
- Select the start-condition in main.c. |
|
- Please use at least avr-gcc 3.3.1/avr-libc 1.0 |
or WINAVR Sept. 2003 or later to compile and link |
this bootloader. |
|
- Upload the hex-File to the AVR (STK500, STK200, SP12 |
evertool, AVR910 etc.) |
|
- Program the "Boot Flash section size" (BOOTSZ fuses) |
according to the boot-size selected in the makefile |
i.e. BOOTSZ=00 for boot-size 1024 words (2048 bytes) |
on ATmega16 |
|
- enable the BOOT Reset Vector fuse (BOOTRST=0) |
|
- Set the lock bits to protect the bootloader from |
SPM-writes (Boot Loader Protection Mode 2 in STK500- |
plugin) so that it can not overwrite itself. |
|
- Connect the AVR UART Pins via level-shifter/inverter |
(i.e. MAX232) to your PCs COM-Port. |
|
- Reset the AVR while fullfilling the bootloader start- |
condition. (Default: selected pin connected to GND). |
The condition must be "true" until you see the |
AVRPROG dialog or avrdude connects. |
|
- Start AVRPROG (AVRStudio/Tools or stand-alone avrprog.exe) |
AVRDUDE is supported too, check it's manual |
for command-line options. Read the text above for |
information about Device-Types and AVRDUDE |
|
- AVRPROG or AVRDUDE should detect the bootloader. |
|
- see AVRStudio's online-help for more information how |
to use AVRPROG |
|
- make sure to EXIT from AVRPROG (button) to start |
your main-application or toogle power/reset. |
|
|
Feedback welcome, Good luck. |
Martin |