打印
[STM32]

STM32的IAP方法,如何写SRAM程序?

[复制链接]
1754|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sio4|  楼主 | 2018-11-13 16:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是一个STM32F103RBT6+SIM800C的项目,需要增加网络更新固件的功能。
已经实现服务器发送固件通过SIM800C传输到SFLASH中。
现在需要实现的是STM32的IAP功能,我这两天看了原子哥的《实验47 串口IAP实验》,觉得有点麻烦,我的思路是:在原始项目中,增加一段SRAM代码(2~3K),在此代码中实现将SFLASH中的固件写入原始FLASH中,写入完成后复位,程序从头开始运行即可。
此方法与《实验47 串口IAP实验》相比更简单,不用管什么中断向量表,也不用管bin文件合并,当然风险是万一失败,就比较麻烦。
我的问题是:如何写一段SRAM程序?

相关帖子

沙发
千岁寒| | 2018-11-14 10:09 | 只看该作者
本帖最后由 千岁寒 于 2018-11-14 10:10 编辑

应该是可以的:
1、首先,需要有一个消息(中断或事件)通知程序运行 IAP 功能
2、跳转到IAP后,负责将接收到的内容写到Flash中

注:
         以STM32举例,一般的,Flash固定地址从 0x80000000开始,所以IAP功能程序要放在 主程序之后,且要保持一段安全距离。

使用特权

评论回复
板凳
holle| | 2018-11-14 11:01 | 只看该作者
本帖最后由 holle 于 2018-11-14 11:03 编辑

程序在SRAM中运行不可取,因为单片机不是虚拟地址,程序运行需要堆和栈,静态数据区,动态数据区,C语言程序安排不好容易出问题,除非汇编写地址无关程序。
STM32的Flash可以运行中擦写,可以利用看门狗超时进行跳转。

使用特权

评论回复
地板
苏山人家| | 2018-12-11 10:58 | 只看该作者
如果空间足够还是建议先接受全部固件数据校验后整体擦出替换。可以避免数据传输错误,或者传输中断等问题
你可以写一个boot,再boo里面做固件搬运以及接受,这样哪怕固件有问题,也可以再次升级救回来。
当然这么做的坏处就是需要备份,如果你的数据能再内存保存(64K一般)那就可以不占用flash空间了

使用特权

评论回复
5
ayb_ice| | 2018-12-12 15:37 | 只看该作者
这就是典型的BOOT

使用特权

评论回复
6
airwill| | 2018-12-12 22:20 | 只看该作者
有一个办法, 可以将 FLASH 里的代码复制到 SRAM 里执行.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

74

帖子

1

粉丝