您好!
我们在产品中使用 MSP430F5437A、并观察到现场发生的闪存损坏实例。 下面是详细信息–
背景:
- MSP430F5437A 在4MHz MCLK 上运行。
- ADC_ISR 通过计时器定期触发。 为了快速执行 ADC_ISR、MCLK 在 ADC_ISR 入口更新为8MHz、并在从 ISR 返回之前恢复到4MHz。
- 闪存位置0x30000至0x307FF 可能会在 ADC_ISR 内部被擦除或写入。 我们不使用嵌套中断。
- 我们的监控电路可确保在 VCC 低于2.8V 时发出复位脉冲
观察结果:
我们从闪存随机损坏的字段返回的单位非常少(我们发现一些信息存储器也损坏的实例)
以下是几个要点,我们不确定 MSP 在这些情况下的行为
1.可以从 ADC_ISR (或任何 ISR)上下文执行闪存擦除/写入操作吗?
2.我们的闪存例程通过以下逻辑进行保护-
unsigned int gieState =__get_SR_register ()& GIE;
_disable_interrupt ();
/***闪存擦除/写入操作********* /
_bis_SR_register (gieState); //恢复 GIE 状态
由于我们擦除/写入 ADC_ISR 内部的闪存、因此从 ADC_ISR 上下文调用_disable_interrupt ()和_ bis_SR_register ()。 可以这样做吗?
3.代码使用‘长字写入’模式进行闪存写入操作。 它使用 memcpy() lib 函数写入闪存而不是运行循环…在解锁闪存之后,是否可以使用 memcpy() lib 函数而不是传统的循环函数?
4.如果闪存擦除或写入操作仍在进行中并且监控 IC 发出复位脉冲、该怎么办? 不针对擦除/写入的闪存(或信息)是否会看到任何损坏?
5. MCLK 在4MHz 至8MHz 之间切换,而在 ISR 环境中切换 MCLK 会造成任何损害?
谢谢、
Pradeep