新聞中心

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

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

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

        一、系統簡介

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

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

        系統目標是實現:

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

        • Boot 與 APP 分離,減少耦合

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


        二、實現功能

        1. 基礎功能

        功能

        描述

        固件接收

        通過串口使用 YModem 協議接收 .ota 固件

        存儲管理

        支持寫入內置 Flash 或外部 SPI/QSPI Flash

        固件校驗

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

        啟動控制

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

        狀態指示

        LED 狀態閃爍/串口輸出提示當前進度

        固件跳轉

        校驗通過后跳轉執行新 APP

        2. 高級功能(可選)

        功能

        描述

        固件加密

        支持對 包 AES 加密與解密

        固件簽名

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

        雙分區

        實現 APP A/B 區交替升級

        斷點續傳

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

        出廠恢復

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

        版本回退

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


        ? 三、系統架構

        1. 組成模塊

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


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

        區域

        起始地址

        大小

        用途

        Bootloader

        0x08000000

        16KB

        固定啟動區

        APP 主區

        0x08004000

        480KB

        正常應用區

        OTA 緩存區(外部 Flash)

        0x90000000

        1MB+

        新固件臨時存儲

        固件信息區

        末頁

        4KB

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


        四、設計思路

        設計思路

        1. Boot 與 APP 分離

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

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

        2. 狀態機驅動升級流程

        Bootloader 內部采用狀態機結構組織升級流程,提升清晰度和可維護性:

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

        3. 安全性 & 容錯設計

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

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

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

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

        4. 固件包打包規范

        由 Firmware_Packager 工具打包,包含以下結構:

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

        • 工具命令行參數靈活,可擴展

        5. 軟件架構

        軟件架構

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

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

        • 驅動層通過調用硬件抽象層的開放接口,實現一定的邏輯功能后封裝,提供給上層軟件調用。

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

        • 協議析構層將調用數據傳輸層的數據收發接口進行封包發送與收包解析,通過實現公有協議或自定義的協議,完成對數據的構造和解析。

        • 應用層負責業務邏輯代碼的實現,通過調用其他層封裝的接口,完成頂層邏輯功能。

        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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 都匀市| 宾川县| 固镇县| 武胜县| 田阳县| 马关县| 涪陵区| 平谷区| 绍兴市| 罗城| 陈巴尔虎旗| 建水县| 榆中县| 扎兰屯市| 柞水县| 突泉县| 江都市| 明水县| 樟树市| 河源市| 威海市| 永泰县| 准格尔旗| 正蓝旗| 金阳县| 吉安市| 德兴市| 陆川县| 阿荣旗| 湘乡市| 图木舒克市| 时尚| 砀山县| 仁怀市| 五原县| 丰县| 铅山县| 福建省| 宜城市| 襄樊市| 红原县|