搜索
bottom↓
回复: 6

M430F2013 info 掉电后info flash里面的数据丢了,如果写了之后..

[复制链接]

出0入0汤圆

发表于 2015-5-5 08:11:11 | 显示全部楼层 |阅读模式
本帖最后由 苹果520 于 2015-5-5 08:23 编辑

求助各位430的大侠:
                                M430F2013 info 掉电后info flash里面的数据丢了,如果写了之后马上查看info里面的消息。会发现写的数据都是对的。但是掉电之后再去读取数据就都没有了。(有时候可以成功,有时候不成功!!!)很不解!!!!望大侠指点! 在线等!!!!
下面附上代码:
配置也改了:



#include <msp430.h>


char  value;                                // 8-bit value to write to segment A
#define Flash_PtrA  (char *)0x10B0;             // Initialize Flash segment A pointer
#define Flash_PtrB  (char *)0x1080;             // Initialize Flash segment B pointer
#define Flash_PtrC  (char *)0x1040;             // Initialize Flash segment C pointer
#define Flash_PtrD  (char *)0x1000;             // Initialize Flash segment D pointer
unsigned char aabb[10]={4,9,1,8,5,6,7,4,9,11};
unsigned char ccdd[10]={0,1,1,1,1,1,1,1,1,1};
// Function prototypes
void write_SegX(unsigned char sSegment,unsigned char *sValue,unsigned char sLength);
void Read_SegX(unsigned char sSegment,unsigned char *sValue,unsigned char sLength);



int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  if (CALBC1_12MHZ==0xFF)                                        // If calibration constants erased
  {                                                                                       
    while(1);                               // do not load, trap CPU!!       
  }
  DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  BCSCTL1 = CALBC1_12MHZ;                    // Set DCO to 12MHz
  DCOCTL = CALDCO_12MHZ;
  FCTL2 = FWKEY + FSSEL_2 + FN2 + FN5;             // MCLK/3 for Flash Timing Generator
  
  value = 0;                                // initialize value
//  write_SegX(1,aabb,10);
  Read_SegX(1,ccdd,10);

  while(1)                                  // Repeat forever
  {
  //  write_SegC(value++);                    // Write segment C, increment value
  //  copy_C2D();                             // Copy segment C to D
   // __no_operation();                       // SET BREAKPOINT HERE
  //  Read_SegX(1,ccdd,10);
  }
}


void write_SegX(unsigned char sSegment,unsigned char *sValue,unsigned char sLength)
{
  char *Flash_ptr;                          // Flash pointer
  unsigned int i;
  switch(sSegment)
  {
    case 1:
    Flash_ptr = Flash_PtrD;              // Initialize Flash pointer
    break;
    case 2:
    Flash_ptr = Flash_PtrC;              // Initialize Flash pointer
    break;
    case 3:
    Flash_ptr = Flash_PtrB;              // Initialize Flash pointer
    break;
    case 4:
    Flash_ptr = Flash_PtrA;              // Initialize Flash pointer
    break;   
  }
//  Flash_ptr = (char *) 0x1040;              // Initialize Flash pointer

  _DINT();
  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<sLength; i++)
  {
    *Flash_ptr++ = sValue;                   // Write value to flash
      //   while((FCTL3 & BUSY) == BUSY);      //Busy
  }

  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
  _EINT();
}

void Read_SegX(unsigned char sSegment,unsigned char *sValue,unsigned char sLength)
{
   char *Flash_ptr;                          // Flash pointer
  unsigned int i;
  switch(sSegment)
  {
    case 1:
    Flash_ptr = Flash_PtrD;              // Initialize Flash pointer
    break;
    case 2:
    Flash_ptr = Flash_PtrC;              // Initialize Flash pointer
    break;
    case 3:
    Flash_ptr = Flash_PtrB;              // Initialize Flash pointer
    break;
    case 4:
    Flash_ptr = Flash_PtrA;              // Initialize Flash pointer
    break;   
  }
  for (i=0; i<sLength; i++)
  {
    sValue = *Flash_ptr++;          // copy value segment C to segment D
  }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-5-5 08:37:27 | 显示全部楼层
最好用串口把INFO中的数据发出来,用仿真器进去看不一定可靠

出0入0汤圆

 楼主| 发表于 2015-5-5 09:15:58 | 显示全部楼层
eastboy 发表于 2015-5-5 08:37
最好用串口把INFO中的数据发出来,用仿真器进去看不一定可靠

条件有点限制,没有办法

出0入0汤圆

发表于 2015-5-5 19:37:36 | 显示全部楼层
IAR有个设置,每次调试擦不擦info

出0入0汤圆

发表于 2015-5-5 19:44:26 | 显示全部楼层
刚看了图, 设置没问题.
msp430f4250试过,info能留下来

出0入0汤圆

 楼主| 发表于 2015-5-5 20:09:46 | 显示全部楼层
swap2013 发表于 2015-5-5 19:44
刚看了图, 设置没问题.
msp430f4250试过,info能留下来

可以把你的代码贴出来吗?

出0入0汤圆

发表于 2015-6-27 19:06:35 | 显示全部楼层
要注意当工作电压低于2.7V或以下时,就不能写FLASH,否则就不好说了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 17:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表