新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 揭秘STM32 OTA升级:轻松实现固件远程无缝更新(二)

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

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

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

本文引用地址:https://www.eepw.com.cn/article/202506/471235.htm

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

  • Bootloader 启动逻辑及升级流程

  • 固件打包机制(含安全校验)

  • 上位机串口升级工具(YModem 协议)

  • SPI/QSPI Flash 分区管理

  • 多种异常处理机制:断电保护、CRC 校验失败、回滚机制等

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

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

1. 流程概述

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


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

  • 使用 Magic Code 校验包头,防止误识别

  • 加入 CRC32 校验,确保固件传输完整性

  • 支持中断恢复和自动回滚机制

  • Bootloader 和 APP 分区独立,互不干扰

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

  • 指定 Flash 中某个标志位

  • 外部引脚(如按键)触发

  • 上电后延时判断是否接收到上位机固件包头

  • 上次升级失败自动回滚(故障回溯)

固件检测与处理机制

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


二、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

✅ 支持特性包括:

  • 自动识别 Bootloader 是否响应

  • 固件校验一致性提示

  • 断点续传机制(可选)

  • 支持串口速率 115200 / 230400 / 460800


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

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

  •  结构清晰:Boot 与 APP 完全解耦,稳定性强

  •  安全可靠:支持 CRC 校验、水印校验、固件头验证

  •  可扩展性强:支持 SPI/QSPI Flash,支持加密扩展

  • ️ 工具齐全:打包、传输一站式完成,极大提升效率

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




关键词: STM32 OTA

评论


相关推荐

技术专区

关闭