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

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

一、系统简介

本 OTA(Over-The-Air)升级系统基于 STM32 系列 MCU,结合开源组件 mOTA 实现远程或本地固件升级。系统由 Bootloader、固件打包器、固件传输器三部分组成,采用标准的 YModem-1K 协议进行数据传输,并支持外部 Flash 存储、固件完整性校验、断电保护、加密与版本管理等功能。

系统目标是实现:


二、实现功能

1. 基础功能

功能

描述

固件接收

通过串口使用 YModem 协议接收 .ota 固件

存储管理

支持写入内置 Flash 或外部 SPI/QSPI Flash

固件校验

支持 CRC32 校验、魔术字校验、固件长度比对

启动控制

Bootloader 决定启动 APP 或进入升级模式

状态指示

LED 状态闪烁/串口输出提示当前进度

固件跳转

校验通过后跳转执行新 APP

2. 高级功能(可选)

功能

描述

固件加密

支持对 OTA 包 AES 加密与解密

固件签名

固件支持附加 RSA 签名与验证

双分区

实现 APP A/B 区交替升级

断点续传

支持升级中断后恢复上次进度

出厂恢复

支持按键长按恢复出厂固件

版本回退

若 APP 启动失败,自动回退旧版本


️ 三、系统架构

1. 组成模块

 ┌─────────────────────────────┐
│       上位机 (YModem)                                                                                       │ ← 固件发送工具/Firmware_Packager
└────────────┬────────────────┘
             │
     串口传输(YModem协议)
             ↓
┌─────────────────────────────┐
│         Bootloader                                                                                                 │
│ ┌─────────────────────────┐       │
│ │ OTA标志检测                                                                                     │      │
│ │ YModem接收与CRC校验                                                              │       │
│ │ Flash写入管理                                                                                  │       │
│ │ 固件信息提取与验证                                                                       │       │
│ │ App跳转 & 启动判断                                                                       │       │
│ └─────────────────────────┘        │
└────────────┬────────────────┘
             ↓
┌─────────────────────────────┐
│             APP                                                                                                            │
│ ┌─────────────────────────┐        │
│ │ 功能运行(采集/通讯等)                                                            │        │
│ │ OTA触发 & 重启设置标志                                                              │        │
│ └─────────────────────────┘        │
└─────────────────────────────┘


2. 分区示意(以 STM32F4 为例)

区域

起始地址

大小

用途

Bootloader

0x08000000

16KB

固定启动区

APP 主区

0x08004000

480KB

正常应用区

OTA 缓存区(外部 Flash)

0x90000000

1MB+

新固件临时存储

固件信息区

末页

4KB

保存版本、CRC、长度等信息


四、设计思路

设计思路

1. Boot 与 APP 分离

2. 状态机驱动升级流程

Bootloader 内部采用状态机结构组织升级流程,提升清晰度和可维护性:

BOOT_WAIT_TRIGGER → BOOT_OTA_MODE → BOOT_RECEIVE
   ↓                    ↓
BOOT_FAIL         →  BOOT_VERIFY  → BOOT_SUCCESS → BOOT_JUMP_APP

3. 安全性 & 容错设计

4. 固件包打包规范

由 Firmware_Packager 工具打包,包含以下结构:

Header(64B) | 固件内容 | 固件尾标志(Watermark) | 可选签名

5. 软件架构

软件架构

6. 文件架构

├─ document                 设计和原理性文档
├─ example                  示例工程
├─ image                    图片资源
├─ source                   mOTA 组件的源码
│  ├─ bootloader            mOTA 组件的 bootloader 部分
│  │  ├─ Component          第三方库
│  │  ├─ Config             bootloader 配置文件
│  │  ├─ Core               核心源码
│  │  │  ├─ Module          代码模块(可移植部分)
│  ├─ BSP                   BSP(板级支持包)
├─ tools                    mOTA 组件的工具部分
│  ├─ firmware_packager     固件打包工具
│  ├─ YModem_Sender         基于 YModem-1K 协议的发送工具
├─ README.md                说明文件
├─ LICENSE                  Apache-2.0 开源许可


关键词: STM32 OTA

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

或用微信扫描左侧二维码

相关文章

查看电脑版