单片机 IAP 功能进阶开发篇之BOOT升级(一)

引言

目的

主要介绍单片机 IAP 开发的设计思路,如何不使用下载烧录器的方式对单片机的程序进行升级,升级区域包括 bootloader 和用户程序的升级,升级方式有 UASRT 通信、CAN 通信和 OTA 升级。
本文目前介绍的是 bootloader 对 Bootloader 程序区升级的开发设计思路。

术语及缩写

BOOT:Bootloader 程序
APP:用户程序

参考资料


详细设计

前言

单片机程序都是在 FLASH(ROM)中,通过 单片机 IAP 功能基础开发篇之APP升级(一) 知道, APP 的程序升级是在 Bootloader 中实现的,那么 Bootloader 的程序升级是在哪实现的呢?还是 Bootloader。

实现方式

通过 Bootloader 升级 Bootloader,方法目前我了解的有两种。

Bootloader 互相升级

通过一个 Bootloader 升级另一个 Bootloader,即该程序中存在两个 Bootloader,严格来说的有三个,只不过其中一个和其他两个 Bootloader 的功能不一样,可以称其 Bootloader 的引导程序。

内存分配图如下:

MCU 分区内容描述备注
引导程序区中断向量表
引导可执行程序决定执行哪一个 Bootloader
Bootloader 1 程序区重定向的中断向量表需要软件配置
BOOT 可执行程序
Bootloader 2 程序区重定向的中断向量表需要软件配置
BOOT 可执行程序
用户程序区(APP)重定向的中断向量表需要软件配置
APP 可执行程序
数据储存区系统需要下电保存的数据可选择划分该区域
执行流程

通过引导程序,检测 Bootloader 1 和 Bootloader 2 的最新状态,校验通过后执行最新的 Bootloader ,然后再进行跳转 APP。其中 Bootloader 1 和Bootloader 2 的功能一致,不同只在于升级 Bootloader 时擦写FLASH的地址不同;
该设计方式较为复杂,需要四个独立的工程,若可实现 Bootloader 的配置,则只需要三个独立的工程即可(Bootloader 的功能相同,其他地址信息不同)

引导程序流程图

Created with Raphaël 2.2.0 开始 系统初始化 BOOT 至少一个有效 BOOT 1 符合 跳转至 BOOT 1 运行 结束 跳转至 BOOT 2 运行 yes no yes no

Boot程序流程图

仅介绍升级 boot 程序的流程图,APP可看 单片机 IAP 功能基础开发篇之APP升级(一) 的 boot 流程图,其中,升级流程一致,不同的是 BOOT 升级或 APP 升级时的校验、擦写 FLASH 地址等信息的不同。

Created with Raphaël 2.2.0 开始 系统初始化 升级请求 根据升级指令分别实现 对BOOT和APP的升级 升级完成 APP 程序存在 BOOT 退出处理 跳转至APP运行 结束 计数超时 yes no yes no yes no yes no

Bootloader 自升级

通过 Bootloader 升级 Bootloader,即该程序中只存在一个 Bootloader。
内存分配图如下:

MCU 分区内容描述备注
Bootloader 程序区中断向量表
BOOT 可执行程序
用户程序区(APP)重定向的中断向量表需要软件配置
APP 可执行程序
数据储存区系统需要下电保存的数据可选择划分该区域
执行流程

由于单片机的程序是在 Flash 中运行的,如果按照普通的做法,通过 Bootloader 自升级,则会出现在收到升级指令后,会将 Bootloader Flash 的程序全部擦除,这样就会导致程序跑飞,最后成了“板砖”。
要实现 Bootloader 自升级,而且需要保证不会因为擦除了FLASH导致程序无法运行,就需要将程序运行在 RAM 中,在 RAM 中擦除 FLASH 的程序,并不影响 RAM 中的程序执行,即在程序启动后,需要将 Bootloader 的程序拷贝至 RAM 中执行。

当然并不是在程序中简单的通过拷贝函数将 FLASH 的程序拷贝到 RAM 中就可以了,而是需要通过修改链接文件,甚至还需要修改启动文件等才能实现该功能

