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.

[参考译文] MSP430FR2633:FRAM数据保留问题

Guru**** 2534260 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/616769/msp430fr2633-fram-data-retention-issue

部件号:MSP430FR2633

大家好,

我正在使用 MSP430FR2633 电容式触摸微控制器。

我已经开发了电容式触摸按钮,滑块的应用程序,它具有我们自己设计的电路板,并且使用FRAM技术在数据保留方面运行良好。

问题:

我正在 FRAM中存储电容式触摸按钮状态的数据,存储正常,但当存储在多个地址中的多个按钮时,微控制器的行为会发生变化,因为当我触摸其他按钮时,按钮会突然熄灭。

可能是什么问题?

下面是我存储 数据的方法。


#define FRAM_TEST_Start1 0xCABB
#define FRAM_TEST_Start2 0xCABC
#define FRAM_TEST_START3 0xCABD
#define FRAM_TEST_START4 0xCAPE
#define FRAM_TEST_Start5 0xCAB1

用于访问地址数据的指针

uINT8_t * stored_data1,* stored_data2,* stored_data3,* stored_data4,* stored_data5;

将数据写入FRAM地址

FRAMCtl_write8 (delay_set1,(uint8_t *) FRAM_TEST_START1,1);
delay_ms(1);

FRAMCtl_write8 (delay_set1,(uint8_t *) FRAM_TEST_START2,1);
delay_ms(1);

FRAMCtl_write8 (delay_set1,(uint8_t *) FRAM_TEST_START3,1);
delay_ms(1);

FRAMCtl_write8 (delay_set1,(uint8_t *) FRAM_TEST_START4,1);
delay_ms(1);

FRAMCtl_write8 (delay_set1,(uint8_t *) FRAM_TEST_START5,1);
delay_ms(1);

来自地址的数据访问

stored_data1 =(uint8_t *) fRAM_test_start1;
__DELAY周期(1000);
stored_data2 =(uint8_t *) fRAM_test_start2;
__DELAY周期(1000);
stored_data3 =(uint8_t *) frm_test_START3;
__DELAY周期(1000);
stored_data4 =(uint8_t *) frm_test_startt4;
__DELAY周期(1000);
stored_data5 =(uint8_t *) fRAM_test_start5;
__DELAY周期(1000);

谢谢,此致,

