单片机BootLoader的通用实现方式(备份升级,永不挂机)

背景介绍

实现方式

分区划分

将整个flash分区化为为

  • 参数区:存储升级过程状态标志位,升级信息,其他升级参数等
  • boot区:存放BootLoader程序
  • app区:存放app程序
  • app备份区:存放app程序的备份

修改链接脚本

链接脚本的修改方式每个单片机都不一样,这里只是介绍一种通用的升级思路,具体修改方法自行百度

硬件相关驱动代码的实现

根据具体的单片机实现以下相关代码

  • flash读写
  • 复位:可以操作软件复位寄存器,也可以开启看门狗故意饿死狗实现复位
  • 程序跳转:可以参考汇编中跳转到main的代码实现,或者使用C语言函数指针强制跳转
  • 固件接收:一般是一种通讯接口,实现把固件接收下载,如串口、spi、网络等相关通讯接口

升级逻辑实现(重点)

  • 通过上位机或其他CPU或者网络像app程序

为了BootLoader稳定可靠,采用以下逻辑实现
App程序中的操作:
App程序在空闲任务中将BootLoader参数区第一个字节(以下简称标志)清除,即置0,当收到opencpu发送的升级请求后,执行app程序备份操作,首先校验app分区和备份分区的md5值,如果不一致,将app主分区的应用程序完整的拷贝到备份区,之后将标志位设置为1,请求复位。

BootLoader程序操作:
BootLoader程序启动后判断参数时候为0,如果为零说明不需要升级,直接跳转到app主分区执行程序,为1则证明需要升级,执行相关的初始化操作同时将标志位设置为2开始执行升级程序,接收到的app二进制程序直接写入app主分区flash中,接收完毕后进行校验,若md5校验成功将标志位设置为3,表示尝试跳转到主分区执行,当BootLoader检测到标志位为3时,将标志位设置为2,尝试跳转到主分区执行,若执行成功,app程序会在空闲时间将标志位清除,若执行失败,引发看门狗复位后,BootLoader将检测到标志位2,开始异常处理,执行回滚操作,将备份分区的程序拷贝到主分区继续执行。

BootLoader逻辑状态转换表如下图所示

BootLoader状态标志描述 BootLoader状态标志改变该状态下操作
0不需要升级直接跳转应用程序0 / 1进入应用程序运行正常设置标志为 0,等待发送升级指令,接收到上位机的升级指令后,先把当前app分区程序拷贝到备份分区,然后设置标志为 1,进入BootLoader升级
1进入BootLoader程序开始升级2 / 3进入升级状态设置标志为 2,刷写校验通过后设置标志为 3
2表示升级程序异常处理,如突然断电、主分区程序错误等,执行回滚4拷贝备份区程序到主程序分区并跳转到app
3尝试跳转到主分区2 / 0尝试跳转到主分区执行设置标志为 2,跳转到app程序执行成功,app程序设置标志为 0
4回滚失败1进入BootLoader发送特殊指令,等待app写入。(该状态一般不会存在,作为异常处理)
  • 7
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
单片机bootloader是一段特定的程序代码,位于单片机的内部存储器中,用于引导其他程序的运行。它的主要作用是在单片机上电后首先运行,负责初始化硬件和软件环境,并将应用程序从外部存储器中加载到内部存储器中运行。 单片机bootloader通常由单片机厂商提供或开发,具有以下几个功能: 1. 硬件初始化:bootloader负责初始化单片机的各个硬件模块,包括时钟、中断、IO口等,确保单片机正常工作。 2. 外部存储器访问:bootloader能够读取外部存储器,如闪存、EEPROM等,从中加载应用程序到内部存储器中,实现程序的更新或更换。 3. 应用程序验证:bootloader可以对外部存储器中的应用程序进行验证,确保其完整性和正确性,避免加载错误的程序导致单片机异常甚至损坏。 4. 应用程序跳转:当应用程序加载完成后,bootloader会将控制权转交给应用程序,让其开始正常运行。这通常通过设置程序计数器(PC)来实现。 5. 通信接口支持:bootloader通常会提供一些通信接口,如串口、CAN总线等,以便与外部设备进行通信,例如PC机进行升级或调试。 单片机bootloader的设计与应用相当重要,它能够方便地对单片机进行在线升级、故障恢复和软件调试。同时,它也要求在尽可能小的存储空间内实现各种功能,并保证安全性和稳定性。因此,bootloader的设计需要仔细考虑各种情况和要求,以满足不同应用场景下的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值