1

我有一块带有 ATMEGA88 芯片的电路板,它的引导加载程序位于地址 0x1800,固件位于地址 0x0000。两者都可以访问 USB。引导加载程序可以编写新固件,但现在我需要编写新的引导加载程序。

当然,这在使用 AVR 编程器时没有问题,但是否也可以通过 USB 执行此操作?我的想法是通过旧的引导加载程序刷新一个特殊的固件,然后可以编写一个新的引导加载程序。那可能吗?如果是,如何?

我目前的尝试没有成功。所有命令(boot_page_erase、boot_page_fill 和 boot_page_write)都以与引导加载程序相同的方式成功执行(唯一的区别是它从索引 0x1800 而不是 0x0000 开始写入)但是当我重新启动设备时,旧的引导加载程序仍然存在所以没有真正写入闪存。

4

2 回答 2

1

ATmega88 的内存分为两部分,Read-While-Write (RWW) 和 Non-Read-While-Write (NRWW)。只有从 NRWW 部分才能执行 SPM 命令(如果从 RWW 部分执行,它会静默失败)。请参阅数据表的第 2.2 节(第 6 页)。NRWW 部分相当于最大可能的引导加载程序部分。

因此,要使用 SPM 指令重新编程引导加载程序,您需要在引导加载程序部分中至少有一个最小的代码存根,您不要删除它并为您执行 SPM 指令。

于 2011-03-07T17:35:19.473 回答
0

自从我玩 AtMega 以来已经有一段时间了,但在我看来,如果引导加载程序不支持更换引导加载程序(谨慎的问题)或触摸它周围的内存,那么你将无法对引导加载程序进行 gflash,这似乎是合乎逻辑的通过引导加载程序。

然后,您必须编写一个固件(非常像引导加载程序)来重写闪存。

于 2011-03-07T14:51:47.217 回答