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.

[参考译文] MSP430F5438A:整体擦除期间复位

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/869093/msp430f5438a-reset-during-mass-erase

器件型号:MSP430F5438A

你(们)好。

我正在尝试通过 SPI 从另一个处理器升级我的 MSP430。 MSP 主代码检测升级请求并开始执行一些在 RAM 中运行的升级代码。

升级代码首先执行批量擦除、然后通过 SPI 接收升级负载、并每次写入一个闪存段。  

有时、MSP430会在批量擦除期间复位、从而有效地对其进行编程。  

在执行升级代码之前将 MSP 置于低功耗模式可解决此问题。

在批量擦除引起的复位期间、我探测了 MSP430 3.3V 电源、并且没有发现任何不规则情况、导致复位的原因是什么?

谢谢、

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

    你(们)好  

    是否在执行批量擦除之前禁用了中断?

    此致

    Gary

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

    是的、我已经尝试过、MSP 仍然会复位。

    下面是我的批量擦除代码的一个片段:

       //在批量擦除前将 MSP 设置为 LPM 可防止复位
       //_bis_SR_register (LPM4_bits + GIE);
       
       _disable_interrupt ();
       //检查忙位
       while (FCTL3 & Busy){}
       //解锁闪存并设置为批量擦除
       FCTL3 = FWKEY;
       FCTL1 = FWKEY + MERAS + ERASE;
       __data20_write_char (0x5c00、0);
       //检查忙位
       while (FCTL3 & Busy){}
       //设置锁定位
       FCTL3 = FWKEY + LOCK;
       _enable_interrupt ();

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

    你(们)好  

    为什么在  擦除期间执行__data20_write_char (0x5c00、0)?

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

    您好!

     _data20_WRITE_char (0x5c00、0)执行虚拟写入作为整体擦除过程的一部分、0x5c00是闪存存储器的开始。

    谢谢、

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

    您的代码位于何处? 擦除选项是否会擦除代码区域?所执行的代码不能位于要擦除的组中。

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

    代码位于闪存中并复制到 RAM、然后在 RAM 中执行。

    谢谢、

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

    您能否制作可重现此问题的示例代码? 我可以设置一个硬件来在我这边做一些测试研究。