单片机的几种ota内存分区表介绍

前言

在做项目时,现在越来越多被要求单片机要支持升级功能。需求变化快,固件要不断支持新的功能,手动人工去烧固件越来越显得麻烦,已经操作成本高。

典型的方式是通过单片机外接的蓝牙、wifi等无线模块,或者通过单片机的上位机通过网络接收升级固件等方式来实现单片机升级的硬件通路。

单片机升级,就涉及到了单片机的内存分区。这里介绍下,常用的几种典型的分区方式。

1、BootLoader+APP方式

这种方式是将单片机的flash划分为3个分区。如下图。
在这里插入图片描述
涉及到升级,BootLoader分区都是必需的。参数区用于保存app需要用到的一些参数,已经升级相关参数。

开机启动过程

BootLoader 启动,跳转到APP分区的main函数运行。

升级过程
1、APP程序收到升级命令,将要升级的标志位存入parameter分区,然后跳转到BootLoader的main函数执行。
2、BootLoader运行后检测到parameter分区的升级标志位后,就将APP分区擦除。
3、BootLoader一帧一帧接收升级数据,然后写入APP分区
4、所有升级数据写入完成后,清除升级标志位,再跳转到App分区
5、固件升级完成。

这种方式的缺点很明显,APP分区容易挂掉,如果升级过程中掉电,或者通信异常了,单片机将不能正常运行到app分区。

应用场景
只适用于flash非常小的单片机,且如果升级过程有bug,还是需要人工刷BootLoader。除非万不得已,不要采用这种分区方式,可以直接更换flash更大的单片机。

2、BootLoader+APP+OTA分区方式

在这里插入图片描述
OTA分区存放最新的固件。其升级过程如下:
1、APP中收到升级命令,然后擦除OTA分区。
2、APP中接收升级固件,并一帧一帧写入OTA分区。
3、写入完毕后,将升级标志位写入Parameter分区。
4、APP只直接调用系统重启函数,通过触发复位来重启。
5、BootLoader读取到升级标志位,然后擦除APP分区。
6、擦除完毕后,将OTA分区固件搬运到APP分区
7、搬运完毕后,清除升级标志位,然后跳转到APP分区

这种方式是APP来接收固件,更为方便,修复升级bug,只需要升级一个版本即可,不需要人工刷BootLoader

如果要实现实时版本回滚,可以再增加一个OTA1分区用于存储升级前的固件。

3、BootLoader+APP+Backup分区方式

在这里插入图片描述

Backup分区存放升级前的固件。其升级过程如下:
1、1、APP程序收到升级命令,将要升级的标志位存入parameter分区,然后跳转到BootLoader的main函数执行。
2、BootLoader运行后检测到parameter分区的升级标志位后,就将Backup分区擦除。
3、擦除完毕后,将APP分区搬运到Backup分区。
4、搬运完毕后,擦除APP分区。
5、BootLoader读取到升级标志位,然后擦除APP分区。
3、BootLoader一帧一帧接收升级数据,然后写入APP分区
4、所有升级数据写入完成后,清除升级标志位,再跳转到App分区。

该方式的优势是,可以实现回滚功能。如果升级失败,重启会把backup分区再次搬运到APP分区。

3、BootLoader+APP+APP1分区方式

在这里插入图片描述
这种方式采用的双APP的方式。升级的过程如下:
1、当前运行在APP分区,收到升级命令后,就把APP1分区擦除掉
2、APP中将收到的固件写入APP1分区
3、写入完毕后跳转到APP1分区。
同理如果当前是在APP1,就会把固件写入APP然后跳转到APP运行。

这种方式比较复杂,每次编译都需要编译两个固件,固件版本一致,唯一的区别是中断向量表的首地址不一样,分别对应APP和APP1分区,且APP分区的固件不能放入APP1,否会会因为中断向量表与实际位置不符,造成运行出错。

这种方式优势也很明显,回滚,不需要操作flash,只需要跳转分区即可。同时这种可靠性最高,不存在挂掉的可能性,因为任何一个时候都有一个分区是可以正常运行的。只有升级完成后,才会跳转到新分区,否则就继续在当前分区运行。并且升级完成后,直接跳转,不需要重启单片机。

这种方式一般用于可靠性要求非常高的场合。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值