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.

[参考译文] MSP430I2041:需要数据存储

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/970278/msp430i2041-data-storage-required

器件型号:MSP430I2041

尊敬的:

我想在控制器存储器中存储一些仪器设置、这些设置可以在运行应用中进行修改、就像使用 EEPROM 存储器一样。

目前,我正在使用 INFO A 段(0x1000到0x1400)来存储数据,但在擦除整个段之前无法重新写入数据。

您能指导我们如何在该存储器中正确写入数据、或者您是否有任何其他解决方案。

我遵循以下流程。

FCTL2 = FWKEY | FSSEL_1 | FN1 | FN3 | FN5;//针对闪存时序发生器的 MCLK/42

if (FCTL3 & LOCKSEG)// If Info Seg is stil locked

FCTL3 = FWKEY | LOCKSEG;//清除 LOCKSEG 位

FCTL1 = FWKEY | WRT;

/addr 介于0x1000到0x1400之间、用于存储器

void write_EEPROM_memory (uint16 addr、uint16 value )

fram1_read =(volatile uint8 *) addr;
*fram1_read =值;

uint8 read_EEPROM_MEMORY (uint16 addr )

uint8 temp8;

fram1_read =(volatile uint8 *) addr;
返回 *fram1_read;

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

    您好、Rohit、

    您可以在 https://dev.ti.com/tirex/explore/node?node=AH1usbSuYSeImpZGDdBbhA__IOGqZri__LATEST 上找到闪存写入的代码示例

    Srinivas

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

    尊敬的 Shrinivas:

    我已经使用了相同的示例代码、问题是每当我尝试覆盖相同位置的值时、内存不会例外

    例如

    void main (void){
    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

    FCTL2 = FWKEY | FSSEL_1 | FN1 | FN3 | FN5;//针对闪存时序发生器的 MCLK/42

    WRITE_InfoSeg (Value++);//将值写入信息段,增量值

    while (1){
    __no_operation();//在此设置断点

    void write_InfoSeg (字符值){
    unsigned char * Flash_ptr;//闪存指针
    unsigned int i;

    Flash_ptr =(unsigned char *) SEGSTRT;//初始化闪存指针

    if (FCTL3 & LOCKSEG){// If Info Seg is stil locked
    FCTL3 = FWKEY | LOCKSEG;//清除 LOCKSEG 位

    FCTL1 = FWKEY | WRT;//为写入操作设置 WRT 位

    对于(I = 0;I < SEG_LEN;I++){
    *闪存_PTR++=值;//将值写入闪存

    FCTL1 = FWKEY;//清除 WRT 位
    FCTL3 = FWKEY | LOCKSEG;//设置 LOCKSEG 位

    在上面、如果我首先调用 write_InfoSeg (value++)、我将会很可爱、但当我再次调用此函数时、* Flash_ptr 不会更新并存储以前的变量值

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

    您好、Rohit、

    在您的代码中、在 main{}内、您只调用 一次 write_InfoSeg (value++)。 因此、我认为在第一次设置为"value"后、内存不会再次更新。

    Srinivas

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

    尊敬的 Shrinivas:

    非常感谢您的更新。  我需要控制器的128个字节来存储数据、并在运行的应用程序中频繁更新数据。 您能告诉我可以使用哪个位置以及如何使用。

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

    您好、Rohit、

    您应该能够使用信息段来实现此目的。 0x13FFh 至0x1000范围内的任何128字节都应该起作用。 您可以修改示例代码 的 write_InfoSeg()以包括要写入的特定位置。

    Srinivas