STM32OTA升级
STM32OTA升级
STM32 OTA(空中升级)实现详解
核心原理
- Bootloader设计:独立程序,负责固件更新、验证和跳转到主程序。
- 双分区策略:将Flash分为两个区域(A分区:当前运行程序,B分区:新固件存储区)。
- 通信协议:通过WiFi、BLE、以太网等接收新固件包(常见协议:HTTP、MQTT、串口Ymodem)。
实现步骤
-
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 } -
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); -
应用程序中的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; // 下载结束
}
}
关键优化措施
- 断点续传:记录已下载位置到Flash,意外断电可恢复。
- 安全验证:
- RSA签名验证固件合法性
if (!rsa_verify(firmware_hash, signature)) { HAL_FLASH_Erase(OTA_B_ADDR); // 验证失败删除固件 }
- RSA签名验证固件合法性
- 回滚机制:保留旧版本固件,升级失败自动恢复。
调试建议
- 日志输出:通过串口/UART打印更新状态
- Flash模拟器测试:使用ST-Link Utility模拟Flash操作
- 内存保护:配置MPU防止OTA代码区域被修改
⚠️ 注意事项
- 使用
__HAL_FLASH_SET_LATENCY(FLASH_LATENCY_3)根据时钟调整等待周期- 执行Flash操作时关闭全局中断(
__disable_irq())- 计算固件大小避免越界写入
常用工具
| 工具 | 用途 |
|---|---|
| STM32CubeProgrammer | 本地固件烧录与验证 |
| OpenOCD | 脚本化Flash操作 |
| Wireshark | 网络协议分析(用于HTTP/MQTT) |
通过以上方案,可构建可靠的生产级OTA系统。实际开发中建议结合ST官方提供的安全启动库(X-CUBE-SBSFU)实现完整的安全升级链。
在线升级 | 物联网中的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
【笔记】MCU OTA升级流程
OTA升级流程本文档以 STM32F103C8 为例。此 MCU 的 flash 共 64k,分为 64 页,每页 1k ,flash 的擦除需
资料下载
张涛
2021-11-29 18:21:04
在线升级 | 物联网中的OTA升级原理
从最新的固件方式来看,可以分成以下几类01OTA升级1.1概念OTA:Over-the-AirTechnology,即空中下载技术。
2023-02-02 09:59:29
STM32F103C8的OTA升级流程是怎样的
OTA升级流程本文档以 STM32F103C8 为例。此 MCU 的 flash 共 64k,分为 64 页,每页 1k ,flash 的擦除需
小熊派STM32-OTA+IOT教程 精选资料推荐
近期在准备一个物联网课程,主要是针对STM32OTA升级,这次使用的是小熊派物联网开发板项目地址:https://gitee.com/wenzhengclub/bearpi_iot_
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机