如题,
出现问题的概率以前是,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操作不正常,应该还有其他问题的表现。查找问题就要抽丝剥茧,逐步排查。