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.

[参考译文] CCS/MSP430G2553:重新启动后未保存闪存值

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/574924/ccs-msp430g2553-flash-value-not-saved-after-restart

部件号:MSP430G2553

工具/软件:Code Composer Studio

大家好,

我有以下代码:

#include <msp430g2553.h>

#define end_of_flash 0x0FFFF

void WriteToFlash(LON* Flashptr,Long val);
void ReadFromFlash(LON* address, Long* val);

int main(void){
	WDTCTL = WDTPW + WDTHOLD;
	BCSCTL1 = CALCBC1_1MHz; //将DCO设置为1MHz
	DCOCTL = CALDCO_1MHz;
	FCTL2 = FWKEY + FSSEL0 + FN1;

	WriteToFlash ((长*) 0xFFF01234567);
	长val;
	ReadFromFlash ((长*) 0xFFF0, &val);
	返回0;
}


void WriteToFlash (长*地址,长val)
{
	长* flash_ptr;
	flash_ptr =地址; //初始化闪存指针
	FCTL1 = FWKEY +擦除; //设置擦除位
	FCTL3 = FWKEY; //清除锁定位
	*FLASH_PTR = 0;
	FCTL1 = FWKEY + WRT;
	*FLASH_PTR = val;
	FCTL1 = FWKEY; //清除WRT位
	FCTL3 = FWKEY + LOCK; // set lock bit
}

void ReadFromFlash(Long* address, Long* val)
{
	Long* flash_ptr;
	flash_ptr =地址;
	*val =*flash_ptr;
}

在闪存中插入123.4567万,我可以读取此代码,但当我注释WriteToFlash并尝试再次运行它时,我希望读取相同的值,但值错误。

我缺少什么?

感谢你的帮助  

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

    是否确定使用新固件重新刷新控制器不会擦除以前写入的数据?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复,
    我正在刷新新固件,但我不知道是否擦除了,我尝试在manaual上检查,但刷新后没有擦除
    如何检查?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上,刷新固件会擦除整个代码内存。 您应改为使用信息存储器。 确保固件闪光灯已配置为_NOT清除信息内存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用信息存储器B至D (最好保留A,因为它包含校准数据)并配置CCS,使其在刷新固件时不擦除信息段。

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

    您好,感谢您的回复

    如果我没有将程序重新刷新到控制器中, 主存储器是否保存数据?

    例如,我正在将数字20设置为地址0xFFE00 ,我可以毫无问题地读取该值,但当我只关闭并打开设备电源(而不是设置新程序)时,它不会保存该值

    我连接了一个LCD以查看我正在检索的值,我得到了默认值和我存储的内容。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我的代码中,我看到我在擦除中错过了繁忙部分,在写模式中添加此部分会保存数据