Arduino-stk500v2-bootloader
Arduino-stk500v2-bootloader copied to clipboard
Fix mega2560 erase flash error
Fixes msproul#7 and makes code compatible with later avr-gcc versions.
Hex file compiled with avr-gcc 11.2.0 on FreeBSD.
Tested with 2 apps, both based on the "bigprogram" app to fill 100% of the flash. One used numbers and the other letters so that the data would be different. I can add those programs if needed but they are quite simple.
Test using older bootloader
First program
Details
Sketch uses 253952 bytes (100%) of program storage space. Maximum is 253952 bytes.
Global variables use 184 bytes (2%) of dynamic memory, leaving 8008 bytes for local variables. Maximum is 8192 bytes.
C:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/bin/avrdude -CC:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/etc/avrdude.conf -v -patmega2560 -cwiring -PCOM4 -b115200 -D -Uflash:w:C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex:i
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/etc/avrdude.conf"
Using Port : COM4
Using Programmer : wiring
Overriding Baud Rate : 115200
AVR Part : ATmega2560
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 10 8 0 no 4096 8 0 9000 9000 0x00 0x00
flash 65 10 256 0 yes 262144 256 1024 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Wiring
Description : Wiring
Programmer Model: AVRISP
Hardware Version: 15
Firmware Version Master : 2.10
Vtarget : 0.0 V
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9801 (probably m2560)
avrdude: reading input file "C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex"
avrdude: writing flash (253952 bytes):
Writing | ################################################## | 100% 37.45s
avrdude: 253952 bytes of flash written
avrdude: verifying flash memory against C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex:
avrdude: load data flash data from input file C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex:
avrdude: input file C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex contains 253952 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 28.62s
avrdude: verifying ...
avrdude: 253952 bytes of flash verified
avrdude done. Thank you.
Second program upload
Details
Sketch uses 253952 bytes (100%) of program storage space. Maximum is 253952 bytes.
Global variables use 184 bytes (2%) of dynamic memory, leaving 8008 bytes for local variables. Maximum is 8192 bytes.
C:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/bin/avrdude -CC:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/etc/avrdude.conf -v -patmega2560 -cwiring -PCOM4 -b115200 -D -Uflash:w:C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex:i
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/etc/avrdude.conf"
Using Port : COM4
Using Programmer : wiring
Overriding Baud Rate : 115200
AVR Part : ATmega2560
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 10 8 0 no 4096 8 0 9000 9000 0x00 0x00
flash 65 10 256 0 yes 262144 256 1024 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Wiring
Description : Wiring
Programmer Model: AVRISP
Hardware Version: 15
Firmware Version Master : 2.10
Vtarget : 0.0 V
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9801 (probably m2560)
avrdude: reading input file "C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex"
avrdude: writing flash (253952 bytes):
Writing | ################################################## | 100% 37.45s
avrdude: 253952 bytes of flash written
avrdude: verifying flash memory against C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex:
avrdude: load data flash data from input file C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex:
avrdude: input file C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex contains 253952 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 28.61s
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x3c000
0x04 != 0x34
avrdude: verification error; content mismatch
avrdude done. Thank you.
the selected serial port
does not exist or your board is not connected
Test using new bootloader
First program
Details
Sketch uses 253952 bytes (100%) of program storage space. Maximum is 253952 bytes.
Global variables use 184 bytes (2%) of dynamic memory, leaving 8008 bytes for local variables. Maximum is 8192 bytes.
C:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/bin/avrdude -CC:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/etc/avrdude.conf -v -patmega2560 -cwiring -PCOM4 -b115200 -D -Uflash:w:C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex:i
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/etc/avrdude.conf"
Using Port : COM4
Using Programmer : wiring
Overriding Baud Rate : 115200
AVR Part : ATmega2560
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 10 8 0 no 4096 8 0 9000 9000 0x00 0x00
flash 65 10 256 0 yes 262144 256 1024 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Wiring
Description : Wiring
Programmer Model: AVRISP
Hardware Version: 15
Firmware Version Master : 2.10
Vtarget : 0.0 V
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9801 (probably m2560)
avrdude: reading input file "C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex"
avrdude: writing flash (253952 bytes):
Writing | ################################################## | 100% 37.42s
avrdude: 253952 bytes of flash written
avrdude: verifying flash memory against C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex:
avrdude: load data flash data from input file C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex:
avrdude: input file C:\Users\Remy\AppData\Local\Temp\arduino_build_731269/bigprogram.ino.hex contains 253952 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 28.78s
avrdude: verifying ...
avrdude: 253952 bytes of flash verified
avrdude done. Thank you.
Second program upload
Details
Sketch uses 253952 bytes (100%) of program storage space. Maximum is 253952 bytes.
Global variables use 184 bytes (2%) of dynamic memory, leaving 8008 bytes for local variables. Maximum is 8192 bytes.
C:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/bin/avrdude -CC:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/etc/avrdude.conf -v -patmega2560 -cwiring -PCOM4 -b115200 -D -Uflash:w:C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex:i
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:\Developer\Tools\Arduino IDE Portable\hardware\tools\avr/etc/avrdude.conf"
Using Port : COM4
Using Programmer : wiring
Overriding Baud Rate : 115200
AVR Part : ATmega2560
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 10 8 0 no 4096 8 0 9000 9000 0x00 0x00
flash 65 10 256 0 yes 262144 256 1024 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Wiring
Description : Wiring
Programmer Model: AVRISP
Hardware Version: 15
Firmware Version Master : 2.10
Vtarget : 0.0 V
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9801 (probably m2560)
avrdude: reading input file "C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex"
avrdude: writing flash (253952 bytes):
Writing | ################################################## | 100% 37.42s
avrdude: 253952 bytes of flash written
avrdude: verifying flash memory against C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex:
avrdude: load data flash data from input file C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex:
avrdude: input file C:\Users\Remy\AppData\Local\Temp\arduino_build_3372/bigprogram-num.ino.hex contains 253952 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 28.79s
avrdude: verifying ...
avrdude: 253952 bytes of flash verified
avrdude done. Thank you.
Edit: Put avrdude output in collapsable "details" blocks.
Just want to add that I've been nearly daily using several MEGAs with this bootloader since my original PR without incident. The one I've been uploading to, I have been averaging 2-3 uploads per week minimum, hitting 10-20+ on busy weeks. I've encountered no issues.