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.

MSP430F149 信息存储区sega数据丢失?

Other Parts Discussed in Thread: MSP430F149

       项目中使用低功耗单片机MSP430F149,线路板采用3.6V锂电池(最大电压4.2V)直接供电,设备的运行参数保存在SEGA的开始20多个字节,每次上电程序都会读取这些参数并校验如果标志字不对就恢复默认的参数,每台设备设置完成后入库(部分带电池长期运行,部分去掉电池),过段时间再次上电读取参数时有很多设备(大概1/3) 的参数都复归了,说明程序读出来的校验标志字不对了,同时也不能保证其他设置参数的正确性。

       请专家帮忙分析一下是读flash的SEGA程序不对还是在某种情况下存在SEGA中的参数出现错误或者丢失所致呢?

      线路板硬件:单片机外部配置XT1= 32.768kHz   XT2=8.000MHz,锂电池的3.6V(最大4.2V)电压直接给MSP430供电,未经过LDO变化为3.3V,程序中使能了看门狗,使用ACLK(32.768kHz)作为时钟源,在TIMERB的比较中断(CCR1=655,约20ms)中喂狗,而且是累积50次中断喂一次。

  • 若是可以的话,请给出相关代码,谢谢。

    关于SegA,在MSPware内有一个例程,您可以参考一下

    fet140_flashwrite_01.c Flash In-System Programming, Copy SegA to SegB

    dev.ti.com/.../node
  • 您好, 可以的, 代码详细如下

    相关代码如下:
    1、下面的是写信息存储处器函数:
    // 写Flash Seg
    void Flash_Write_Seg( uint Addr,uchar *value,uchar Len )
    {
    uchar *Flash_ptr; // Flash pointer
    uint i;

    uchar reg1,reg2;
    reg1 = _BIC_SR(GIE);
    reg2 = IE1;IE1=0; // 保护原来中断标志,并关闭有关中断。

    Flash_ptr = (uchar *) Addr; // Initialize Flash pointer
    FCTL1 = FWKEY + ERASE; // Set Erase bit
    FCTL3 = FWKEY; // Clear Lock bit
    *Flash_ptr = 0; // Dummy write to erase Flash segment

    FCTL1 = FWKEY + WRT; // Set WRT bit for write operation

    for( i = 0; i < Len; i++ )
    {
    *Flash_ptr++ = value[i]; // Write value to flash
    }

    FCTL1 = FWKEY; // Clear WRT bit
    FCTL3 = FWKEY + LOCK; // Set LOCK bit

    if( reg1 & GIE ) _BIS_SR(GIE); // 恢复中断标志

    IE1=reg2;

    return;
    }

    调用格式为: Flash_Write_Seg(SegA_Addr,dat,24);
    其中 SegA_Addr 宏定义 #define SegA_Addr 0x1080

    2、读取SEGA函数如下:

    void Flash_Read( uint wAddr, uchar *bBuf, uchar bLen )
    {
    while( bLen-- )
    *bBuf++=*(uchar *)wAddr++;

    return;
    }

    调用格式:Flash_Read( SegA_Addr, dat1, 24 );
  • 写入后,直接读出的话,数值是否相同?

    看了一下您的代码,并未发现问题。您可以试一下我之前贴出来的例程,看是否能复现问题

    在论坛有一个分享贴,您可以参考一下:

    e2echina.ti.com/.../30948

    另外在操作flash时,电压需要为 2.7-- 3.6V,还要一些其他参数,您可以看一下数据手册的 5.29 Flash Memory

    或用户指南第5章

    Note: Minimum VCC During Flash Write or Erase

    The minimum VCC voltage during a flash write or erase operation is 2.7 V.
    If VCC falls below 2.7 V during a write or erase, the result of the write or erase will be unpredictable.
  • 好的,十分感谢您的热心帮助,再去查查