打印
[STM32F4]

求助:STM32F4 Flash扇区擦除期间如何清看门狗

[复制链接]
5224|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wangjianf5 于 2017-11-6 08:34 编辑

问题描述:产品使用STM32F4芯片,外加外部看门狗(数据手册写0.9-2.5秒会工作)。正常程序0.5秒左右清除一下看门狗。由于这次产品中加入了自己编写了Bootloader升级APP的程序,需要擦除几个连续的扇区,每擦除一个扇区就给外部看门狗一个沿信号去清除看门狗。当擦除到128KB扇区的时候,测得擦除大概需要1.15秒时间(手册上写一般擦除128KB时间需要1-2秒)。所以,部分板子在擦除128KB扇区的时候出现外部看门狗复位的情况......

做了个测试:
1-在执行擦除Flash之前,将清除看门狗的程序放在SystemTick(1ms触发)中。结果:前面2个128KB扇区擦除仍然需要1秒钟左右才会去执行SystemTick中的程序,后面的扇区擦除期间,会有SystemTick的清看门狗的信号在执行。
这个测试说明了一个问题,就是和STM32F4手册上写的一样,在Flash擦除期间,任何读取Flash的指令都将会被挂起,直到Flash擦除完成。
奇怪的是为什么前2个扇区擦除的时候会出现这种情况,后面几个扇区没有出现这情况?

有没有哪位朋友遇到过这种类似的问题?后来怎么解决的?

20171102更新
测试将操作擦除Flash和给WatchDog信号的程序存放在RAM中,在运行后,出现如下图那样的情况。期间有两个明显时间很长的信号,第一个是擦除STM32F407 Secotr4(64KB)的时间,第二个是擦除Sector5(128kb)的时间,后面6-10 Secotrs就有信号去清除了。这个现象和之前所有擦除Flash和给Watchdog信号的程序全部放在Flash中的结果一模一样。现在的疑惑是,如果按照STM32手册说明的,第一二个Sector擦除的时候确实总线挂起了,但是为什么在6-10的Sectors擦除的时候却有程序执行的高低信号去清除看门狗了?

webwxgetmsgimg (1).jpg (355.8 KB )

STM32F4 扇区4-10擦除

STM32F4 扇区4-10擦除

webwxgetmsgimg.jpg (380.89 KB )

STM32F4 扇区4-10擦除

STM32F4 扇区4-10擦除
沙发
mmuuss586| | 2017-11-1 17:37 | 只看该作者
把串口IAP程序,放到RAM里执行看看;

使用特权

评论回复
板凳
heisexingqisi| | 2017-11-1 21:42 | 只看该作者
一个一个擦,每个擦完,清一次。

使用特权

评论回复
地板
dalarang| | 2017-11-1 22:36 | 只看该作者
分批擦,中间插入喂狗指令

使用特权

评论回复
5
kingkits| | 2017-11-2 08:37 | 只看该作者
在 ram中运行擦除的程序,然后等待期间适当喂狗

使用特权

评论回复
6
Houtz| | 2017-11-2 09:06 | 只看该作者
我猜的有可能是前面的扇区跟后面是分开的独立的两块,如果你的IAP程序和要擦除的FLASH区域在同一块FLASH,那这时在擦写FLASH的时候,CPU是不能从FLASH取指令的,这时是挂起状态。但后面的FLASH在擦写的时候,CPU可以从前面的FLASH取指令。这种情况如果有两块独立的FLASH,那可以把前面的做BOOT,后面的做APP,这样就可以了。
最好的方法是把BOOT程序复制到RAM中,然后映射向量,再执行RAM中的BOOT。这个肯定是可以解决的。
有问题可以找我交流375880228@qq.com

使用特权

评论回复
7
wangjianf5|  楼主 | 2017-11-2 10:00 | 只看该作者
mmuuss586 发表于 2017-11-1 17:37
把串口IAP程序,放到RAM里执行看看;

好的,谢谢。正朝着这个方向尝试。

使用特权

评论回复
8
wangjianf5|  楼主 | 2017-11-2 10:01 | 只看该作者
heisexingqisi 发表于 2017-11-1 21:42
一个一个擦,每个擦完,清一次。

不好意思,没有写清楚。程序是每次擦扇区前给一个信号,擦完立刻再给一个信号。是在擦除期间由于时间过长,导致看门狗复位。

使用特权

评论回复
9
wangjianf5|  楼主 | 2017-11-2 10:14 | 只看该作者
Houtz 发表于 2017-11-2 09:06
我猜的有可能是前面的扇区跟后面是分开的独立的两块,如果你的IAP程序和要擦除的FLASH区域在同一块FLASH, ...

非常感谢指导,目前正在用尝试用这种方法来处理这个问题。

使用特权

评论回复
10
wangjianf5|  楼主 | 2017-11-6 08:34 | 只看该作者
更新了,请看下

使用特权

评论回复
11
wandersky| | 2019-1-23 09:32 | 只看该作者

楼主,解决了吗?
我也遇到了一样的问题

使用特权

评论回复
12
wandersky| | 2019-1-23 11:19 | 只看该作者
我用的是STM32F437   2M空间,BANK1 BANK2,
把boot放在BANK1  APP放在BANK2,
BANK1 中运行的程序擦除BANK2中的块, 不影响BANK1中取指令,
这样就解决了

使用特权

评论回复
13
yzzly| | 2019-1-24 12:10 | 只看该作者
在更新代码期间禁止看门狗,我看比较合适。

使用特权

评论回复
14
wangjianf5|  楼主 | 2019-8-10 12:58 | 只看该作者
wandersky 发表于 2019-1-23 09:32
楼主,解决了吗?
我也遇到了一样的问题

已经解决了,请看问题下面更新的内容

使用特权

评论回复
15
wangjianf5|  楼主 | 2019-8-10 13:00 | 只看该作者
wandersky 发表于 2019-1-23 11:19
我用的是STM32F437   2M空间,BANK1 BANK2,
把boot放在BANK1  APP放在BANK2,
BANK1 中运行的程序擦除BANK2 ...

谢谢回复,目前我的解决方法是将擦除和清除WDG放在了RAM中

使用特权

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

本版积分规则

8

主题

29

帖子

1

粉丝