ZHCU755D August 2022 – December 2022
在无法重新映射闪存组的情况下,每个闪存组都映射到一个固定的存储器地址。在 LFU 期间,固件可执行文件会编程到当前不活动的闪存组中,而应用程序继续从当前活动的闪存组运行。在使用该方法时,用户需要知道其固件可执行文件的目标闪存组。因此,用户需要为其工程维护 2 个链接器命令文件(如果用户使用 2 个闪存组)。这可能很麻烦,因此,此处提出并实施了一种替代解决方案。
在该方法中,固件可执行文件始终构建为加载到闪存组 1 中并从闪存组 0 运行。这可以只用一个链接器命令文件来完成。与应用程序中的函数加载到闪存中并从 RAM 运行以提高性能类似,此处也需要一个存储器副本。这是在 LFU 引导加载程序(即闪存内核)中实现的。完成闪存组 1 到组 0 的存储器复制大约需要 1 秒的时间。
如前所述,该示例可以用作 FOTA 的参考,有几个功能特性没有实现:
回滚 – 要支持回滚,需要先从闪存组 0 复制到闪存组 2,然后再从组 1 复制到组 0。这可以完全按照闪存内核中展示的组 1 到组 0 复制的方式完成。
复位 – 该示例在组 1 到组 0 复制之后不实现完整的器件复位。这就是 FOTA 的工作方式。在该示例中,存储器复制完成后,闪存内核直接跳转到应用程序的入口点,在此处调用 c_int00,然后调用 main()。