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

MSP430FR6972部分样机复位无效32K及8M停振需断电重启,现象可反复重现;请帮忙分析解决,谢谢!

1 硬件方案:6972+按键+电池供电电压采样+SPI接口无线模块+小电机驱动+LED,一节锂电池供电。产品低功耗模式

2 程序烧录:主要采用TI的GANG430,编程器供电。

3 出现概率、数量:  

                    第一批次,去年15张样板出现一例:运行1天后32K、8M停振、RST脚复位无效,需断电重新启动,更换CPU之后恢复正常。问题CPU换                                                     到 裸 板上运行可反复重现;

                    第二次,最近30张样板:1)先有2张发生在配置阶段:烧程序之后电脑通过USB-TTL模块配置样机参数,先连接电缆,再上电池,无其他外设, 发现                                      不能配置,LED跑马灯运行10秒左右随机停在某个位置,RST复位后32K\8M晶体停振,后来只运行闪灯程序反复休眠和激活也会 停下来;2)                                    更换CPU之后再次发现一张同样现象。3)样机测试中不久发现1张直接32K 8M停振,断电重启5分钟内重现。

4 共性问题:1这些现场发生CPU只能断电重启。

5 问题求助:1 )这些现象是CPU是否已经发生损伤部分失效?

                        2)这些现象的原因:发生现象的直接原因是什么?哪个环节导致?

                       3)芯片有无特殊需要注意的地方?5418A,4152量产也没出现过这类问题。

灰小子:

可能的原因比较多:

1、mcu的问题,建议核实mcu进货来源,建议从ti官网或者正规代理商进货,不要在某宝采购

2、pcb,建议检查晶振相关电路的pcb走线、打样的质量,干扰源等

Maka Luo:

sir feng

1 硬件方案:6972+按键+电池供电电压采样+SPI接口无线模块+小电机驱动+LED,一节锂电池供电。产品低功耗模式

2 程序烧录:主要采用TI的GANG430,编程器供电。

3 出现概率、数量:  

                    第一批次,去年15张样板出现一例:运行1天后32K、8M停振、RST脚复位无效,需断电重新启动,更换CPU之后恢复正常。问题CPU换                                                     到 裸 板上运行可反复重现;

                    第二次,最近30张样板:1)先有2张发生在配置阶段:烧程序之后电脑通过USB-TTL模块配置样机参数,先连接电缆,再上电池,无其他外设, 发现                                      不能配置,LED跑马灯运行10秒左右随机停在某个位置,RST复位后32K\8M晶体停振,后来只运行闪灯程序反复休眠和激活也会 停下来;2)                                    更换CPU之后再次发现一张同样现象。3)样机测试中不久发现1张直接32K 8M停振,断电重启5分钟内重现。

4 共性问题:1这些现场发生CPU只能断电重启。

5 问题求助:1 )这些现象是CPU是否已经发生损伤部分失效?

                        2)这些现象的原因:发生现象的直接原因是什么?哪个环节导致?

                       3)芯片有无特殊需要注意的地方?5418A,4152量产也没出现过这类问题。

sir feng:

回复 Maka Luo:

谢谢!芯片走的正规渠道。

问题CPU拆到裸板上面只看灯和按键,同样现象,而且已经测到32K死掉不是原因而是结果。复位后起振前可以输出IO口。晶体布局如下:

          

      32K晶体为圆柱 负载电容12.5PF  ,匹配电容为15PF 实测晶体32.7682KHZ,晶体在顶层,晶体下面有铜区。

      即使晶体32K不振,但是复位为何不响应?

Delta:

回复 sir feng:

复位后也很难确定是否不运行。取决于振荡器配置。

排查方法有几个方法:

1,做以下测试时,把时钟总线输出到IO口做监测,看是否真的停振了?

2,时钟配置的代码是否可以发上来看看?

3,只使用内部DCO,不休眠,会不会出现以上现象?

4,32K配的电容应该是不对的,再仔细看看你的晶振规格书,和IC规格书的有关参数。

sir feng:

回复 Delta:

#include <msp430.h>#include <inttypes.h>

#define LIGHT_NET_FLASH P3OUT ^= 0x01#define LIGHT_RSSI_FLASH P3OUT ^= 0x02#define LIGHT_FLASH P6OUT ^= 0x20

#define F_CPU 8000000UL

void HAL_Init(){ WDTCTL = WDTPW + WDTHOLD; P3DIR = 0xFF; P6DIR = 0xFF; PM5CTL0 &= ~LOCKLPM5;

PJSEL0 |= 0xF0; PJSEL1 &= 0x0F;

CSCTL0_H = CSKEY >> 8;

CSCTL1 = DCOFSEL_0; CSCTL2 = (CSCTL2 & ~(SELM_7 | SELS_7 | SELA_7)) | (SELM__HFXTCLK | SELS__HFXTCLK | SELA__LFXTCLK); CSCTL3 = DIVM__1 + DIVS__1 + DIVA__1; CSCTL4 = HFFREQ_1 | HFXTDRIVE_0 | VLOOFF; do { CSCTL5 &= ~(LFXTOFFG + HFXTOFFG); SFRIFG1 &= ~OFIFG; uint16_t i; for (i = 0; i < 0xFFFF; i++) ; } while (SFRIFG1 & OFIFG); CSCTL0_H = 0;}

void Timer_Init(){ TA0CTL = TACLR; TA0CTL = TASSEL__ACLK | MC__CONTINOUS | TAIE; TA0CCTL0 &= ~CCIE;}

void Timer_ASNStart(){ TB0CTL = TBCLR; TB0CTL = TBSSEL__ACLK | MC__UP; TB0CCR0 = 1000; TB0CCTL0 = CCIE;}

#pragma vector=TIMER0_A1_VECTOR__interrupt void Timer0_A1_Handler(){ if (TA0CTL & TAIFG) { TA0CTL &= ~TAIFG; LIGHT_NET_FLASH; }}

#pragma vector=TIMER0_B0_VECTOR__interrupt void Timer0_B0_Handler(){ LIGHT_RSSI_FLASH; LPM3_EXIT;}

int main(){ HAL_Init();

Timer_Init(); Timer_ASNStart(); _EINT(); while (1) { LIGHT_FLASH; LPM3; }

}

zhifang yang1:

回复 sir feng:

1 打开watch dog,watch dog 的主要用途就是用来cover你所述的这种case,程序跑飞之后可以reset回来。 

按我们公司的设计标准watch dog是不允许常关或长时间关闭的。

2 把NMI打开。 不清楚你所说的无法重置,是软重置还是硬件重置。 拉RST/NMI 这个脚不可能不能让MCU重置的。

看一下你系统中断向量 0xFFFE(Reset)  0xFFFC (PMM) 0xFFFA(flash,oscillator ) 这几个中断向量指向哪里? 是否有做ISR函数?

看你的描述很有可能是外部(比如ESD)或者内部(flash 读写操作未按流程进行)等触发了以上的NMI , 而你又没配置相应的 ISR ,默认我记得应该是跳转到TI_ISR_TRAP 里,spin forever了。

3 未用或者悬空的脚从 input 改成output low with pull down,抗外部干扰能力会更强。

外部IO如果出现高于系统Vdd + 0.7V 的情况会从端口的施密特触发器上管倒灌到芯片内部。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430FR6972部分样机复位无效32K及8M停振需断电重启,现象可反复重现;请帮忙分析解决,谢谢!
分享到: 更多 (0)