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.

[参考译文] MSP430F6659:擦除闪存组时出错

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1034441/msp430f6659-error-erasing-flash-bank

器件型号:MSP430F6659

您好!  

我的闪存组清除子例程遇到了问题。

在开始执行程序或复位后、我始终删除相同的存储器组。


通常情况下、它可以正常工作、但有时 BUSY 标志保持激活状态、并且不会退出子例程。

这是我的子例程。

void cmdFlash_BANK_Erase (uint8_t * flashAddress){
  SFRIE1 ~WDTIE;             //可禁用 WDT 中断
  WDTCTL = WDTPW | WDTHOLD;         //停止 WDT
  执行{}while (FCTL3 & Busy);         //等待!忙

  FCTL3 = FWKEY;               //清除锁定位
  FCTL1 = FWKEY |MERAS;            //为段擦除设置擦除位

  * flashAddress = 0;            //虚拟写入以擦除闪存段

  执行{}while (FCTL3 & Busy);         //等待!忙

  FCTL3 = FWKEY | LOCK;            //设置锁定位
  SFRIE1 |= WDTIE;              //启用 WDT 中断

我做了些什么错? 此错误的原因可能是什么?

我可以长时间( 几分钟)使 WDT 保持活动状态、这样在正常操作中它不会影响擦除闪存、如果擦除过程失败、那么微闪存可以恢复吗?


此致、

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

    尊敬的 Marcos:

    问题发生在一个芯片还是多个芯片上?  您可以尝试另一个器件来查看是否会发生这种情况。 是否仅在组擦除中发生?  

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

    您好、Allen、
    MSP430F6659的多个电路板上出现了此问题(电路板相似)、但  如果不发生这种情况、可能需要数月的时间。 我每天复位闪存组一次。 只会删除闪存组。

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

    尊敬的 Marcos:

    发生这种情况时、电源或时钟是否异常?  剂量这在多个特定的板上始终重复?

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

    发生异常时、我没有在时钟和电源中检测到异常。 这是偶尔发生的错误。 有些电路板从未发生过这种情况、有些电路板在正常运行数周或数月后发生。
    我将设置一个测试、每20分钟循环重新启动一次微控制器、并检查时钟和源、尽管我认为如果时钟或电源出现故障、微控制器将重新启动。  在本例中、微控制器挂起、但我可以在 ACLK (引脚34)中看到16kHz 的频率。   

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

    尊敬的 Marcos:

    您是否已尝试将新器件更改为电路板以解决此问题? 您是否在这些电路板上找到了一些常见问题、或找到了重复此内容的方法? 如果您找到重复的方法、我们可能会找到原因。

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

    您好、Allen、
    在其中一个故障电路板上、我准备了一个测试、该测试周期性地擦除闪存组、通常在擦除过程中不会使微挂起超过10个周期。

    我更改了子例程以禁用所有中断、而不仅仅是 WD、它已经不再失败、并且已经达到了数百个清除周期。

    这现在是我的子例程:

    void cmdFlash_BANK_Erase (uint8_t * flashAddress){

    SFRIE1 ~WDTIE;//禁用 WDT 中断

    disable_interrupts ();

    WDTCTL = WDTPW | WDTHOLD;//停止 WDT
    执行{}while (FCTL3 & Busy);//等待!busy

    FCTL3 = FWKEY;//清除锁定位
    FCTL1 = FWKEY |MERAS;//为段擦除设置擦除位

    * flashAddress = 0;//虚拟写入以擦除闪存段

    执行{}while (FCTL3 & Busy);//等待!busy

    FCTL3 = FWKEY | LOCK;//设置 LOCK 位

    enable_interrupts ();

    SFRIE1 |= WDTIE;//启用 WDT 中断

    在示例中、在擦除闪存组之前、只有 WDT 被禁用。 是否需要禁用所有中断? 没错吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="310239" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1034441/msp430f6659-error-erasing-flash-bank/3830881 #3830881"]我更改了子例程以禁用所有中断,而不仅仅是 WD,它不再失败,并且已经达到数百个清除周期。

    您的中断处理程序是闪存中的中断处理程序还是已复制到 RAM 中?

    在闪存读取/写入期间执行中断 是之前使用 MSP430F6659进行的一项调查、该调查显示  了在闪存编程期间启用基于 RAM 的中断向量时发生的崩溃。

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

    尊敬的 Marcos:

    中断似乎对擦除闪存产生了一些影响。 正如 TT Chester 所提供的、在闪存操作中断期间、可能会导致不可预知的问题。