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.

[参考译文] MSP430F2618:闪存擦除在不同的地址执行

Guru**** 2912410 points

Other Parts Discussed in Thread: MSP430F2618

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1648102/msp430f2618-flash-erase-being-performed-in-a-different-address

器件型号: MSP430F2618

您好:

我正在通过 UART 发送一条命令、在闪存地址存储 9 字节 0x1348D的校准参数。 在某些情况下、观察到从地址开始的 512 个字节 0x6800 被擦除、这是没有意义的。 但是、对应于的区域 0x1348D 已正确更新。

我注意到、禁用 EEI 位后、不再出现此问题。 在闪存操作期间、GIE 位被禁用、然后重新启用。

此行为是否与 MSP430F2618 MCU 勘误表中所述的问题有关?

“EEI 功能不适用于从 RAM 执行代码。 从 RAM 执行程序时、闪存控制器 EEI 功能不起作用。 擦除周期暂停、中断得到处理、但在恢复擦除周期时存在问题。 应用于闪存的地址与实际值不同、而在 ISR 执行后恢复擦除周期。“

我不清楚这一发言所指的是什么。 它是要擦除的地址吗? 这是否意味着设置 EEI 位时目标擦除地址可能会损坏?

如果是、这可以解释我观察到的行为、因为这里有很多 ISR 例程、包括每 104us 触发一次的计时器。

提前感谢!

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

    尊敬的 Diogo:

    当我在下一个星期二的办公室工作时、我会做一些研究。 感谢您的耐心。

    B.R.

    Sal

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

    只需添加:

    1 — 当 EEI = 1 时、在闪存擦除期间、即使 GIE = 0、计时器 B ISR 也会被处理。 这似乎是导致该问题的原因、因为当 EEI = 0 时、不会处理 ISR。

    2 — 我们确认两个闪存区域均已擦除,仅调用一次闪存擦除过程。

    3 — 闪存擦除代码是从闪存执行的,而不是从 RAM 执行的、因此勘误表中提到的问题似乎与我们观察到的行为不匹配。

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

    尊敬的 Diogo:

    1 — 当 EEI = 1 时、即使在闪存擦除期间 GIE = 0、也会为计时器 B ISR 提供服务。 这似乎是导致该问题的原因、因为当 EEI = 0 时、不会处理 ISR。

    这是在 FLASH27 中提到的。

    2 — 我们确认只调用一次闪存擦除过程即可擦除两个闪存区域。

    根据 FLASH19、可能会应用错误的地址以进行擦除。  每个中断服务处理完毕后、当它恢复来处理段擦除时、返回地址将不正确。 我认为地址没有一定的模式。

    3 — 闪存擦除代码是从闪存执行的,而不是从 RAM 执行的、因此勘误表中提到的问题似乎与我们观察到的行为不匹配

    如果闪存中运行的所有中断、则 FLASH19 应该没问题。

    您是否具有嵌套中断? 我看到 下面提到的 slau144k:
    在中断服务期间、BUSY 位保持置位、但 CPU 可以访问闪存而不会发生访问违例。 不支持嵌套中断、也不支持在中断服务例程中使用 RETI 指令。

    B.R.

    Sal

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

    您好、Sal、感谢您就此问题再次与我联系。

    我认为我们不使用嵌套中断、因为根据数据表、唯一优先级高于 TIMER_B0 的中断如下:



    我们有一个地址 0xFFFC 的陷阱中断处理程序可以触发看门狗、但我们肯定不会遇到看门狗复位、因为程序会在问题发生后继续执行。 但是、一旦调用位于擦除地址区域中的函数、该命令就会停止。

    此问题基本上与 FLASH27 非常相似、不同之处在于程序执行会继续、并且我们不会在 TIMER_B0 ISR 中使用任何 RETI 指令。

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

    尊敬的 Diogo:

    我不相信我们有嵌套中断、因为根据数据表、唯一优先级高于 TIMER_B0 的中断如下:

    是否会发生任何其他中断的优先级低于计时器?

    计时器中断可以是嵌套中断源。 也许我们可以保持计时器中断、并禁用所有其他中断来测试这种情况。

    B.R.

    Sal