新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 揭秘STM32 OTA升級:輕松實現(xiàn)固件遠程無縫更新(一)

揭秘STM32 OTA升級:輕松實現(xiàn)固件遠程無縫更新(一)

作者:嵌入式芯視野 時間:2025-06-11 來源:今日頭條 收藏

一、系統(tǒng)簡介

(Over-The-Air)升級系統(tǒng)基于 系列 MCU,結(jié)合開源組件 m 實現(xiàn)遠程或本地固件升級。系統(tǒng)由 Bootloader、固件打包器、固件傳輸器三部分組成,采用標準的 YModem-1K 協(xié)議進行數(shù)據(jù)傳輸,并支持外部 Flash 存儲、固件完整性校驗、斷電保護、加密與版本管理等功能。

本文引用地址:http://www.2s4d.com/article/202506/471234.htm

系統(tǒng)目標是實現(xiàn):

  • 可靠、安全、低侵入式的升級機制

  • Boot 與 APP 分離,減少耦合

  • 最小化對原有應用程序的改動


二、實現(xiàn)功能

1. 基礎功能

功能

描述

固件接收

通過串口使用 YModem 協(xié)議接收 .ota 固件

存儲管理

支持寫入內(nèi)置 Flash 或外部 SPI/QSPI Flash

固件校驗

支持 CRC32 校驗、魔術字校驗、固件長度比對

啟動控制

Bootloader 決定啟動 APP 或進入升級模式

狀態(tài)指示

LED 狀態(tài)閃爍/串口輸出提示當前進度

固件跳轉(zhuǎn)

校驗通過后跳轉(zhuǎn)執(zhí)行新 APP

2. 高級功能(可選)

功能

描述

固件加密

支持對 包 AES 加密與解密

固件簽名

固件支持附加 RSA 簽名與驗證

雙分區(qū)

實現(xiàn) APP A/B 區(qū)交替升級

斷點續(xù)傳

支持升級中斷后恢復上次進度

出廠恢復

支持按鍵長按恢復出廠固件

版本回退

若 APP 啟動失敗,自動回退舊版本


? 三、系統(tǒng)架構(gòu)

1. 組成模塊

 ┌─────────────────────────────┐
│       上位機 (YModem)                                                                                       │ ← 固件發(fā)送工具/Firmware_Packager
└────────────┬────────────────┘
             │
     串口傳輸(YModem協(xié)議)
             ↓
┌─────────────────────────────┐
│         Bootloader                                                                                                 │
│ ┌─────────────────────────┐       │
│ │ OTA標志檢測                                                                                     │      │
│ │ YModem接收與CRC校驗                                                              │       │
│ │ Flash寫入管理                                                                                  │       │
│ │ 固件信息提取與驗證                                                                       │       │
│ │ App跳轉(zhuǎn) & 啟動判斷                                                                       │       │
│ └─────────────────────────┘        │
└────────────┬────────────────┘
             ↓
┌─────────────────────────────┐
│             APP                                                                                                            │
│ ┌─────────────────────────┐        │
│ │ 功能運行(采集/通訊等)                                                            │        │
│ │ OTA觸發(fā) & 重啟設置標志                                                              │        │
│ └─────────────────────────┘        │
└─────────────────────────────┘


2. 分區(qū)示意(以 F4 為例)

區(qū)域

起始地址

大小

用途

Bootloader

0x08000000

16KB

固定啟動區(qū)

APP 主區(qū)

0x08004000

480KB

正常應用區(qū)

OTA 緩存區(qū)(外部 Flash)

0x90000000

1MB+

新固件臨時存儲

固件信息區(qū)

末頁

4KB

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


四、設計思路

設計思路

1. Boot 與 APP 分離

  • Bootloader 是獨立的小程序,負責固件升級與跳轉(zhuǎn),不與主程序交叉編譯

  • APP 層可最小侵入,僅在需要升級時設置跳轉(zhuǎn)標志,重啟進入 Bootloader

2. 狀態(tài)機驅(qū)動升級流程

Bootloader 內(nèi)部采用狀態(tài)機結(jié)構(gòu)組織升級流程,提升清晰度和可維護性:

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

3. 安全性 & 容錯設計

  • 加密:防止固件被截獲、篡改

  • 簽名:校驗固件來源是否合法

  • 魔術字 + CRC32 校驗:確保接收完整

  • 斷電保護機制:每頁寫入成功標志,重啟后按標志恢復

4. 固件包打包規(guī)范

由 Firmware_Packager 工具打包,包含以下結(jié)構(gòu):

Header(64B) | 固件內(nèi)容 | 固件尾標志(Watermark) | 可選簽名
  • 支持自定義版本號、加密方式、簽名機制

  • 工具命令行參數(shù)靈活,可擴展

5. 軟件架構(gòu)

軟件架構(gòu)

  • 硬件層描述的是運算器件和邏輯器件,如 CPU、ADC、TIMER、各類 IC 等,是所有軟件組件的硬件基礎,是軟件邏輯的最終底層實現(xiàn)。

  • 硬件抽象層是位于驅(qū)動與硬件電路之間的接口層,將硬件抽象化。它隱藏了特定平臺的硬件接口細節(jié),為驅(qū)動層提供抽象化的硬件接口,使其具有硬件無關性。

  • 驅(qū)動層通過調(diào)用硬件抽象層的開放接口,實現(xiàn)一定的邏輯功能后封裝,提供給上層軟件調(diào)用。

  • 數(shù)據(jù)傳輸層負責收發(fā)數(shù)據(jù),對外開放的是數(shù)據(jù)發(fā)送與接收相關的接口,屏蔽了通訊接口的邏輯代碼,使其易于修改為其他類型的通訊接口。

  • 協(xié)議析構(gòu)層將調(diào)用數(shù)據(jù)傳輸層的數(shù)據(jù)收發(fā)接口進行封包發(fā)送與收包解析,通過實現(xiàn)公有協(xié)議或自定義的協(xié)議,完成對數(shù)據(jù)的構(gòu)造和解析。

  • 應用層負責業(yè)務邏輯代碼的實現(xiàn),通過調(diào)用其他層封裝的接口,完成頂層邏輯功能。

6. 文件架構(gòu)

├─ document                 設計和原理性文檔
├─ example                  示例工程
├─ image                    圖片資源
├─ source                   mOTA 組件的源碼
│  ├─ bootloader            mOTA 組件的 bootloader 部分
│  │  ├─ Component          第三方庫
│  │  ├─ Config             bootloader 配置文件
│  │  ├─ Core               核心源碼
│  │  │  ├─ Module          代碼模塊(可移植部分)
│  ├─ BSP                   BSP(板級支持包)
├─ tools                    mOTA 組件的工具部分
│  ├─ firmware_packager     固件打包工具
│  ├─ YModem_Sender         基于 YModem-1K 協(xié)議的發(fā)送工具
├─ README.md                說明文件
├─ LICENSE                  Apache-2.0 開源許可




關鍵詞: STM32 OTA

評論


相關推薦

技術專區(qū)

關閉