新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2016-4-9
- 在线时间
- 4 小时
|

楼主 |
发表于 2017-5-11 13:43:09
|
显示全部楼层
定位到原因了,是读写外部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->重启。
绿色部分,由于看门狗原因,需要每4K擦除。这里合理么?
|
|