TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F4152擦除INFO区出现错误:全部FLASH读出为0x7fff.包括程序区和INFO区.

如题,

出现问题的概率以前是,100片里面大约1~2片,最近一次出现的概率增大很多:100片里面出现20片.

出现问题的板子,手工更换芯片后,板子正常.

出现问题的板子,用热风枪把风速和温度调到最低,慢慢对芯片加热,尽量不加热其他周边器件,当温度增高到手感50℃以上时,板子恢复正常,当温度降到当前室温大约30℃后,表现出问题.

用仿真器,仿真,发现程序运行在擦除操作之前时,INFO区和代码区正常,当程序运行到擦除操作后,INFO区和代码区,所有数据都变成了 ….0x7f 0xff 0x7f 0xff….. 仿真无法继续,单步停留在擦除操作位置.

下面是我的怀疑,

1>板子是请加工厂焊接的,是否焊接温度过高或时间过长,是否会引起MSP430出现这种问题?

2>这个芯片是支持LCD的,我没用到LCD功能,所以R33/LCDCAP引脚是悬空的,是否这个脚悬空会引起MSP430出现这种问题?如果不悬空,建议怎样接?

3>因为以前出现问题的概率比较小,并且只要是正常的板子,在更宽的温度范围内都正常工作,是否是MSP430的个别芯片品质有问题?

部分代码:

//seg:0–3
void FlashErase(unsigned char seg)
{
  unsigned int adr;
  if(seg>3) return ;
  FCTL2 = FWKEY | FSSEL_0 | 9;//时钟32767,分频10
  //while(FCTL3 & BUSY);//忙,则等待
  FCTL3 = FWKEY;//清除LOCK
  while(FCTL3 & BUSY);//忙,则等待
  FCTL1 = FWKEY + ERASE;//使能段操作
  while(FCTL3 & BUSY);//忙,则等待                                          <——————–有时,这里会出错!  info区和代码区 读出全是0x7fff
  adr=seg;
  adr<<=6;//64;
  adr+=0x1000;
  *(unsigned char *)adr = 0xff; //向段内任意地址写,即空写入,启动擦除操作
  while(FCTL3 & BUSY);                                                                <——————–有时,这里会出错!  info区和代码区 读出全是0x7fff
  FCTL1 = FWKEY;
  while(FCTL3 & BUSY);
  FCTL3 = FWKEY + LOCK;
  while(FCTL3 & BUSY);
}

gaoyang9992006:

http://www.ti.com.cn/cn/lit/er/slaz194i/slaz194i.pdf

看看勘误表,是不是提到这个问题了。

灰小子:

注意flash定时器使用的编程频率。手册里推荐的是257~476kHz。

实际配置时不要太卡边。

Xue Gang Sun:

把FCTL2赋值为 FWKEY+FSSEL_1+40 后,上述程序能够运行通过,但是其他程序出现问题.

以前的FSSEL_0,用的是ACLK,改成FSSEL_1后用的是MCLK,所以怀疑ACLK有问题,所以,在主程序里做了以下改动:

请指点一下,怎样解决这个问题?   (Osc. Fault Interrupt Flag 震荡失败标志不能清除?)

灰小子:

回复 Xue Gang Sun:

感谢分享你的经验。

症现于四肢五官,病存于五脏六腑。

晶振震荡不正常,除了flash操作不正常,应该还有其他问题的表现。查找问题就要抽丝剥茧,逐步排查。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F4152擦除INFO区出现错误:全部FLASH读出为0x7fff.包括程序区和INFO区.
分享到: 更多 (0)