當參照Arduino官方的電路設計自己做板卡的時候,Arduino官方提供的bootloader可能無法滿足需求,要定制自己的bootloader,下面就是具體步驟
1. 生成自己的bootloader: [這里使用的是optiboot, in arduino-1.0.5-r2, by aka WestfW]
在 arduino-1.0.5-r2\hardware\arduino\bootloaders\optiboot 目錄的makefile中找到:
atmega328: TARGET = atmega328 atmega328: MCU_TARGET = atmega328p atmega328: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' atmega328: AVR_FREQ = 16000000L atmega328: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe atmega328: $(PROGRAM)_atmega328.hex atmega328: $(PROGRAM)_atmega328.lst atmega328_isp: atmega328 atmega328_isp: TARGET = atmega328 atmega328_isp: MCU_TARGET = atmega328p # 512 byte boot, SPIEN atmega328_isp: HFUSE = DE # Low power xtal (16MHz) 16KCK/14CK+65ms atmega328_isp: LFUSE = FF # 2.7V brownout atmega328_isp: EFUSE = 05 atmega328_isp: isp
緊隨其后添加如下內容:
# Atmega328p target 16Mhz for DIY Board with baud rate 14400 atmega328DIY: TARGET = atmega328p_DIY atmega328DIY: MCU_TARGET = atmega328p atmega328DIY: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=14400' atmega328DIY: AVR_FREQ = 16000000L atmega328DIY: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe atmega328DIY: $(PROGRAM)_atmega328DIY.hex atmega328DIY: $(PROGRAM)_atmega328DIY.lst atmega328DIY_isp: atmega328 atmega328DIY_isp: TARGET = atmega328p_DIY atmega328DIY_isp: MCU_TARGET = atmega328p # 512 byte boot, SPIEN atmega328DIY_isp: HFUSE = DE # Low power xtal (16MHz) 16KCK/14CK+65ms atmega328DIY_isp: LFUSE = FF # 2.7V brownout atmega328DIY_isp: EFUSE = 05 atmega328DIY_isp: isp
在目錄arduino-1.0.5-r2\hardware\arduino\bootloaders\optiboot\中,執行命令:
omake atmega328DIY
這樣,就在optiboot目錄中生成文件:optiboot_atmega328DIY.hex,optiboot_atmega328DIY.lst, hex 文件即為atmega328p所需要的bootloader。
在 中的boards.txt找到
############################################################## uno.name=Arduino Uno uno.upload.protocol=arduino uno.upload.maximum_size=32256 uno.upload.speed=115200 uno.bootloader.low_fuses=0xff uno.bootloader.high_fuses=0xde uno.bootloader.extended_fuses=0x05 uno.bootloader.path=optiboot uno.bootloader.file=optiboot_atmega328.hex uno.bootloader.unlock_bits=0x3F uno.bootloader.lock_bits=0x0F uno.build.mcu=atmega328p uno.build.f_cpu=16000000L uno.build.core=arduino uno.build.variant=standard ##############################################################
緊隨其后,添加如下內容:
############################################################## DIYBoard.name=Arduino DIYBoard DIYBoard.upload.protocol=arduino DIYBoard.upload.maximum_size=32256 DIYBoard.upload.speed=115200 DIYBoard.bootloader.low_fuses=0xff DIYBoard.bootloader.high_fuses=0xde DIYBoard.bootloader.extended_fuses=0x05 DIYBoard.bootloader.path=optiboot DIYBoard.bootloader.file=optiboot_atmega328DIY.hex DIYBoard.bootloader.unlock_bits=0x3F DIYBoard.bootloader.lock_bits=0x0F DIYBoard.build.mcu=atmega328p DIYBoard.build.f_cpu=16000000L DIYBoard.build.core=arduino DIYBoard.build.variant=standard ##############################################################
重啟IDE后,就可以看到相應的板卡了
最后,就可以在IDE中選擇自己的板卡及其相應的串口號,使用ISP下載bootloader到Atmega328p中。
完成。
主要參考資料:http://www.geek-workshop.com/thread-1535-1-1.html 【作者:zcbzjx】