现象:设备自运行一段时间出现死机,目前200台中出现6台,死机后不会被狗咬重启(狗失效),外部无源晶振停振(示波器抓不到波形),只有通过拔插电池或者拉低rest脚才能重启,重启后又正常,在放置一段时间才会出现。
功能:设备启了2个定时器,TA3周期处理主业务,TA2定时触发ADC采集数据。TA3识别采集值,判断被采设备状态,如果异常mcu会从LPM3唤醒进入AM状态,上送数据到汇集,然后在切回LPM3;其中ADC由定时器触发,采用内部基准(初始化时候设置REFON=0),ADC采集完成触发中断,中断搬移数据到数据池。
配置:
定时器:
TA2CTL = 0;
TA2CTL |= TASSEL__ACLK
|MC__UP
|TACLR;
TA2CCTL0 = 0;
TA2CCTL1 = 0;
TA2CCTL0 &= ~(CCIE|CCIFG);
TA2CCTL1 &= ~(CCIE|CCIFG);
TA2R = 0;
TA2CCR0 = 0;
TA2CCR1 = 0;
TA2CCTL1 |= OUTMOD_7;
TA2EX0 = 0;
TA3CTL = 0;
TA3CTL |= TASSEL__ACLK
|MC__UP
|TACLR;
TA3CCTL0 = 0;
TA3CCTL0 &= ~(CCIE|CCIFG);
TA3R = 0;
TA3CCR0 = 0;
TA3EX0 = 0;
初始化完成后配置TA2CCR0,TA2CCR1(TA2CCR0>TA2CCR1); TA3CCR0, 及TA3中断使能。
ADC:
REFCTL0 |= REFVSEL_3; REFCTL0 &= ~REFON;
ADC12CTL1 |= ADC12SHP
|ADC12CONSEQ_1
|ADC12SHS_5
|ADC12SSEL_0;
ADC12CTL2 |= ADC12RES_2;
ADC12CTL3 |= ADC12CSTARTADD_5 | ADC12TCMAP | ADC12BATMAP;
ADC12MCTL5 |= ADC12VRSEL_1 | ADC12INCH_2 ;
ADC12MCTL6 |= ADC12VRSEL_1 | ADC12INCH_3 | ADC12EOS;
ADC12MCTL7 |= ADC12VRSEL_1 | ADC12INCH_6;
ADC12MCTL8 |= ADC12VRSEL_1 | ADC12INCH_30;
ADC12IER0 = ADC12IE6;
ADC12CTL0 |= ADC12ON
| ADC12MSC
| ADC12ENC
| ADC12SHT1_7;
时钟配置:
PJSEL0 |= PJ_LFXIN + PJ_LFXOUT;
FRCTL0 = FRCTLPW | NWAITS_1;
PM5CTL0 &= ~LOCKLPM5;
CSCTL0_H = CSKEY >> 8;
CSCTL1 = DCOFSEL_4 + DCORSEL;
CSCTL2 = SELA__LFXTCLK |SELM__DCOCLK;
CSCTL3 = DIVA__1
|DIVS__16
|DIVM__1;
CSCTL4 &= ~(LFXTOFF);
do {
CSCTL5 &= ~(LFXTOFFG|HFXTOFFG);
SFRIFG1 &= ~OFIFG; } while (SFRIFG1&OFIFG);
SFRIE1 |= (OFIE | VMAIE);
CSCTL0_H = 0;
目前怀疑踩到MSP430FR5969Erratasheet.pdf 中PMM24和PMM31
Device may enter lockup state during wake-up from LPM3 and LPM4
Device may enter lockup state during transition from AM to LPM2/3/4
The device might enter lockup state if the MODOSC is requested (e.g. triggered by
ADC) or removed (e.g. end of ADC conversion) during a power mode transition from AM
to LPM2/3/4 (e.g. during ISR exits or Status Register modifications).
麻烦各位大神帮忙看下,谢谢!!
灰小子:
这种情况也不能排除跑飞的。
可以先按照MSP430FR5969Erratasheet中的解决方法试一下
Susan Yang:
晶振停振是不是有可能是ESD的问题?
另外建议您先用LPM2或者LPM1试试还是否会出现这样的情况
ming li7:
回复 Susan Yang:
hi, Susan Yang
1、先前有做过3轮的4级防护测试,未发现问题。
2、LPM2模式测试暂时未出现问题。
3、调试版本引出MCLK、SMCLK、ACLK,发现出问题时候这几个输出脚都采不到频率。
麻烦帮忙看看会是什么问题导致这种现象(本地先前有尝试,越界、溢出、空访问、除0、擦除代码区访问都未出现类似问题)。
谢谢!!
ming li7:
回复 灰小子:
嗯嗯,已经在尝试挂机测试,暂未出现问题,谢谢!!
灰小子:
回复 ming li7:
3、调试版本引出MCLK、SMCLK、ACLK,发现出问题时候这几个输出脚都采不到频率。
这个是死机的时候采集不到,还是正常运行的时候采集不到?
死机的时候是msp430停止运行了,所以采集不到。
如果是正常运行的时候采集不到,要么是配置有问题,要么是msp430相关io坏了
ming li7:
回复 灰小子:
hi, 灰小子,正常时候能采集到,异常时候才采不到。
tingmeng yan:
回复 ming li7:
问题原因找到了吗?我现在也遇到你说的问题了,但是有时候能恢复,现场客户反馈有四台异常,10多天后客户寄回公司,返回后检查有只2台出现了异常。对异常的进行检测,现象如下:供电正常,晶振两个管脚电平都为0,感觉程序完全不运行,第二天设备恢复正常运行。
ming li7:
回复 ming li7:
PMM31本身不会影响晶振,但是MCU进入hang-up状态,WatchDog此时还在工作,会产生PUC,清除晶振和GPIO相关寄存器,但PUC不能恢复hang-up状态。—>可以参考下@tingmeng yan
tingmeng yan:
回复 ming li7:
那如何解决的?用外置看门狗?