Optiboot引导加载程序有哪些替代方案?


12

几乎所有现代Arduino板都使用Optiboot引导程序。与以前使用的ATmegaboot相比,Flash较小(大约1.5KB),上传速度更快(115.2k和57.6k),并且启动草图更快(重置后等待的延迟更短)。

是否有Optiboot引导加载程序的替代方案?具体来说,是否有更小的(用Flash术语表示)引导加载程序?他们有什么区别?

Answers:


8

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进行的上传过程。


这似乎是FreeRTOS的一部分,引导加载程序是否完全独立于FreeRTOS?
jfpoilpret 2014年

1
它是完全独立的。引导加载程序用于写入任何内容的闪存。FreeRTOS在main()启动之后出现。我只是将其保存在同一存储库中。我没有写,只是出于我的目的进行了修改。
feilipu 2014年

这似乎很有趣;如果您可以在答案中总结Bootloader的重要功能,这将很有用:Flash的大小,最大上传速度,可以使用的Arduino公猪以及有关硬件测试的更多详细信息)。
jfpoilpret 2014年

它(基于)由Mark Sproul更新的Peter Fleury STK500v2引导程序。我进行了编辑,以使其与Goldilocks(ATmega1284p)板支持。关键功能是使用STK500v2协议将闪存映像上传到Arduino。与avr109协议相比,该协议更强大,并且具有更好的错误处理能力。顺便说一句,avr109协议在Arduino世界中称为“ Arduino”,因为它会切换DTR(以重置板并自动进入引导加载程序),而STK500v2协议在Arduino世界中也称为“接线”,因为相同原因。
feilipu 2014年

1
感谢您提供信息,我已经更新了您的信息,因为我认为这些信息应直接作为您答案的一部分。如果您认为合适,请随时添加更多信息!
jfpoilpret 2014年

3

TinySafeBoot是ATtiny和ATmega设备的替代产品。

  • 与许多ATtinys和ATmegas兼容(见下文)

  • 读/写访问闪存和EEPROM。

  • 所有可用于串行通讯的IO

  • 单线,也可以在一条线上同时具有多个AVR

  • 自动波特率,坚固的协议。

  • 通过重置+密码激活(可选)

  • 密码和超时用户可以随时更改。

  • “紧急擦除”克服了丢失的密码-杀死所有数据,但使引导加载程序保持完整。

  • ATtinys:〜550个字节,

  • ATmegas:<512字节(!)

  • TSTIN for ATtiny可以自我更新。

  • 源代码是免费软件(GPL)


有谁知道TSB与Optiboot相比如何?最近一次更新似乎至少在2年前...
约翰尼,为什么

1

是否有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用完了怎么办?]。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.