几乎所有现代Arduino板都使用Optiboot引导程序。与以前使用的ATmegaboot相比,Flash较小(大约1.5KB),上传速度更快(115.2k和57.6k),并且启动草图更快(重置后等待的延迟更短)。
是否有Optiboot引导加载程序的替代方案?具体来说,是否有更小的(用Flash术语表示)引导加载程序?他们有什么区别?
几乎所有现代Arduino板都使用Optiboot引导程序。与以前使用的ATmegaboot相比,Flash较小(大约1.5KB),上传速度更快(115.2k和57.6k),并且启动草图更快(重置后等待的延迟更短)。
是否有Optiboot引导加载程序的替代方案?具体来说,是否有更小的(用Flash术语表示)引导加载程序?他们有什么区别?
Answers:
Optiboot是大约可用的最小引导加载程序。
但是,有一个更强大的功能(带有用于硬件测试,RAM和Flash内容检查等的内置控制台),并且在avrdude和AVR引导加载程序之间具有更完善,更强大的stk500v2通信协议。
我已经在ATmega2560和ATmega1284p上使用过它。它适用于3字节和2字节程序计数器MCU。
我在Sourceforge上有一个STK500v2 Bootloader版本。
该引导加载程序基于Mark Sproul更新的Peter Fleury STK500v2引导加载程序。我进行了编辑,以使其与Goldilocks(ATmega1284p)板支持。
关键功能是使用STK500v2协议将Flash映像上传到Arduino。与avr109协议相比,该协议更强大,并且具有更好的错误处理能力。顺便说一句,avr109协议在Arduino世界中称为“ Arduino”,因为它会切换DTR(以重置板并自动进入引导加载程序),而STK500v2协议在Arduino世界中也称为“接线”,因为相同原因。
Fleury / Sproul STK500v2引导加载程序旨在与具有3字节程序寄存器的ATmega2560配合使用,因为Flash较大。但是,它也支持普通的2字节板(实际上所有其他板)。
对于带有大量闪存的板卡(例如Goldilocks 1284p),有一个硬件监视器可用于查询闪存,SRAM和硬件;您可以在不使用附加代码的情况下检查连接,并检查Flash和EEPROM的实际内容。因为1284p支持2 USART,所以我增加了在USART1上进行调试的功能,因此不会干扰通过USART0进行的上传过程。
TinySafeBoot是ATtiny和ATmega设备的替代产品。
与许多ATtinys和ATmegas兼容(见下文)
读/写访问闪存和EEPROM。
所有可用于串行通讯的IO
单线,也可以在一条线上同时具有多个AVR
自动波特率,坚固的协议。
通过重置+密码激活(可选)
密码和超时用户可以随时更改。
“紧急擦除”克服了丢失的密码-杀死所有数据,但使引导加载程序保持完整。
ATtinys:〜550个字节,
ATmegas:<512字节(!)
TSTIN for ATtiny可以自我更新。
源代码是免费软件(GPL)
是否有Optiboot引导加载程序的替代方案?
嗯...不是真的。实际上,对Optiboot进行了一个[非正式] 修改,以使其在上载时更快。
要安装高波特率变化…
- 确保Arduino IDE未运行
- 使用上面的链接下载7-Zip存档
- 将三个文件解压缩到以下目录:
{Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
- 打开位于以下目录中的boards.txt文件:
{Arduino Installation Root}\hardware\arduino\
在其中找到此部分:
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
添加以下部分...
uno_uf.name=Arduino Uno / Upload Fast uno_uf.upload.protocol=arduino uno_uf.upload.maximum_size=32256 uno_uf.upload.speed=250000 uno_uf.bootloader.low_fuses=0xff uno_uf.bootloader.high_fuses=0xde uno_uf.bootloader.extended_fuses=0x05 uno_uf.bootloader.path=optiboot uno_uf.bootloader.file=optiboot_atmega328_250000.hex uno_uf.bootloader.unlock_bits=0x3F uno_uf.bootloader.lock_bits=0x0F uno_uf.build.mcu=atmega328p uno_uf.build.f_cpu=16000000L uno_uf.build.core=arduino uno_uf.build.variant=standard
- 将两个突出显示的值更改为您计划使用的波特率:250000,500000或1000000保存并关闭boards.txt文件
- 使用您喜欢的ISP编程器,安装新的引导程序。不要忘记:确保已选择Arduino Uno / Upload Fast开发板(工具/开发板),如果合适,请确保已选择编程器的串行端口(工具/串行端口),确保已选择编程器(工具/编程器) ),安装引导程序后,将串行端口更改为Arduino Uno的串行端口。
以上文字略作修改,以与网站兼容。原始帖子
除此之外,还有ATmegaboot引导加载程序,您真的找不到其他选择。我可以想象,如果Arduino将它加载到所有生产过的Unos上,它就会进行优化。上面的技巧加快了上传时间,但并没有减小引导加载程序的大小。您也可以删除引导加载程序上的等待时间,以使其启动更快。
如果您担心最大程度地增加闪存,请参见:如何真正缩小草图,以及以下答案 [关于如果闪存或SRAM用完了怎么办?]。