Boot程序流程图

Created with Raphaël 2.2.0 开始 将 Boot FLASH 的程 序拷贝至 RAM 中 系统初始化 升级请求 升级中 升级完成 APP 程序存在 BOOT 退出处理 跳转至APP运行 结束 计数超时 yes no yes no yes no yes no

实现方式对比

Bootloader 互相升级

优点

  • 系统升级功能稳定,基本不会出现升级失败后成为“板砖”
  • 不用担心 RAM 的大小

缺点

  • 实现复杂,至少三个独立工程(如果 boot 不能配置,则四个)
  • FLASH 需要较大的内存

使用场景

  • BOOT 升级需求度高,BOOT 的更新迭代相对多一点
  • 对 BOOT 升级的稳定性比较严格,OTA 升级等

Bootloader 自升级

优点

  • 适用于 FLASH 不够大的MCU
  • 功能实现相对简单,两个独立工程

缺点

  • 系统升级功能不稳定,升级失败后若断电,则会成为“板砖”(只要不断电,就可以反复升级直到成功)
  • RAM 太小不适合(bootloader的程序大小小于 RAM 大小,且相关变量也占用了 RAM 空间)

使用场景

  • BOOT 升级需求度低,BOOT 的更新迭代基本不需要
  • 对 BOOT 升级的稳定性没有过度严格,每次升级都至少保证现场有开发人员,防止升级失败成“板砖”
  • 7
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 51单片机iap(In-Application Programming)在线升级是一种在单片机系统中通过编程的方式对在线设备进行升级的技术。 通过IAP技术,在单片机系统运行的过程中,对内部存储器进行读取和修改,并将新的程序代码下载到内存中,从而实现在线升级IAP不需要擦除内存,能够有效地避免数据丢失,提高系统的稳定性和安全性。 51单片机IAP在线升级技术可以在系统运行时进行程序升级,更新新的功能,增强系统性能,并具有快速、灵活、方便的特点。但是,IAP技术需要对硬件进行支持,如双系统设计和FLASH存储器等。 因此,在进行51单片机IAP在线升级时,需要根据硬件支持条件选择不同的技术实现方案。同时,在进行在线升级时,需要注意保护程序的完整性和安全性,以免出现不良影响。 总之,51单片机IAP在线升级技术是一种便捷、灵活、高效、先进的升级方式,广泛应用于各类嵌入式系统中,有利于实现软件功能的快速升级和系统的优化。 ### 回答2: 51单片机指的是一种基于Intel 8051指令集的单片机,它是广泛应用于嵌入式系统中的一种芯片。而IAP(In-Application Programming)在线升级则是指在不需要任何外部设备的情况下,通过程序自身对芯片中的代码进行更新。 在51单片机中,实现IAP在线升级需要结合程序设计和硬件电路设计两个方面。首先,程序中需要预留出一定的存储空间,用于存储升级程序的代码。其次,需要设计一个与单片机相连的串行接口,如UART或SPI等,以便实现与外界通信,接收升级程序的数据。 整个IAP升级的流程如下:首先,单片机在运行过程中通过串口接收到升级程序的数据,将数据暂存至内部存储器。然后,单片机停止当前程序执行,切换到专门的IAP程序,读取内部存储器中的升级程序数据,并将其写入到指定的程序存储区。最后,单片机重新启动程序执行,完成升级。 通过IAP在线升级技术,可以大大简化芯片升级的操作流程,并节省升级的时间和成本,适用于各种嵌入式场景的应用。 ### 回答3: 51单片机iap在线升级是通过网络或串口实现对51单片机程序的在线更新和升级。它可以通过服务器端的推送或客户端的请求,将新的程序固件通过网络传送到目标单片机,然后在单片机中通过IAP(In-Application Programming)实现程序的自我升级。这种在线升级方式可以极大地简化单片机的维护和升级,提升单片机的灵活性和可用性。它适用于广泛的应用场景,如远程设备控制、智能家居、远程医疗等。同时,为了保证在线升级的安全性和准确性,需要特别注意数据传输的可靠性和过程的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大橙子疯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值