Table of Contents

Optiboot

ATMEL STK500v1 compatible boot loader for Arduino ATMEGA328.

Build

Compile all firmware
git clone https://github.com/Optiboot/optiboot
cd optiboot/optiboot/bootloaders/optiboot/
./makeall.arduino.sh
Get firmware version
git log -n 1 --pretty=format:%H%n
0dd4cedfbd6669d47752707486d3625a911bdb12
List all firmware
md5sum *.hex
ee4b2f496e0333f95f45bb7078601d29  optiboot_atmega1280.hex
57b44fc69816e6fdbf73732b5caa12f2  optiboot_atmega1284p.hex
62bc6f118b7e0720f229c4bdde634b0c  optiboot_atmega168.hex
6a7fbf0503d47ed5db9d5d2baff317e5  optiboot_atmega168p_16MHz.hex
6a7fbf0503d47ed5db9d5d2baff317e5  optiboot_atmega168p_UART__.hex
2bb2b975f97f383909249e7157a7acb3  optiboot_atmega328.hex
3278fecadddec6c2fa11f5050b031dbb  optiboot_atmega328_pro_8MHz.hex
ec29c6363477553e94cb8d3c95987d33  optiboot_atmega32.hex
916b4c7cda8374cfc9ea61c0e370a237  optiboot_atmega88.hex
d53d8ce273525c3af14305c67df624cf  optiboot_atmega8.hex
e7c69c45143d7b31f1e4d3cef761dc7e  optiboot_bobuino.hex
62bc6f118b7e0720f229c4bdde634b0c  optiboot_diecimila.hex
0695b84ddb0017e61c327e6c2fc35a7b  optiboot_lilypad.hex
e15b4d5149f94ba277969114984b2cf9  optiboot_luminet.hex
62bc6f118b7e0720f229c4bdde634b0c  optiboot_pro_16MHz.hex
1d520857938ce8ae40eaf2b1e6eda6be  optiboot_pro_20mhz.hex
0695b84ddb0017e61c327e6c2fc35a7b  optiboot_pro_8MHz.hex
0ffe624b21c48a839a256baa4fa8a93f  optiboot_sanguino.hex
cb6b8ac98dd6d55f3a453e87722257b6  optiboot_wildfirev2.hex
2183c788feec1b79ae41cbdbd3912799  optiboot_xplained168pb.hex
68c384e8def907edca0033d6670588e0  optiboot_xplained328pb.hex
68c384e8def907edca0033d6670588e0  optiboot_xplained328p.hex
Compile specific firmware

This firmware is for a Pro Mini with an 8 MHz XTAL and a generic UNO clone at 16 MHz.

make clean
make atmega328 BAUD_RATE=115200
make atmega328_pro8 BAUD_RATE=57600
List firmware
2bb2b975f97f383909249e7157a7acb3  optiboot_atmega328.hex
9d1fc10caca488882432a01f5c96e797  optiboot_atmega328_pro_8MHz.hex

Download

optiboot_atmega328.hex

optiboot_atmega328_pro_8MHz.hex

Install

Arduino Pro Mini with 8 MHz XTAL

USBasp

avrdude -V -B 5 -c usbasp -p ATMEGA328P -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xDE:m -U lfuse:w:0xFF:m
avrdude    -B 5 -c usbasp -p ATMEGA328P -D -u -U flash:w:optiboot_atmega328_pro_8MHz.hex:i
avrdude    -B 5 -c usbasp -p ATMEGA328P -D -u -U lock:w:0x2F:m
Arduino UNO

Pololu USB AVR Programmer v2.1

avrdude -V -B 5 -P `pavr2cmd --prog-port` -c avrisp2 -p ATMEGA328P -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xDE:m -U lfuse:w:0xFF:m
avrdude    -B 5 -P `pavr2cmd --prog-port` -c avrisp2 -p ATMEGA328P -D -u -U flash:w:optiboot_atmega328.hex:i
avrdude    -B 5 -P `pavr2cmd --prog-port` -c avrisp2 -p ATMEGA328P -D -u -U lock:w:0x2F:m

Test

Arduino Pro Mini with 8 MHz XTAL
$ avrdude -c arduino -b 57600 -D -p m328p -P /dev/ttyUSB0 

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f (probably m328p)

avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.

Resources

https://www.engbedded.com/fusecalc/

https://www.engbedded.com/conffuse/