我是靠谱客的博主 贪玩流沙,最近开发中收集的这篇文章主要介绍STM32 EC20 OTA 程序设计 Bin文件错误与改进,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

STM32 OTA 程序设计 V0.1

  1. 流程图
    现实很残酷

  2. Flash 区域划分视图
    BOOT起始地址 0x0800 0000 50k
    APP 1区地址 0x0800 c800 100k
    APP 2区地址 0x0802 5800 100k
    Boot参数区地址 0x0803 e800 1k

  3. BootLoader区代码设计
    程序空间大小为20k,地址分配为0x0800 0000到0x0800 5000.主要实现功能
    1,读写flash
    2,实现程序跳转,重定义中断向量表
    3,标记A,B代码区域,根据标志位确定执行代码区

  4. App区代码设计
    A,B代码区大小都为100K
    1,解析升级命令,触发升级程序
    2,运行4G模块FTP程序,下载文件到4G模块RAM区
    3,运行4G模块FILE程序,对RAM区的升级文件拷贝到STM32flash中

STM32 OTA 程序设计 V0.2

1 修改原设计说明
原设计中设置了两个代码运行区域,本意是想从BootLoader中分别跳转到A,B区域,但是该方案在设计时,没有考虑到bin文件中存在绝对地址问题,即在0x0800ce00处生成的bin文件,只能在该地址上运行,即便是拷贝到0x08025800处,也运行不了B区代码。打开bin文件,

在这里插入图片描述
前16字节数据:2000ad60 0800c9dd 0801197b 08010781
可以看到复位中断地址还是属于A区代码中,boot跳转到0x08025800,读取到复位中断地址后,便跳回A区代码执行,B区代码不会被运行。想解决这个问题,只有在生成bin文件时,修改ROM地址
在这里插入图片描述在这里插入图片描述
打开bin文件,发现复位中断地址为080259dd.

这时候,B区代码才可以被正常运行。
显然在对设备OTA升级时,既要考虑到当前设备运行在哪个区域,同时去生成另一个区域的bin文件,极容易出现操作错误的问题,一旦错误,该设备将无法远程维护。基于上述分析,故修改升级方案。

2 流程图

在这里插入图片描述
3 Flash 区域划分视图
BOOT起始地址 0x0800 0000 50k
APP运行区地址 0x0800 c800 100k
APP 备份区地址 0x0802 5800 100k
Boot参数区地址 0x0803 e800 1k
4 BootLoader区代码设计
程序空间大小为20k,地址分配为0x0800 0000到0x0800 5000.主要实现功能
1,读擦升级标志位
2,拷贝备份区程序到运行区
3,实现程序的跳转
5 App区代码设计
APP运行区和备份区大小都为100K
1,解析升级命令,核对软件版本号,触发升级程序
2,运行4G模块FTP程序,下载文件到4G模块RAM区
3,运行4G模块FILE程序,对RAM区的升级文件拷贝到STM32flash中
4,使用MD5对文件进行校验,确定是否更新程序。

最后

以上就是贪玩流沙为你收集整理的STM32 EC20 OTA 程序设计 Bin文件错误与改进的全部内容,希望文章能够帮你解决STM32 EC20 OTA 程序设计 Bin文件错误与改进所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部