揭秘STM32 OTA升级:轻松实现固件远程无缝更新(二)

  作者:嵌入式芯视野 时间:2025-06-11来源:今日头条

在嵌入式开发中,远程固件升级(OTA, Over-The-Air)技术早已成为产品迭代和维护的关键能力。尤其是在 STM32 系列微控制器广泛应用的今天,构建一个稳定、通用、安全的 OTA 升级系统,是每个工程师都绕不过去的一关。

本项目基于开源 OTA 工程,完整实现了以下内容:

本文重点介绍该系统的升级流程细节、Bootloader 模块结构与关键代码,以及如何使用配套打包和升级工具,实现一站式 OTA。

一、升级流程详解:Bootloader 主导 OTA 的全流程

1. 流程概述

STM32 OTA 的标准流程如下图所示:


整个流程设计注重鲁棒性与安全性,例如:

2. 进入升级模式的判定方式包括:

固件检测与处理机制

这种灵活的判断机制确保了在各种场景下都能正常触发升级,提升用户体验与维护效率。


二、Bootloader 结构设计与关键模块源码说明

 Bootloader 架构分层

整个 Bootloader 系统按以下模块划分:

模块名称

功能说明

启动判定模块

检查是否进入 OTA 模式,或跳转到 APP

Flash 操作模块

擦除/写入/读取 SPI 或 QSPI Flash

协议接收模块

通过串口接收 YModem 协议格式的固件数据

固件解析模块

解包 .fpk 固件,提取版本号、长度、CRC 等字段

固件校验模块

Magic Code 检查 + CRC32 校验

升级标志模块

管理升级状态和失败回滚标志

安全跳转模块

关闭中断、设置栈顶地址后跳转到 APP

 关键代码片段展示

启动判断逻辑:

void boot_entry(void) {    if (check_upgrade_flag() || button_pressed()) {
       enter_upgrade_mode();
   } else {
       jump_to_app();
   }
}

校验固件包头:

bool verify_firmware_header(firmware_header_t *hdr) {    if (hdr->magic != 0xDEADBEEF) return false;    if (!check_crc32(hdr)) return false;    return true;
}

跳转到 APP:

void jump_to_app(void) {    uint32_t app_addr = APP_START_ADDR;
   __disable_irq();
   __set_MSP(*(uint32_t*)app_addr);
   ((void (*)())(*(uint32_t*)(app_addr + 4)))();
}

通过上述模块组合,可以保证 Bootloader 精简、高效,并具备 OTA 所需的所有关键能力。


三、配套工具使用指南:打包器 & 固件上传助手

为实现无缝的 OTA 流程,我们提供了两套实用工具,支持命令行或 GUI 使用:


 1. 固件打包工具(Firmware_Packager)

该工具将普通 .bin 固件封装为 .fpk 固件包,自动生成校验字段,支持版本号管理。

打包命令示例:

Firmware_Packager.exe -i app.bin -o upgrade.fpk -v 1.0.3

固件包头结构(16 字节):

字段

长度

含义说明

Magic Code

4B

固件合法标志(0xDEADBEEF)

Version

4B

固件版本号,如 0x010003

Length

4B

固件数据部分大小

CRC32

4B

数据区 CRC 校验值

支持多种扩展字段,如水印、签名、时间戳等。


 2. 固件上传工具(Firmware_Uploader)

通过串口(支持 USB 转串口)将 .fpk 固件上传至设备,采用 YModem-1K 协议,兼容性强、效率高。

上传命令示例:

Firmware_Uploader.exe -p COM4 -b 115200 -f upgrade.fpk

✅ 支持特性包括:


 总结:STM32 OTA 升级不再难,实现只需三步!

本套 OTA 方案已实际运行于多个商业项目,具有以下优点:

开源网址:mOTA: 一款专为32位MCU开发的OTA组件


关键词: STM32 OTA

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版