STM32的IAP方法,如何写SRAM程序?
我是一个STM32F103RBT6+SIM800C的项目,需要增加网络更新固件的功能。已经实现服务器发送固件通过SIM800C传输到SFLASH中。
现在需要实现的是STM32的IAP功能,我这两天看了原子哥的《实验47 串口IAP实验》,觉得有点麻烦,我的思路是:在原始项目中,增加一段SRAM代码(2~3K),在此代码中实现将SFLASH中的固件写入原始FLASH中,写入完成后复位,程序从头开始运行即可。
此方法与《实验47 串口IAP实验》相比更简单,不用管什么中断向量表,也不用管bin文件合并,当然风险是万一失败,就比较麻烦。
我的问题是:如何写一段SRAM程序?
本帖最后由 千岁寒 于 2018-11-14 10:10 编辑
应该是可以的:
1、首先,需要有一个消息(中断或事件)通知程序运行 IAP 功能
2、跳转到IAP后,负责将接收到的内容写到Flash中
注:
以STM32举例,一般的,Flash固定地址从 0x80000000开始,所以IAP功能程序要放在 主程序之后,且要保持一段安全距离。
本帖最后由 holle 于 2018-11-14 11:03 编辑
程序在SRAM中运行不可取,因为单片机不是虚拟地址,程序运行需要堆和栈,静态数据区,动态数据区,C语言程序安排不好容易出问题,除非汇编写地址无关程序。
STM32的Flash可以运行中擦写,可以利用看门狗超时进行跳转。 如果空间足够还是建议先接受全部固件数据校验后整体擦出替换。可以避免数据传输错误,或者传输中断等问题
你可以写一个boot,再boo里面做固件搬运以及接受,这样哪怕固件有问题,也可以再次升级救回来。
当然这么做的坏处就是需要备份,如果你的数据能再内存保存(64K一般)那就可以不占用flash空间了 这就是典型的BOOT
有一个办法, 可以将 FLASH 里的代码复制到 SRAM 里执行. airwill 发表于 2018-12-12 22:20
有一个办法, 可以将 FLASH 里的代码复制到 SRAM 里执行.
您好,请问有测试SRAM程序的代码? 整个代码块复制到SRAM,跳转到正确的入口地址,是可以正确执行的
页:
[1]