STM32的IAP升级方式

IAP是In Application Programming的首字母缩写,即在应用中编程,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。以下所说的IAP升级方式均指的是对全部固件包进行升级,不包含差分升级。

通常在进行IAP升级时要先考虑实际的存储空间大小,比如片上Flash空间大小,有没有外部存储空间等,然后再考虑升级方式及如何对Flash进行分区。

方式一:
在这里插入图片描述
如果MCU的内部Flash比较小,只够放一个Bootloader和一个App程序,并且没有外部存储时,就只能选择最简单的升级方式。这种升级方式将MCU的Flash分成3部分,Bootloader类似于电脑上的BIOS,是启动时加载的第一个软件,App即用户实际要运行业务的程序,Param用来保存一些运行时的基本参数,比如升级包大小,App版本信息,其他业务数据等。使用这种方式就只能在Bootloader中接收并处理升级包,那么Bootloader程序就相对较大。而且升级过程中App程序运行不了,如果升级过程中掉电,再次上电后只能Bootloader程序请求升级包继续升级,直到升级完成。

方式二:
在这里插入图片描述
如果MCU内部Flash可以放下一个Bootloader和一个App程序,有外部存储或者可以放下一个Bootloader和两个App程序,没有外部存储,使用这种升级方式时,获取的升级包可以缓存在App_Backup中,这样即使升级时获取数据过程中掉电,重新上电时之前的程序也不会受影响。采用这种方式可以选择在App程序中获取升级包,也可以选择在Bootloader中获取升级包。

如果选择在App程序中获取升级包,Bootloader程序就只需要在升级包获取完成后负责将App_Backup中的程序写入App区域就可以。即使说后续因项目需要,要用其他方式来获取升级包,也可以先升级原有的App程序来实现,不过因为包含有获取升级包的程序,App的程序也会变大,相应的升级时间就会变长。这时候Param中至少应该有的参数是升级包总字节数,升级包完整性标识,其他还应该有一些相应的校验等。

如果选择在Bootloader程序中获取升级包,那么在后期需要更换其他升级方式时,虽然可以使用运行中的App程序来改写原有Bootloader,但是如果出现设备掉电的情况,没有改写完成,一旦重新上电设备也就成了砖,不太可靠。

方式三:
在这里插入图片描述
设备存储空间充足而且需要在Bootloader中获取升级包时可以使用这种方式,Bootloader1是固化在MCU中的一种基本升级方式,Bootloader2可以是其他的升级方式。这时候就需要考虑获取的升级包是Bootloader2的还是App的,这样Bootloader2和App程序都可以保证程序的完整性,不过具体实现时就需要先考虑好程序的逻辑关系等,进行一定的设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值