嵌入式项目实战之固件IAP升级解决方案(示例芯片CH32V307R)

本文介绍了在CH32V307R芯片上实现固件IAP升级的详细步骤,包括在代码中添加版本信息、编译链接脚本的修改、编译脚本的设置以及固件的校验和分区管理。通过这种方法,避免了额外的打包解包过程,提高了固件升级的可靠性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嵌入式项目实战之固件IAP升级解决方案(示例芯片CH32V307R)

MCU固件IAP升级的业务主要是MCU在运行过程中,实现固件的下载,更新。编译器生成的升级的文件都是二进制的BIN文件格式,没有校验和版本管理信息。为了实现固件IAP升级过程的可靠性,我们需要加入一些固件管理信息,比如版本,固件长度,校验,型号等。曾看过一些升级方案,固件升级文件都是在BIN文件格式上增加一些前缀或后缀信息,包括了固件版本,校验信息等,俗称为“打包”。通过这种方式实现固件管理业务虽然没问题,但增加了打包解包的业务,管理起来也不够灵活。因为需要在PC端开发工具实现“打包”业务,到MCU端,MCU下载的固件包实现“解包”后,才能更新到APP加载区域。

本文提到的固件IAP方案,是把版本管理,校验等信息通过编译器编译到固件内,而不需要额外的“打包”,“解包”业务。可升级的固件一般都是MCU主程序,我们定义为APP固件。对于APP固件生成,我们做如下工作,

第一步是在代码文件中添加版本管理信息,这些信息可以直接编译到固件文件中。虽然其中的固件长度和固件校验字段值无法直接获取,我们先定义一个初始值。版本管理信息需要编译到固定地址,方便获取这些信息。示例中,我们将之分配到特定的crc段。

第二步是在编译链接脚本文件中,添加对应的段。因为中断向量表代码段长度一般都是固定的,并且必须排在代码段最前面,而主程序长度是不确定的。我们一般是将版本管理信息代码段链接在中断向量表后,主程序之前,方便寻址。

第二步是添加编译脚本,编译脚本为一般编译器支持执行的脚本文件,包括了编译前自动执行的pre-build文件和编译后自动执行的post-build文件。其中,post-bu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wayne2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值