IAP 程序升级原理解析

参考见:IAP升级 资料收集-CSDN博客

一、IAP是什么?

        IAP(In Application Programming,在应用编程)是一种技术,它允许在设备运行过程中通过软件对固件进行更新。这种更新方式不需要使用特殊的硬件编程器或者移除芯片,因此也被称为在线编程或空中下载技术(OTA, Over-The-Air)。IAP升级对于物联网设备、嵌入式系统等非常重要,因为它允许在产品部署后进行功能更新或修复错误。      

二、为什么使用IAP? 

        如果芯片内没有程序的话,无法直接进行烧录。因此,在使用J-Link或其他编程器进行烧录代码时,通常情况下芯片中至少有一部分程序作为引导加载程序(Bootloader)。不过,需要注意的是,不是所有的芯片出厂时都带有内置的Bootloader。对于某些芯片,如STM32系列,它们可能包含了一个简单的Bootloader,但更多的是需要用户自己编写一个Bootloader来实现特定的固件升级功能。

        当我们购置一块STM32芯片时,它可能不自带Bootloader。在实际的工业生产中,为了实现远程固件升级,我们需要自行编写一个Bootloader来升级应用程序代码(App Code)。Bootloader的主要任务是接收和验证固件更新数据,并将其写入到闪存中适当的位置。

        Bootloader是一个小型程序,负责管理固件的更新过程。它通常包括检测更新、接收更新数据、验证数据完整性以及将新固件写入闪存等任务。App Code (User Application)是设备的主要功能实现部分,即用户编写的用于实现特定功能的代码。

         

        在闪存flash的分区上,一般建议将闪存的前64KB用来存放Bootloader程序,这部分空间不会被应用程序覆盖,以确保Bootloader始终可用。剩余的空间则用于存放应用程序代码(App Code)和其他数据。

如下面的flashboot.jlink文件设置:

USB 
si SWD
speed 4000
device R7FA6M4AD
r
erase 0x00 0xffff    # 0xffff = 65535
loadfile Boot_V1.bin 0x0
r
go
quit

在实际应用中,Bootloader可能需要实现以下功能:

  • 通过某种通信接口(如串口、USB、网络等)接收固件更新数据。
  • 验证接收到的数据(如使用CRC校验、数字签名等)。
  • 将验证过的固件数据写入到闪存的适当位置。
  • 更新完成后,重启系统并跳转到新的应用程序代码开始执行。

二、IAP升级的工作原理

IAP升级的基本思想是在设备中预先安装一个小型的程序,称为Bootloader。这个Bootloader负责管理固件的更新过程。典型的IAP升级过程包括以下几个步骤:

  1. 分区管理:

    • 通常,固件所在的闪存(Flash Memory)会被划分为多个区域。其中一个区域用于存储Bootloader,其他区域则用于存储应用程序代码(App Code)和其他数据。
  2. Bootloader的功能:

    • 检测更新: Bootloader检查是否有可用的更新文件。
    • 数据接收: 通过某种通信接口(如串口、USB、以太网等)接收更新文件。
    • 验证: 对接收到的数据进行验证,确保数据完整无误。
    • 更新: 将新的固件写入到指定的闪存区域。
    • 跳转: 更新完成后,Bootloader会跳转到新的固件地址执行更新后的代码。
  3. 应用程序代码:

    • 应用程序代码是设备的主要功能实现部分。
    • 当Bootloader完成更新后,它会跳转到应用程序代码继续执行。
  4. 异常向量表重定位:

    • 由于应用程序的起始地址可能会改变,因此在跳转到新的应用程序之前,可能需要重新定位异常向量表以确保中断和异常能够被正确处理。

三、实现IAP升级的关键技术

  • 通信协议: 选择合适的通信协议(如SPI、I2C、UART、TCP/IP等)来传输更新数据。
  • 安全措施: 保证数据传输的安全性,例如使用CRC校验、数字签名等技术来验证数据的完整性和真实性。
  • 闪存管理: 包括扇区擦除、数据写入等操作。

四、示例

以STM32单片机为例,实现IAP升级通常涉及以下步骤:

  1. Bootloader开发:

    • 编写用于接收和验证更新数据的代码。
    • 实现闪存管理和异常向量表重定位等功能。
  2. 应用程序开发:

    • 开发主应用程序代码。
  3. 通信接口配置:

    • 设置用于数据传输的通信接口。
  4. 固件更新流程:

    • 设计固件更新的整体流程,包括检测更新、接收数据、验证和更新。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值