stm32 IAP问题,从HTTPs 更新了APP,重启之后跳转不进新的APP

2019-08-18 20:40发布

我的项目流程是:IAP程序和APP程序合并成一个HEX文件,然后烧写进STM32,可以正常运行,也就是先运行IAP程序然后跳转到APP运行。

然后我发送一个命令,我APP程序会从服务器获取bin文件,烧写进去外部flash(SPI通信的),然后重启,进入IAP,它会从外部flash读取数据烧写进APP中。

成功后,判断栈地址成功,可是跳转不进去APP。

现象:一开始的硬件,可以完美的更新一段时间,之后就出现上面的问题,可是栈地址是对的。
      然后更换了另外一个硬件,试了两三次,放了几天让它运行,之后给升级命令,也出现上面情况。

虽然感觉我描述的不太清楚,也没有很具体的说明现象,我也找不出什么细节出现错误,从服务器烧写进外部flash和读 的数据应该正确的。

所以我来论坛碰碰运气,大伙说说可能的原因,谢谢了!

对了,论坛新手,抱歉没那么多金币给大家。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
vijay_ye
1楼-- · 2019-08-19 13:55
yklstudent 发表于 2017-5-11 11:44
JLINK烧录程序,也可以读程序;
读出来自己比较下是否写对了,写全了

谢谢了,因为在产品上开发,很尴尬,只留了串口,不过FlyMcu 可以读取成.bin文件,已经找到原因了,在楼下,具体问题导致的还不清楚。
vijay_ye
2楼-- · 2019-08-19 17:30
定位到原因了,是读写外部flash错误,我使用的是W25Q16。有两个现象。
1. 板子1,新板,一开始可远程升级代码的,然后运行了两三天,在给它远程升级固件,就出现上面的现象,在IAP升级时(也就是将信息写入STM32falsh中),打印出来读取外部falsh的信息,只打印了前一点点内容,也就是因此说栈顶地址能够合法的原因。
2.  板子1,将写入外部flash的地址换了。然后成功了。

所以给出来的原因是可能我将外部flash擦坏了,不过我只擦除过两次,运行了几天(之前不是板子1,有测试连续远程升级好几十次都没问题的),所以感觉我正常运行对W25Q16有影响。

对于有关W25Q16的流程:大伙看看合不合理,整体是参考正点哥的。
IAP区:初始W25Q16(也就是初始化管脚)->读W25Q16 ID->无更新标志直接跳入APP,有更新标志->读取W25Q16 2K写 入stm32 flash 2K(大容量32)。

APP区:初始W25Q16(也就是初始化管脚)->读W25Q16 ID->接收到升级命令->每4K擦除外部flash,64次(256K)->读取固件写入外部flash->重启。

绿 {MOD}部分,由于看门狗原因,需要每4K擦除。这里合理么?
XUZJWWSZ
3楼-- · 2019-08-19 17:40
 精彩回答 2  元偷偷看……
vijay_ye
4楼-- · 2019-08-19 22:22
XUZJWWSZ 发表于 2017-5-12 08:50
楼主是不是可以在运行的时候量一下那片flash的片选。
我用过W25Q128A+stm32f107,没问题。每4K擦除应该没 ...

抱歉这么晚看到,4K擦写应该没问题的,我的是要存储32固件,所以需要擦除很大片,会多次擦除,导致只擦除了前面的。

一周热门 更多>