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.

[参考译文] MSP430F5529:如何在重新编程时将数据保留在闪存中

Guru**** 2595770 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1091558/msp430f5529-how-to-retain-data-in-flash-memory-while-reprogramming

部件号:MSP430F5529

大家好,

以下是客户提出的问题,可能需要您的帮助:

数据的大小接近2 KB ,并存储在闪存中。

我们的客户希望在对MSP430F5529重新编程时保留它。

如果没有,是否有其他方法保留这些数据。

谢谢。

此致,

耶鲁

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

    大家好,

    下面是一个跟进问题:

    此客户在尝试将数据写入闪存时出错,并且重复出现的可能性为100 %。

    他提到了MSP430F55xx_flashwrite_01.c演示,下面是他的代码。

    #include <msp430f5529.h>
    
    char value;                                 // 8-bit value to write to seg C
    
    // Function prototypes
    void write_BankA(char value);
    void copy_C2D(void);
    
    int main(void)
    {
      WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
      value = 1;                                // initialize value
    
        write_BankA(value++);                    // Write Bank A, increment value
    //    copy_C2D();                             // Copy segment C to D
        __no_operation();                       // Loop forever, SET BREAKPOINT HERE
      
      while(1);
    }
    
    //------------------------------------------------------------------------------
    // Input = value, holds value to write to Bank A
    //------------------------------------------------------------------------------
    void write_BankA(char value)
    {
      unsigned int i;
      char * Flash_ptr;                         // Initialize Flash pointer
      Flash_ptr = (char *) 0x4400;            // Bank A address
      FCTL3 = FWKEY;                            // Clear Lock bit
      FCTL1 = FWKEY+ERASE;                      // Set Erase bit
      _DINT();                                  //no interrupt
      *Flash_ptr = 0;                           // Dummy write to erase Flash seg
      FCTL1 = FWKEY+WRT;                        // Set WRT bit for write operation
    
      for (i = 0; i < 128; i++)
      {
        *Flash_ptr++ = value;                   // Write value to flash
      }
      while(FCTL3 & BUSY);
      _EINT();
      FCTL1 = FWKEY;                            // Clear WRT bit
      FCTL3 = FWKEY+LOCK;                       // Set LOCK bit
    }

    重现步骤
    1.在IAR中编译代码
    2.下载和调试
    3.按“执行”,然后报告错误

    错误屏幕截图

    环境与 平台

    Windows10+IAR 7.12 .1.8

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

    您好,耶鲁

    很抱歉回复太晚。

    是的,如果客户 知道数据的位置,可以保留数据,并尝试更改内存管理文件(如CCS的cmd),以避免将代码或数据放在这些区域。   

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

    是否已将调试驱动程序从模拟器更改为FET调试器?

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

    您好,Gary

    感谢您的回答。

    我问了客户,他在板上使用了EZ-FET lite。

    我刚刚注意到第二个屏幕截图不清楚,下面是一个清晰的屏幕截图。 很抱歉。

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

    您是否可以在此处上传项目,让我检查项目配置?

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

    您好,Gary

    这是这个项目。

    FLASH_write01

    e2e.ti.com/.../Flash_5F00_Write.zip

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

    正如您所看到的,内存地址0x443B未被擦除后的数据。 这就是为什么它不能写入数据的原因。

    我建议客户可以在虚拟写入后进行一些延迟以擦除闪存并在此处设置一个中断点,以查看是否已成功擦除内存。

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

    感谢您的帮助,Gary。

    很抱歉延迟确认。