你的这个flash区域是在被反复的高速读取吗?是否导致了“read disturb”现象。就是过度的读Flash导致Flash数据异常(消失或变化)。
我在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亿次。
后来发现存在用户Flash区域中的ADC转换系数有的变为0(转换的真实采样值变为0,并且在Keil 内存Watch窗口可以看到),
并且,有的系数在对过程中是不断变化的,这个在Keil 内存Watch窗口中也可以观察到(写flash的指令都被屏蔽了)。重新刷写相应的Flash数据扇区后系数都能恢复正常。
上述现象与文献所说的read disturb比较吻合。但我现在也不能完全确定。
内核在程序存储区取指令应该也是一种“读”操作吧,这也访问用户自定义的Flash数据区有什么区别吗?
希望有大神能给于解释,不甚感激!!!
|