如题,
出现问题的概率以前是,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);
}