迁移公告
本文档中心已迁移至
新域名(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.config
和second.config
,并位于原来 .config 的同级目录下 - 执行
make multiboot
编译,会生成最终两个固件合为一体的固件,位于 output/mcu_nor.bin - 参考 SDK 应用开发资料,实现一个触发点,比如按键或者语音唤醒,在这个触发点调用
SwitchAnotherFirmeware()
- 通过开发板的 UART1 打印,可以看到系统重启,并切换到第2个固件了(通过系统启动打印最开始的时间打印,可以判断是哪个固件在跑)
first.config 是第1个固件的配置,second.config 是第2个固件的配置。
3. 两个不同代码仓双固件使用步骤*
- 在wakeup 项目仓增加配置,作为frist 固件如下图
保存并退出
- 在Talking 增加配置,作为second固件,如下图
保存并退出
- 将 DFSwitchCompil.sh 放到takling 工程目录下,修改 DFSwitchCompil.sh 脚本
- 编译工程
./DFSwitchCompil.sh
总的会编译三次。使用8002D 烧录即可。