登录/注册

STM32OTA升级

STM32OTA升级

更多

STM32 OTA(空中升级)实现详解

核心原理

  1. Bootloader设计:独立程序,负责固件更新、验证和跳转到主程序。
  2. 双分区策略:将Flash分为两个区域(A分区:当前运行程序,B分区:新固件存储区)。
  3. 通信协议:通过WiFi、BLE、以太网等接收新固件包(常见协议:HTTP、MQTT、串口Ymodem)。

实现步骤

  1. Flash分区规划(以1MB Flash为例) 地址范围 大小 功能
    0x0800 0000 64KB Bootloader
    0x0801 0000 512KB 主程序分区A
    0x0809 0000 448KB OTA分区B(新固件)
    // 在链接脚本(.ld)中定义
    MEMORY {
     BOOTROM (rx) : ORIGIN = 0x08000000, LENGTH = 64K
     APP_A   (rx) : ORIGIN = 0x08010000, LENGTH = 512K
     OTA_B   (rwx): ORIGIN = 0x08090000, LENGTH = 448K
    }
  2. Bootloader关键代码

    // 检查OTA标志(保存在Flash特定地址)
    uint32_t ota_flag = *(__IO uint32_t*)FLASH_OTA_FLAG_ADDR;
    
    if (ota_flag == NEW_FIRMWARE_FLAG) {
     // 1. 校验新固件(CRC32/SHA256)
     if (verify_firmware(OTA_B_ADDR)) {
        // 2. 复制OTA分区数据到主分区
        flash_copy(APP_A_ADDR, OTA_B_ADDR, FIRMWARE_SIZE);
    
        // 3. 清除OTA标志
        flash_erase(FLASH_OTA_FLAG_ADDR);
     }
    }
    // 跳转到主程序
    jump_to_app(APP_A_ADDR);
  3. 应用程序中的OTA流程

    void ota_update_handler(uint8_t *data, uint32_t size) {
     // 1. 分块写入到OTA分区B
     HAL_FLASH_Unlock();
     for (int i=0; i < size; i+=4) {
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, OTA_B_ADDR + i, *(uint32_t*)(data+i));
     }
     HAL_FLASH_Lock();
    
     // 2. 设置更新标志位
     write_flash_flag(NEW_FIRMWARE_FLAG);
    
     // 3. 重启进入Bootloader
     NVIC_SystemReset();
    }

通信协议示例(HTTP固件下载)

// 使用ESP32 AT指令通过HTTP下载固件
void http_download_firmware() {
  send_at_command("AT+HTTPSTART=\"http://server.com/firmware.bin\"");
  while(1) {
    // 接收数据包
    uint8_t buffer[1024];
    uint32_t recv_size = receive_http_data(buffer);
    write_to_ota_partition(buffer, recv_size); // 写入Flash
    if (recv_size < 1024) break; // 下载结束
  }
}

关键优化措施

  1. 断点续传:记录已下载位置到Flash,意外断电可恢复。
  2. 安全验证
    • RSA签名验证固件合法性
      if (!rsa_verify(firmware_hash, signature)) {
      HAL_FLASH_Erase(OTA_B_ADDR); // 验证失败删除固件
      }
  3. 回滚机制:保留旧版本固件,升级失败自动恢复。

调试建议

  1. 日志输出:通过串口/UART打印更新状态
  2. Flash模拟器测试:使用ST-Link Utility模拟Flash操作
  3. 内存保护:配置MPU防止OTA代码区域被修改

⚠️ 注意事项

  • 使用__HAL_FLASH_SET_LATENCY(FLASH_LATENCY_3)根据时钟调整等待周期
  • 执行Flash操作时关闭全局中断(__disable_irq()
  • 计算固件大小避免越界写入

常用工具

工具 用途
STM32CubeProgrammer 本地固件烧录与验证
OpenOCD 脚本化Flash操作
Wireshark 网络协议分析(用于HTTP/MQTT)

通过以上方案,可构建可靠的生产级OTA系统。实际开发中建议结合ST官方提供的安全启动库(X-CUBE-SBSFU)实现完整的安全升级链。

STM32OTA远程升级

上次发过SD卡的Bootloader离线升级后,应大家的要求,这次就讲一下STM32的OTA远程

2023-06-22 10:01:00

OTA是什么?OTA升级有何用?

ota是什么?ota升级是什么意思?很多用智能手机的人应该都会知道 ota

2023-03-15 14:36:08

在线升级 | 物联网中的OTA升级原理

从最新的固件方式来看,可以分成以下几类 0 1 OTA升级 1.1  概念 OTA:Over-the-Air Technology,即空中下载技

2023-02-03 02:40:02

STM32WB 系列微控制器 OTA 和无线固件更新应用笔记

本文档介绍了通过低功耗蓝牙连接在 STM32WB 设备上进行 OTA 固件更新的过程。它讲解如何使用 STM32Cube 固件包中提供的

资料下载 zq1943 2026-01-08 14:50:33

国民技术N32WB452x系列蓝牙OTA升级参考指南V1

国民技术UG_N32WB452x系列蓝牙OTA升级参考指南V1

资料下载 华秋商城 2022-10-18 16:12:59

【笔记】MCU OTA升级流程

OTA升级流程本文档以 STM32F103C8 为例。此 MCU 的 flash 共 64k,分为 64 页,每页 1k ,flash 的擦除需

资料下载 张涛 2021-11-29 18:21:04

基于OTA升级的ESP01S固件测试工具

基于OTA升级的ESP01S固件测试工具

资料下载 文武000 2021-07-12 10:26:45

STM32单片机网络远程升级固件的源码下载

STM32单片机网络远程升级固件的源码下载

资料下载 罗程123 2021-04-17 09:27:26

在线升级 | 物联网中的OTA升级原理

从最新的固件方式来看,可以分成以下几类01OTA升级1.1概念OTA:Over-the-AirTechnology,即空中下载技术。

2023-02-02 09:59:29

如何升级OTA

如何升级OTA?

2022-02-14 06:27:44

STM32F103C8的OTA升级流程是怎样的

OTA升级流程本文档以 STM32F103C8 为例。此 MCU 的 flash 共 64k,分为 64 页,每页 1k ,flash 的擦除需

2022-01-24 08:13:20

什么是在线OTA升级

什么是在线OTA升级- OTA是Over-the-Air的简写,空中下载技术的意思。-

2021-12-22 07:44:00

STM32能实现OTA功能吗

STM32能实现OTA功能吗?STM32是如何进行远程升级

2021-10-18 12:21:31

小熊派STM32-OTA+IOT教程 精选资料推荐

近期在准备一个物联网课程,主要是针对STM32OTA升级,这次使用的是小熊派物联网开发板项目地址:https://gitee.com/wenzhengclub/bearpi_iot_

2021-08-03 07:55:11

STM32单片机OTA程序升级相关资料分享

目录一、程序升级原理1、本地应用程序更新2、固件升级命令响应 和 升级固件下载二、RT-Thread

2021-07-01 09:50:03
7天热门专题 换一换
相关标签