Sanath Rai

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

    感谢您的帖子。 您运行CPU的速度是否超过8MHz? 如果是,您是否正确配置了FRAM等待状态?

    此致,

    詹姆斯

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

    您好,James:

    感谢您的回复。

    CPU速度不超过8MHz。 运行频率为3.2768万Hz。

    此致,

    Sanath Rai

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

    您好,

    感谢您提供此信息。 由于运行频率为32.768kHz,您是否从低功耗模式(LPM)唤醒并立即写入FRAM? 数据表中的表5-3提到,当从LPM中出来时,激活活动模式(AM)下的FRAM需要额外的唤醒时间10us。 同样,这是从LPM到AM的唤醒时间之外的额外唤醒时间。 这是您在代码中考虑的内容吗?

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好,

    仔细查看您的代码,我担心您将数据放在程序FRAM中,而不是信息FRAM中。 我强烈建议您将起始地址从0xCABB更改为0x1800。 此外,注意FRAM写保护设置和建议也非常重要。

    下面是我们的FRAM写入代码示例,是一个很好的参考。 正如您在FRAMWrite()函数中所看到的,FRAM密码是提供的,信息FRAM在函数的开头是不受保护的。 最后,将再次提供FRAM密码,并再次保护信息FRAM。 程序FRAM始终保持锁定状态。

    MSP430_fr243x_framwrite.c

    /*--版权--,BSD_EX
    *版权所有(c) 2014,Texas Instruments Incorporated
    *保留所有权利。
    *
    **
    允许以源代码和二进制格式重新发布和使用,无论是否进行*修改,只要
    满足以下条件*:
    *
    ****重新发布源代码必须保留上述版权
    *声明,此条件列表和以下免责声明。
    *
    ***以二进制格式重新分发时,必须在
    
    随分发提供的*文档和/或其他材料中复制上述版权*声明,此条件列表和以下免责声明。
    *
    ***
    
    未经事先书面许可,不得使用德州仪器(TI)公司的名称或*其贡献者的名称来支持或促销由本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *,
    
    不提供任何明示或暗示的担保,包括但不限于*对适销性和特定*用途适用性的暗示担保。 在任何情况下,版权所有者或
    *贡献者均不对任何直接,间接,附带,特殊,
    *示范, 或后果性损害(包括但不限于
    *购买替代商品或服务;使用,数据或利润损失;
    (*或业务中断),但根据任何责任理论
    ,*无论是合同,严格责任还是侵权行为(包括疏忽或
    *其他),均因使用本软件而导致*
    ,即使已被告知此类损害的可能性。
    *
    ******************
    *
    ** MSP430代码示例免责声明
    *
    MSP430代码示例是独立的低级程序
    ,通常*以高度
    *简洁的方式演示单个外设功能或器件功能。 因此,代码可能依赖于设备的开机默认
    值*寄存器值和设置(如时钟配置),
    在合并多个示例中的代码时必须*小心,以避免潜在的副作用
    *。 另请参阅www.ti.com/grace了解GUI,并参阅www.ti.com/msp430ware
    *了解外围设备配置的API功能库方法。
    *
    **--/copyright--*//************************************************************************************************************************
    
    // MSP430FR243x演示-长字写入FRAM
    ////
    说明:使用长字写入写入到512字节的FRAM块。
    //每写入100次后切换LED。
    //注:长时间运行此示例将影响FRAM
    //耐久性。
    // ACLK = REFO,MCLK = SMCLK =默认DCODIV =~1MHz
    ////
    建议在代码写入主FRAM时禁用中断,
    //因为
    在禁用// PFWP的情况下运行中断服务例程会很危险。
    //此代码示例使用的是不会有危险的DFWP。 但是
    ,如果用户使用PFWP,则//建议禁用中断。
    ////
    MSP430FR2433
    // --------
    // /|\\| |//
    || |//
    --|RST |//
    | |//
    | 6.0 1.0 |--> LED
    ////
    Ling Zhu
    //德州仪器(TI)
    // 2015年2月
    //采用IAR嵌入式工作平台v,6.20 和Code Composer Studio版本构建
    
    #include <MSP40.0.h>
    
    void FRAMWrite(void);
    
    unsigned char count =0;
    unsigned long *FRAM_write_ptr;
    unsigned long data;
    
    #define FRAM_test_start 0x1800
    
    
    int main(void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    P1OUT &=~BIT0; //清除WFP 1.0 输出闩锁,以确定开机状态
    P1DIR || BIT0; //将WFP 1.0 设置为OUTPUT方向输出
    
    PM5CTL0 &=~LOCKLPM2; //禁用GPIO开机默认高阻抗模式
    //以激活先前配置的端口设置
    数据= 0x1111.1111万; //初始化虚拟数据
    
    同时(1)
    {
    数据+= 0x1.0001万;
    fRAM_write_ptr =(unsigned long *) fRAM_test_start;
    FRAMWrite();
    COUNT++;
    IF (计数> 100)
    {
    P1OUT ^= 0x01; //切换LED以显示512字节
    计数= 0; //已编写
    数据= 0x11.1111万111111;}</s>11.1111万
    
    }
    }
    
    作废FRAMWrite (void){
    
    无符号int i=0;
    
    SYSCFG0 = FRWPPW | PFWP;
    (i = 0;i < 128;I++)
    {
    *FRAM_WRITE_PTR++=数据;
    }
    SYSCFG0 = FRWPPW | PFWP | DFWP;
    }
    

    此致,

    詹姆斯

    MSP客户应用程序

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

    您好,James:

    非常感谢您提供的宝贵信息。

    我将进行必要的更改并查看。

    谢谢,此致,

    Sanath Rai