This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5437A:内部闪存损坏

Guru**** 2382970 points
Other Parts Discussed in Thread: MSP430F5437A
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/827275/msp430f5437a-internal-flash-corruption

器件型号:MSP430F5437A

您好!

我们在产品中使用 MSP430F5437A、并观察到现场发生的闪存损坏实例。 下面是详细信息–

背景:

  1. MSP430F5437A 在4MHz MCLK 上运行。
  2. ADC_ISR 通过计时器定期触发。 为了快速执行 ADC_ISR、MCLK 在 ADC_ISR 入口更新为8MHz、并在从 ISR 返回之前恢复到4MHz。
  3. 闪存位置0x30000至0x307FF 可能会在 ADC_ISR 内部被擦除或写入。 我们不使用嵌套中断。
  4. 我们的监控电路可确保在 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pradeep、您好!

    感谢您的详细博文。 我不建议围绕 MCLK 频率进行切换、而是希望以固定频率进行切换。 我担心、调整 MCLK 频率会使您的闪存控制器频率超出规格、这可能会导致内存损坏。 此外、您的电源电压可能不够高、无法支持更高的频率。 我不会使用 memcpy()函数,而是像我们在代码示例(寄存器级或 DriverLib)中所做的那样访问内存。

    请花一些时间阅读 《MSP430系列微控制器上的调试闪存问题 》应用报告、以了解哪些因素会导致存储器损坏以及如何修复这些问题(例如表1)。 这将比我在这里手动列出的主题更有用、更全面。

    此致、

    James