-
这个是STM32F4读Flash的Read Disturb现象吗?
我在使用STM32F4中发现另一个奇怪的现象。我用STM32F407VGT6作为数字控制电源的处理器。将ADC转换系数存在Flash中。例如:VolCoeff1=(*(s32*)VOL1_COEFF_ADDR),VOL1_COEFF_ADDR为Flash地址。则真实的电压为therealvoltage=VolCoeff1*ADCdigitalvalue在TIM2定时器中断(15kHz,66.7us)中读取系数,用于真实电压/电流的换算。因为有十几个ADC转换系数,因此每小时读Flash的次数超过7亿次。后来发现:(1)存在用户Flash区域中的ADC转换系数有的变为0(转换的真实采样值变为0,并且在Keil内存Watch窗口可以看到)。(2)此外,有的系数在对过程中是不断变化的,这个在Keil内存Watch窗口中也可以观察到(写flash的指令都被屏蔽了)。在重新刷写相应的Flash数据扇区后,系数都能恢复正常。上述现象与很多文献所说的readdisturb(就是过量读操作可能导致Flash数据改变)比较吻合。但我现在也不能完全确定。内核在程序存储区取指令应该也是一种“读”操作吧,这与访问用户自定义的Flash数据区有什么区别吗?希望有大神能给于解释,不甚感激!!!
2021-05-01 5 -
这是STM32读Flash的“read disturb”现象吗?
我在使用STM32F4中发现另一个奇怪的现象。我用STM32F407VGT6作为数字控制电源的处理器。将ADC转换系数存在Flash中。例如:VolCoeff1=(*(s32*)VOL1_COEFF_ADDR),VOL1_COEFF_ADDR为Flash地址。则真实的电压为therealvoltage=VolCoeff1*ADCdigitalvalue在TIM2定时器中断(15kHz,66.7us)中读取系数,用于真实电压/电流的换算。因为有十几个ADC转换系数,因此每小时读Flash的次数超过7亿次。后来发现:(1)存在用户Flash区域中的ADC转换系数有的变为0(转换的真实采样值变为0,并且在Keil内存Watch窗口可以看到)。(2)此外,有的系数在对过程中是不断变化的,这个在Keil内存Watch窗口中也可以观察到(写flash的指令都被屏蔽了)。在重新刷写相应的Flash数据扇区后,系数都能恢复正常。上述现象与很多文献所说的readdisturb(就是过量读操作可能导致Flash数据改变)比较吻合。但我现在也不能完全确定。内核在程序存储区取指令应该也是一种“读”操作吧,这与访问用户自定义的Flash数据区有什么区别吗?希望有大神能给于解释,不甚感激!!!
2021-05-01 0