• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

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

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

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

    在嵌入式開發中,遠程固件升級(, Over-The-Air)技術早已成為產品迭代和維護的關鍵能力。尤其是在 系列微控制器廣泛應用的今天,構建一個穩定、通用、安全的 升級系統,是每個工程師都繞不過去的一關。

    本文引用地址:http://www.czjhyjcfj.com/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

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 天津市| 荔浦县| 马龙县| 乌海市| 勐海县| 容城县| 遂昌县| 九寨沟县| 米脂县| 台南市| 苏尼特左旗| 东莞市| 冷水江市| 诸城市| 霍邱县| 吐鲁番市| 疏勒县| 永平县| 英超| 陕西省| 阿拉尔市| 和田市| 霞浦县| 拉孜县| 体育| 铜川市| 冷水江市| 正阳县| 公安县| 松阳县| 舟山市| 格尔木市| 南江县| 宁安市| 和硕县| 东至县| 白银市| 建宁县| 射阳县| 襄樊市| 莱阳市|