我有一块带有ATMEGA88芯片的电路板,它有一个地址为0x1800的引导加载程序和一个地址为0x0000的固件。两者都可以访问USB。引导加载程序可以编写新固件,但现在我需要编写一个新的引导加载程序。
当然,使用AVR编程器时没问题,但也可以通过USB实现吗?我的想法是通过旧的bootloader闪存一个特殊的固件,然后可以编写一个新的bootloader。那可能吗?如果是,怎么样?
我目前的尝试并不成功。所有命令(boot_page_erase,boot_page_fill和boot_page_write)都以与引导加载程序相同的方式成功执行(唯一的区别是它开始在索引0x1800处写入而不是0x0000)但是当我重新启动设备时,旧的引导加载程序仍然存在什么都写不出来。
答案 0 :(得分:1)
ATmega88的存储器分为两部分,即读写(RWW)和非读写(NRWW)。只能从NRWW部分执行SPM命令(如果从RWW部分执行,它将无声地失败)。请参见数据表的2.2节(第6页)。 NRWW部分相当于最大可能的引导加载程序部分。
因此,要使用SPM指令重新编程引导加载程序,您需要在引导加载程序部分中至少包含一个最小的代码存根,您不会删除它并为您执行SPM指令。
答案 1 :(得分:0)
自从我玩AtMega以来已经有一段时间了,但如果引导加载程序不支持引导加载程序(谨慎的问题)或触摸内存周围的内容,那么我认为那是合乎逻辑的,那么你将无法通过引导程序geflash引导程序。
然后你必须编写一个固件(非常像引导加载程序)重写闪存。