如何用W25Q128芯片做IAP升级呢?

2020-01-01 17:37发布

APP现用tftp协议将bin文件发送到STM32F407,接收到数据写进W25Q128,IAP从W25Q128读取bin文件数据然后写进内部flash,做了CRC校验,断点在线调试,查看写进W25Q128里和读取到的数据都是正确的,但写完内部flash后IAP跳转到APP时就死机了,跳转前有将全部中断都关掉的,这是什么原因呢,有人用过外部flash芯片做IAP升级的吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
30条回答
wind2100
1楼-- · 2020-01-04 05:43
风中答案 发表于 2017-1-18 16:25
有做CRC检验的,tftp接收到每包数据后,在每一包最后都做了CRC16校验才写到W25Q128,读出来时都先判断CRC ...

我看了,你是没设置中断向量,由于F4的中断向量要写寄存器了,没有库函数
你的APP一开中断,就死了,这货可以仿真的。就知道哪里跑飞了。

你玩这个的时候,不要急于将自己的项目放进来,做一个例子,这样就可以将工程放进来,不然,你自己慢慢找问题。
gongngei
2楼-- · 2020-01-04 09:23
 精彩回答 2  元偷偷看……
风中答案
3楼-- · 2020-01-04 14:51
wind2100 发表于 2017-1-19 08:37
我看了,你是没设置中断向量,由于F4的中断向量要写寄存器了,没有库函数
你的APP一开中断,就死了,这货 ...

APP里有设置中断向量表的SCB->VTOR = FLASH_BASE | 0x10000;  之前代码量小的时候,有通过直接用内部flash做备份区来保存bin文件,实现IAP升级的,测试没问题的,现在因为加入网页数据,ROM变大了,才想通过W25Q128保存bin实现升级的。然后碰到了这个问题。
jiamingz
4楼-- · 2020-01-04 20:05
跳转完后掉电重启。分开写boot和APP.,APP启动时候判断升级。不升级或升级成功进入APP。升级失败或启动失败继续升级。
hy317
5楼-- · 2020-01-04 22:29
将两个程序合并后写到单片机看看能不能正常运行
zchong
6楼-- · 2020-01-04 23:11
我就不信了,如果通过外部flash最终写入到内部flash的数据和原始bin文件相同,那就相当奇怪了,这就和直接jtag写进去是一模一样了啊
楼主到底有没有确认过这个问题,内部flash的内容和你的bin是否完全一致?

一周热门 更多>