stm32 iap 远程升级方案讨论

2019-12-27 19:01发布

我想通过GPRS实现STM32的远程升级,想法是把512kflash分成两个应用程序区,平常工作在A区,如果收到升级数据就先写入B区,全部写完后如果校验通过就在某个位置上置标志位然后重启系统。系统在引导区的时候根据标志位来运行A区或B区。有谁能提供个思路呢???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
100条回答
TM2010
2020-01-01 03:11
回复【13楼】tuy0326
首先两个区是肯定的
我是这样做的,一个引导区,一个应用程序区,外扩一片flash(本来就需要外扩,只是在里面存放几个变量)
每次启动就去读flash特定的那几个变量(怕误操作,我定义了5个变量,当5个变量相加 == 5 的话就是需要更新程序)
如果需要更新的话直接跳转到app,app里接收文件保存在外部flash里(我连crc校验一起保存),当全部接收完,校验通过后就置标志,然后reset,boot区读标志,读程序,然后更新,最后关门放狗
另外,这种方式可以很容易做到断点续传...
不过我还做了些额外的工作,多次从boot区跳app区都没有成功运行的话,这个时候就表明应用程序区已经损坏,且没有心的数据更新可用,就进入xmodem升级方式不停的从串口发送c,最后一根稻草,可以通过windows超级终端升级...
目前项目中使用,还可以...
-----------------------------------------------------------------------

请教下tuy0326 ,首次烧程序只烧BOOT引导区程序,这时BOOT程序运行时是从PC端接收APP目标文件然后写入APP FLASH区吗?

一周热门 更多>