跳转至

迁移公告

本文档中心已迁移至 新域名(https://document.nationalchip.com/) ,当前文档中心维护有效期至 2025年6月30日。 请更新您的书签或外部链接,感谢您的支持!

双固件启动模式*

1. 概述*

双固件启动,我们称之为 MultiBoot

MultiBoot 用于一个 flash 存两个固件的场景,默认从第一个固件启动,断电启动默认启动第一个固件。

启动完成后可以调用接口:

void SwitchAnotherFirmeware(void)

将使用看门狗重启,启动第二个固件。

两份固件合并后的镜像分布如下:

flashaddr    0                second
                              bin off
        #  * ---------------------------------
        #  * |            |   |              |
        #  * |    bin1    |   |     bin2     |
        #  * |            |   |              |
        #  * ---------------------------------

一般,我们需要正式固件和厂测固件切换,或者需要支持双模型,可以使用该功能。

2. 使用步骤*

下面以 https://gitlab.com/nationalchip/lvp_tws 上的SDK为例,进行使用介绍。

  • 下载 8002 SDK,并有一块 8002 GRUS_DEV_V1.X 开发板
  • cp configs/release/grus_gx8002b_dev_1v.config .config
  • 将该 .config 分别命名为 first.configsecond.config,并位于原来 .config 的同级目录下
  • 执行 make multiboot 编译,会生成最终两个固件合为一体的固件,位于 output/mcu_nor.bin
  • 参考 SDK 应用开发资料,实现一个触发点,比如按键或者语音唤醒,在这个触发点调用 SwitchAnotherFirmeware()
  • 通过开发板的 UART1 打印,可以看到系统重启,并切换到第2个固件了(通过系统启动打印最开始的时间打印,可以判断是哪个固件在跑)

first.config 是第1个固件的配置,second.config 是第2个固件的配置。

3. 两个不同代码仓双固件使用步骤*

下载链接

  1. 在wakeup 项目仓增加配置,作为frist 固件如下图

image-20240123111832883

保存并退出

  1. 在Talking 增加配置,作为second固件,如下图

image-20240123111842546

保存并退出

  1. DFSwitchCompil.sh 放到takling 工程目录下,修改 DFSwitchCompil.sh 脚本

image-20240123111922039

  1. 编译工程
./DFSwitchCompil.sh

总的会编译三次。使用8002D 烧录即可。