打印

这个是STM32F4读Flash的Read Disturb现象吗?

[复制链接]
2753|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
youjiang405|  楼主 | 2021-5-1 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用STM32F4中发现另一个奇怪的现象。
我用STM32F407VGT6 作为数字控制电源的处理器。将ADC转换系数存在Flash中。例如:
VolCoeff1 = ( *(s32*)VOL1_COEFF_ADDR),VOL1_COEFF_ADDR为Flash地址。则真实的电压为
the real voltage=VolCoeff1 * ADC digital value

在TIM2定时器中断(15kHz,66.7us)中读取系数,用于真实电压/电流的换算。因为有十几个ADC转换系数,因此每小时读Flash的次数超过7亿次。
后来发现:
(1)存在用户Flash区域中的ADC转换系数有的变为0(转换的真实采样值变为0,并且在Keil 内存Watch窗口可以看到)。
(2)此外,有的系数在对过程中是不断变化的,这个在Keil 内存Watch窗口中也可以观察到(写flash的指令都被屏蔽了)。
在重新刷写相应的Flash数据扇区后,系数都能恢复正常。

上述现象与很多文献所说的read disturb(就是过量读操作可能导致Flash数据改变)比较吻合。但我现在也不能完全确定。

内核在程序存储区取指令应该也是一种“读”操作吧,这与访问用户自定义的Flash数据区有什么区别吗?

希望有大神能给于解释,不甚感激!!!

使用特权

评论回复

相关帖子

沙发
cjseng| | 2021-5-1 14:55 | 只看该作者
上电时读一次即可,保存在RAM中,为啥要要每次都去读一下?

使用特权

评论回复
板凳
youjiang405|  楼主 | 2021-5-1 15:32 | 只看该作者

这个是STM32F4读Flash的Read Disturb现象吗?

这个电源工作在强电磁环境下,因为有人认为RAM中的数据容易被干扰,因此将系数存在Flash中,每次使用时从Flash读一次。

使用特权

评论回复
地板
youjiang405|  楼主 | 2021-5-1 15:35 | 只看该作者

这个是STM32F4读Flash的Read Disturb现象吗?

另外,之前的认识一直都认为Flash是可以无限次读操作的。在这里是否是真的发生了所谓的read disturb现象,还不确定。

使用特权

评论回复
5
huzaizai007| | 2021-5-1 21:34 | 只看该作者
这些关键系数可以加个校验字节,如果校验错误再从flash里重新读取,平时放在ram里就行。而且存在flash里时多放几个备份,放在不同扇区。如果一个扇区的数据错误,还可以从其他扇区读取,对错误数据更正。15khz的频率读flash不算很快,还是重点检查下程序吧

使用特权

评论回复
6
zchong| | 2021-5-2 07:08 | 只看该作者
1、确认flash内容是否的确被改写了;
2、有一种断点叫数据断点,可以设置成写触发,观察一下是否有程序误写了flash。


使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