打印

提个STM32 Flash编程的诡异问题

[复制链接]
3547|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skyler|  楼主 | 2011-4-2 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了一个引导程序A放置于Flash最前端 0x08000000,此程序可以擦除32k以后(0x08008000)的Flash并将新程序复制到该位置,然后跳转到32k处执行,包括了完整ISP流程,设置中断向量及堆栈。
产品后,要给A增加功能,于是写了个B程序(位于32k),利用引导程序A将B复制到32k处,然后跳到执行B;


B程序运行后,擦除0x08000000处的A,然后将新的A'写到此地址;

现在遇到问题是,无论如何,B无法将0x08000000处的A擦除。

但是,用jtag在线调试时,可以将A擦除,并成功将A'更新到A处。
沙发
skyler|  楼主 | 2011-4-2 20:43 | 只看该作者
补充一下,

在应用程序B中,对高位的flash擦除和编程是正确的。

A有读保护操作。

B操作flash前有做Unlock操作。

使用特权

评论回复
板凳
机器猫咪咪| | 2011-4-10 17:15 | 只看该作者
"用jtag在线调试时,可以将A擦除,并成功将A'更新到A处。"
就是说在线调试时程序运行成功,离线运行时失败?

是否考虑通过串口打印追踪一下问题?
楼主是否可以上传一下代码,我在买的神舟III号STM32开发板上试一试?

使用特权

评论回复
地板
mcuisp| | 2011-4-11 01:36 | 只看该作者
注意读保护RDP使能后,0x08000000处有4KB被写保护。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

57

帖子

1

粉丝