STM32 OTA需要注意问题

一、OTA设计思路(问题)

1、根据stm32f405 flash分布,最初将flash划分为四个区域,分别是Bootloader、APP1、APP2、参数区,设备上电后,进入Bootloader程序,判断OTA参数,根据参数来确定跳转到哪个APP区域,下载逻辑互为备份,举例说明:当程序运行在APP1时,OTA时先将固件下载到APP2区域,设置标志,复位芯片,Bootloader启动,读取标志,跳转到APP2,当程序运行在APP2时,OTA时先将固件下载到APP1区域,设置标志,复位芯片,Bootloader启动,读取标志,跳转到APP1,实际使用中存在,Bootloader永远无法跳转到APP2的问题(说明:Bootloader地址:0x08000000,APP1地址:0x08020000,APP2地址:0x08080000,参数地址:0x080e0000),问题原因:

  • 由于在使用keil编译APP的时候,需要指定地址,这个地址会关系到栈顶指针、中断向量表,并且这个地址会关联到APP bin文件的内容,而Bootloader跳转的时候,会首先读取bin文件第4-8个字节的内容,这个4-8字节又是在编译的时候设置的,指向的是APP1(0x08020000)区域,所以哪怕OTA下载到APP2区域,APP2内的bin文件4-8个直接指向的也是APP1区域的地址(0x08020000)
    bin文件编译器地址设置:

    bin文件内容,里面很多跟编译地址关联的内容,这里试举一例:

二、需要解决以上问题,有两种方案:

1、不通过Bootloader程序来判断直接跳转到某个APP区,而是固定跳转到APP1区域,把APP2区域当成永久备份区,当有固件下载时,先放到APP2区域,设置升级标志,设备复位后,Bootloader读取标志,让后将APP2内固件搬运到APP1,再跳入APP1区域执行;优点是固件制作简单,缺点是过程有点长,需要控制好文件准确无误;

2、另外一种方式是根据APP1和APP2不同的地址设置keil,制作两个不同地址的bin文件,升级的时候单片机首先上报运行在哪个APP区,需要哪一个区的bin文件,下载对应区域的bin文件即可;优点升级流程简单,缺点:需要制作多个包,且下载对应的包必须准确,需要管理好;

以上两种方案都能解决该问题;

相关推荐
威嵌神州29 分钟前
军工加固计算机七大核心特性解析|国产化、宽温、强加固工程实现
嵌入式硬件·计算机网络·fpga开发
Brilliantwxx39 分钟前
【STM32】 深度详解总线架构 哈佛总线结构
stm32·嵌入式硬件·架构
恶魔泡泡糖42 分钟前
stm32F103C8T6标准库DWT应用DHT11温湿度传感器数据手册说明
stm32·单片机·嵌入式硬件
深圳市恒锐丰科技杨生44 分钟前
EG1192S 10‑100V 高压集成上管降压 DC‑DC|零功耗使能 Buck 电源芯片
嵌入式硬件·硬件工程
单片机仿真设计1 小时前
【Proteus 仿真】基于 STM32 单片机鸡舍环境监控系统设计(仿真 + 源码)
stm32·单片机·嵌入式硬件·proteus·毕设
李永奉2 小时前
中科蓝讯SDK开发-提示音音频文件格式转换和压缩教程
网络·单片机·嵌入式硬件·mcu·物联网
春风解人意2 小时前
从零开始学习嵌入式P35----数据库
数据库·嵌入式硬件·学习
单片机仿真设计2 小时前
【Proteus 仿真】基于 STM32 单片机智能楼宇照明控制系统设计(定制仿真咨询)
stm32·单片机·嵌入式硬件·proteus·毕设
ACP广源盛139246256733 小时前
M6/M5 Pro Mac mini 端侧 AI 爆发@ACP#YLB3118 存储扩展芯片在本地 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
HUI-4743 小时前
EG1198|ESOP‑8 高性价比内置 MOS 降压 DC‑DC,10‑120V 小功率车载仪表优选
嵌入式硬件·硬件工程