diff options
Diffstat (limited to 'Bootloader/readme.txt')
-rw-r--r-- | Bootloader/readme.txt | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/Bootloader/readme.txt b/Bootloader/readme.txt new file mode 100644 index 0000000..b4c3486 --- /dev/null +++ b/Bootloader/readme.txt @@ -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 |