新聞中心

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

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

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

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

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

        本項目基于開源 工程,完整實現(xiàn)了以下內(nèi)容:

        • Bootloader 啟動邏輯及升級流程

        • 固件打包機制(含安全校驗)

        • 上位機串口升級工具(YModem 協(xié)議)

        • SPI/QSPI Flash 分區(qū)管理

        • 多種異常處理機制:斷電保護、CRC 校驗失敗、回滾機制等

        本文重點介紹該系統(tǒng)的升級流程細節(jié)、Bootloader 模塊結(jié)構(gòu)與關(guān)鍵代碼,以及如何使用配套打包和升級工具,實現(xiàn)一站式 OTA。

        一、升級流程詳解:Bootloader 主導(dǎo) OTA 的全流程

        1. 流程概述

        OTA 的標準流程如下圖所示:


        整個流程設(shè)計注重魯棒性與安全性,例如:

        • 使用 Magic Code 校驗包頭,防止誤識別

        • 加入 CRC32 校驗,確保固件傳輸完整性

        • 支持中斷恢復(fù)和自動回滾機制

        • Bootloader 和 APP 分區(qū)獨立,互不干擾

        2. 進入升級模式的判定方式包括:

        • 指定 Flash 中某個標志位

        • 外部引腳(如按鍵)觸發(fā)

        • 上電后延時判斷是否接收到上位機固件包頭

        • 上次升級失敗自動回滾(故障回溯)

        固件檢測與處理機制

        這種靈活的判斷機制確保了在各種場景下都能正常觸發(fā)升級,提升用戶體驗與維護效率。


        二、Bootloader 結(jié)構(gòu)設(shè)計與關(guān)鍵模塊源碼說明

         Bootloader 架構(gòu)分層

        整個 Bootloader 系統(tǒng)按以下模塊劃分:

        模塊名稱

        功能說明

        啟動判定模塊

        檢查是否進入 OTA 模式,或跳轉(zhuǎn)到 APP

        Flash 操作模塊

        擦除/寫入/讀取 SPI 或 QSPI Flash

        協(xié)議接收模塊

        通過串口接收 YModem 協(xié)議格式的固件數(shù)據(jù)

        固件解析模塊

        解包 .fpk 固件,提取版本號、長度、CRC 等字段

        固件校驗?zāi)K

        Magic Code 檢查 + CRC32 校驗

        升級標志模塊

        管理升級狀態(tài)和失敗回滾標志

        安全跳轉(zhuǎn)模塊

        關(guān)閉中斷、設(shè)置棧頂?shù)刂泛筇D(zhuǎn)到 APP

         關(guān)鍵代碼片段展示

        啟動判斷邏輯:

        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;
        }

        跳轉(zhuǎn)到 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 所需的所有關(guān)鍵能力。


        三、配套工具使用指南:打包器 & 固件上傳助手

        為實現(xiàn)無縫的 OTA 流程,我們提供了兩套實用工具,支持命令行或 GUI 使用:


         1. 固件打包工具(Firmware_Packager)

        該工具將普通 .bin 固件封裝為 .fpk 固件包,自動生成校驗字段,支持版本號管理。

        打包命令示例:

        Firmware_Packager.exe -i app.bin -o upgrade.fpk -v 1.0.3

        固件包頭結(jié)構(gòu)(16 字節(jié)):

        字段

        長度

        含義說明

        Magic Code

        4B

        固件合法標志(0xDEADBEEF)

        Version

        4B

        固件版本號,如 0x010003

        Length

        4B

        固件數(shù)據(jù)部分大小

        CRC32

        4B

        數(shù)據(jù)區(qū) CRC 校驗值

        支持多種擴展字段,如水印、簽名、時間戳等。


         2. 固件上傳工具(Firmware_Uploader)

        通過串口(支持 USB 轉(zhuǎn)串口)將 .fpk 固件上傳至設(shè)備,采用 YModem-1K 協(xié)議,兼容性強、效率高。

        上傳命令示例:

        Firmware_Uploader.exe -p COM4 -b 115200 -f upgrade.fpk

        ? 支持特性包括:

        • 自動識別 Bootloader 是否響應(yīng)

        • 固件校驗一致性提示

        • 斷點續(xù)傳機制(可選)

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


         總結(jié): OTA 升級不再難,實現(xiàn)只需三步!

        本套 OTA 方案已實際運行于多個商業(yè)項目,具有以下優(yōu)點:

        •  結(jié)構(gòu)清晰:Boot 與 APP 完全解耦,穩(wěn)定性強

        •  安全可靠:支持 CRC 校驗、水印校驗、固件頭驗證

        •  可擴展性強:支持 SPI/QSPI Flash,支持加密擴展

        • ? 工具齊全:打包、傳輸一站式完成,極大提升效率

        開源網(wǎng)址:mOTA: 一款專為32位MCU開發(fā)的OTA組件




        關(guān)鍵詞: STM32 OTA

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 龙陵县| 库车县| 沾益县| 延庆县| 浙江省| 得荣县| 无锡市| 芜湖县| 商城县| 涪陵区| 宁河县| 台东县| 沂水县| 竹溪县| 沂源县| 营口市| 买车| 万山特区| 东乡| 水城县| 郧西县| 姜堰市| 南郑县| 德兴市| 静乐县| 秭归县| 海林市| 海原县| 乌拉特后旗| 同德县| 津市市| 色达县| 中西区| 鄂州市| 乐山市| 娄底市| 郴州市| 沂水县| 祁门县| 昔阳县| 收藏|