目录

0. 相关阅读

1. 基于 bootloader 的 IAP 如何实现程序更新?

一、核心概念拆解

二、为什么需要Bootloader才能实现IAP?

三、基于Bootloader的IAP工作流程(含流程图)

阶段一:Bootloader决策

阶段二:IAP更新过程(如果条件满足)

阶段三:运行新程序

备用路径:正常启动(如果条件不满足)

四、Bootloader程序的关键技术点

五、优点与缺点

总结


0. 相关阅读

对于相关概念还不太了解的可以看我之前发过的两篇文章:

IAP:

单片机烧录方式:ISP、IAP、ICP全解析

bootloader:

STM32启动流程与bootloader全面解析:从上电复位到进入main函数

1. 基于 bootloader 的 IAP 如何实现程序更新?

一、核心概念拆解

首先,我们理解三个关键名词:

  1. MCU:微控制器,就是像STM32、GD32、NXP的Kinetis系列等这样的芯片。它是我们程序运行的载体。

  2. IAP:在应用编程。顾名思义,就是MCU在正常运行用户应用程序的过程中,能够不借助外部专用编程器(如J-Link、ST-Link),通过某种通信接口(如UART、USB、CAN、以太网等)来接收新的程序固件,并自己对自己完成程序更新的技术。

  3. Bootloader:引导加载程序。这是一段预先烧录到MCU内部Flash固定位置的小程序。它就像是MCU的“BIOS”或“启动管理器”,在MCU一上电或复位后,会最先运行。

    所以,基于BootloaderIAP,其本质就是:通过Bootloader这个“管理员”,来实现在线更新应用程序(IAP)的功能。


    二、为什么需要Bootloader才能实现IAP?

    要理解这一点,我们需要先了解MCU的正常启动流程和Flash内存布局。

    传统无Bootloader的启动流程:

    1. MCU上电。

    2. 硬件自动从Flash的起始地址(通常是0x08000000 for STM32)开始取指令执行。

    3. 这里存放的就是你的应用程序(Application App),MCU直接跳转过去运行。

      在这种情况下,如果你想更新程序,只能通过SWD/JTAG接口用下载器连接电脑来烧录,非常不方便。

      IAP的核心矛盾:

      当应用程序正在运行时,它自身无法安全地擦除和写入自己所在的那片Flash区域。这就好比你不能一边开着飞机一边给飞机换发动机。尝试这样做会导致程序崩溃。

      Bootloader的解决方案:

      Bootloader通过重新规划MCU的Flash内存空间来解决这个矛盾。

      我们人为地将Flash划分为两个不重叠的区域:

      1. Bootloader

        1. 位置:固定在Flash的起始地址。

        2. 功能:存放Bootloader程序。它负责检查更新、与外界通信、擦写Application区。

        3. 特点:这段代码通常比较小、稳定,一般不需要频繁更新。

        4. Application区

          1. 位置:紧跟在Bootloader区之后。

          2. 功能:存放我们真正的用户应用程序(比如一个平衡小车控制程序、一个智能家居设备的主程序)。

          3. 特点:这段代码是IAP更新的目标。

          4. 其他数据区(可选)

            1. 可能还会划出一小块区域用于存放系统配置参数、更新标志位等,防止更新时掉电导致数据丢失。


            三、基于Bootloader的IAP工作流程(含流程图)

            这是一个典型的IAP更新流程,结合下面的流程图会非常清晰:

            阶段一:Bootloader决策

            1. MCU启动:每次MCU上电或复位后,首先运行的必然是Bootloader。

            2. 检查更新条件:Bootloader会检查一个“更新标志”。这个标志可以来自:

              1. 主动触发:在用户程序中,通过某个指令(如串口命令UPDATE)设置一个标志(存到Flash或备份寄存器),然后重启MCU。Bootloader检测到这个标志,就知道要进入更新模式。

              2. 被动等待:Bootloader启动后,先在通信接口(如串口)上等待几秒钟,如果在这段时间内收到了电脑或手机发来的特定更新命令,就进入更新模式;如果超时未收到,则认为本次启动不需要更新。

              阶段二:IAP更新过程(如果条件满足)

              1. 进入IAP模式:Bootloader进入固件接收状态。

              2. 接收新固件:PC端或移动端的软件将新的应用程序二进制文件(.bin.hex文件)通过选定的通信接口(如UART)分包发送给Bootloader。

              3. 校验与写入:Bootloader每收到一个数据包,都会进行校验(如CRC校验),确保数据正确。然后擦除Application区对应的Flash扇区,再将新的程序数据写入到Application区。这个过程是“拆东墙补西墙”,但由Bootloader来执行是安全的,因为它不会破坏自己所在的区域。

              4. 更新完成与验证:全部数据接收并写入完毕后,Bootloader可能会再次校验整个Application区的完整性。最后,它清除“更新标志”,并执行一个关键操作——跳转到新Application的入口地址。

                阶段三:运行新程序

                1. 跳转执行:Bootloader通过修改MCU的程序计数器(PC指针),使其指向Application区的起始地址(也就是复位中断向量的位置)。MCU从此开始执行新的用户应用程序,整个更新过程结束。

                  备用路径:正常启动(如果条件不满足)

                  1. 直接跳转:如果Bootloader在开始时判断无需更新,它会直接跳转到原有的Application程序并执行,用户完全感觉不到Bootloader的存在。


                    四、Bootloader程序的关键技术点

                    1. 中断向量表重映射:Application程序的中断向量表必须进行偏移设置,告诉编译器它的中断向量表是从Application区开始的,而不是默认的Flash起始地址。

                    2. 通信协议:Bootloader和上位机之间需要定义一个简单的通信协议,包括数据包格式(包头、包号、数据长度、数据、校验和)、握手信号、超时处理等。

                    3. Flash读写操作:需要熟练运用MCU的Flash编程库,进行解锁、擦除、写入、上锁等操作。

                    4. 校验机制:必须使用校验算法(如累加和、CRC16/32)来保证数据传输和存储的准确性,防止因数据错误导致MCU“变砖”。

                    5. 跳转机制:将Application的入口地址(通常是Application区起始地址+4的第二个字,即复位中断向量地址)强制转换为函数指针,然后跳转执行。


                      五、优点与缺点

                      优点:

                      • 方便远程升级:设备部署在现场后,无需人工到场,通过网络即可完成升级。

                      • 降低成本:省去了专门的编程器和差旅成本。

                      • 提升用户体验:可以快速修复bug、增加新功能。

                        缺点:

                        • 复杂性增加:需要开发、维护Bootloader和上位机软件。

                        • 存在“变砖”风险:如果更新过程意外中断(如断电),可能导致Application区程序不完整,设备无法启动。需要有相应的保护机制(如备份双区、bootloader自身不受影响)。

                        • 占用资源:Bootloader需要占用一部分Flash和RAM空间。

                          总结

                          MCU中基于BootloaderIAP,是一种通过引入一个常驻的、可靠的“引导程序”来管理应用程序的在线更新的技术。它巧妙地利用了Flash内存分区,让Bootloader作为“更新管家”,安全地擦写和更换用户应用程序,从而实现产品的远程无线升级,是现代智能硬件设备的必备功能之一。

                          Logo

                          智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

                          更多推荐