This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F6736:MSP430F6736转至"dead & quot;staus。

Guru**** 2382630 points
Other Parts Discussed in Thread: TLV809
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/662304/msp430f6736-msp430f6736-turn-into-dead-staus

部件号:MSP430F6736
主题中讨论的其他部件:TLV809

您好,TI员工,

我的问题发生在一个电表制造商身上。  在将30~50仪发送给最终用户之前,他们将从批次中随机抽取样品进行通电/断电测试。

然后发现2-3个电子仪 表变成了“死”状态。 只有一个电源循环才会使其返回(拉RST引脚低,没有影响。  S-8.0127万CLMC (如TLV809)与F6736的RST引脚连接

E-meter运行@16MHz(DCO)Vcore = PMMCOREV _2,在这里我粘贴了Vcc波形。 (VCC >2.2V )

我有两个问题需要您的帮助:

1)什么情况会导致此问题? 以及如何解决这个问题。

2) F6736 Erratasheet中的项目PMM26,我不知道当RST引脚被拉低时CPU如何仍然执行代码。

此致,

  Seafesse

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    当电源快速循环时,RST引脚可能会被拉低,而PMM_setVCore()函数(修改SVSMHCTL/SVSMLCTL寄存器并与PMM26相关)正在执行并导致设备锁定。

    使用默认DCO频率并注释PMM_setVCore()和相关函数时,问题是否仍然存在?

    此致,

    詹姆斯

    MSP客户应用程序
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,James:

    感谢您的快速响应。 默认的DCO频率不能满足应用程序的要求,因此即使它可以解决这个问题,它仍然不是一个解决方案。

    此问题不是个别情况,其它电子仪表制造商也经常遇到此问题,只是比率不高,通常发生在实验室(电源开/关测试),而不是应用领域。 客户有时会对这个问题视而不见……然而,当比率上升时,它又成了一个问题……它总是喜欢他们手中的手柄,这真的不是一种好的感觉:(………………………………………………………………………………………………………

    因此,我需要进行广泛深入的讨论,以找到最可靠的解决方案。 我在这里回顾了我个人在这个问题上的经验。我已经对他们进行了测试,发现Vcc纹波更像是根本原因。 当Vcc在SVS_it-以上的电压点下降 并再次上升时, MSP430s就会陷入"锁定"状态 ,这将成为一个很有可能发生的事件。  我知道MSP430的旧系列(F1x、F2x、F4x) 也面临此问题(Vcc下降缓慢 且深度不足,高于BOR_IT,并再次上升),如TLV809这样的器件始终是解决此问题的好选择。  F5xx \F6xx 具有PMM模块来解决问题。 因此,我们在E-meter制造商‘s enginner (F543x、F6736x…)方面拥有丰富的经验 ,我有自己的方法,调整SVS高压侧电压,确保波纹Vcc范围在SVSH_it-(如果Vcc不稳定,请确保MSP处于重置状态)下,这对我很有帮助。 但…But..it无法彻底解决问题。 根据F6736,的数据表,SVSH_it-的最大值 约为2.23V,这意味着如果Vcc下降到2.24V,并且上升,它将不会触发POR, 如果发生这种情况,可能会导致MSP陷入锁定状态,事实上,这是发生的。 这就是为什么客户通常需要添加电源监控器芯片(例如SP809、TLV809、8.0127万CLMC),尽管F6736已经具有PMM模块。

    这是最终解决方案吗?

    我不这么认为。  添加外部SVS芯片就像找到一种提高PMM模块中的SVSH_it-值的方法。 它可以帮助您,但使系统在更窄的Vcc范围内工作。 此外,如果MSP变成“锁定”状态,SVS芯片也将变得无用。 只有电源循环,才能使MSP430恢复。这就是为什么在添加exetern-SVS芯片时仍会出现此类现象的原因。

    因此,问题变成了另一个问题:

    Vcc如何工作并使MSP锁定? 或者边界条件是什么? dVcc/dt? Vcc下降的最低电压是多少? 还有事吗?

    我还想解释一下另一个原因。 DCO频率应符合Vcore\Vcc要求。 较高的MCLK需要较高的功率,因此当电源打开时,Vcc仍处于斜坡…如果条件不能满足,MSP430会卡住...这是有意义的,而且在PMM章节中也很好地说明了用户指导。  我认为这就是为什么你建议我使用默认的DCO设置(1MHz),低频率需要低Dvcc,因此在频繁的电源开/关情况下,这种情况可以更容易地满足。 我通过 TI提供的sw-lib调整Vcore (我将在本帖子末尾粘贴代码),在代码中,它不仅检查 Vcc级别是否适合增加Vcore,,而且还调整与Vcore匹配的SVS级别。 我同意,由于Vcc的质量,此SW调整过程可能无法在更改Vcore时使用100 % ,但MSP430陷入锁定状态是另一回事。

    我对发动机@电子 仪表制造商和我的同事有很多不满。 我们无法得出一致的结论。 确实需要您和TI方面的帮助。

    再次感谢。

    Seafesse。

    静态uint16_t SetVCoreUp (uint8_t级别)
    {
    uint16_t PMMRIE_backup, SVSMHCTL_backup, SVSMLCTL_backup;
    
    //增加Vcore的代码流已更改,以解决
    //错误FLASH37。
    //请参阅勘误表以了解特定设备是否受到影响
    //请勿更改此功能
    
    //打开PMM寄存器以进行写入访问
    PMMCTL0_H = 0xA5;
    
    //禁用专用中断
    //备份所有寄存器
    PMMRIE_BACKUP = PMMRIE;
    PMMRIE &=~(SVMHVLRPE | SVSHPE | SVMLVLRPE | SVSLPE | SVMHVLRIE |)
    SVMHIE | SVSMHDLYIE | SVMLLRIE | SVSMLIE | SVSMLDLYIE );
    SVSMHCTL_BACKUP = SVSMLCTL
    ;
    
    //清除标记
    PMMIFG = 0;
    
    //将SVM SVSIDE设置为新级别,并检查VHCTL是否可以增加VHCL_BACKUP = SVSMLTCL;
    //清除标记PMMMIFG = 0
    
    //等待SVM高侧稳定
    ,而(PMMIFG & SVSMHDLYIFG)== 0);
    
    //清除标记
    PMMIFG &=~SVSMHDLYIFG;
    
    //如果
    (PMMIFG & SVMHIFG)== SVMHIFG){ //-> Vcc对于Vcore增加来说太低
    	//恢复以前的设置
    	PMMIFG &=~SVSMHDLYIFG;
    	SVSMHCTL = SVSMHCTL_BACKUP;
    
    	//等待SVM高端稳定
    	,同时(PMMILYFG & SVSMHDIFG)== 0);
    
    	//清除所有标记
    	PMMIFG &=~(SVMHVLRIFG | SVMHIFG | SVSMHDLYIFG | SVMLVLRIFG | SVMLIFG | SVSMLDLYIFG);
    
    	PMMRIE = PMMRIE_BACKUP; //恢复PMM中断启用寄存器
    	PMMCTL0_H = 0x00; //锁定PMM寄存器以进行写入访问
    	返回PMM_STATUS_ERROR; //返回:电压未设置
    }
    
    //还将SVS Highside设置为新级别 	
    // Vcc足够高,足以增加Vcore
    SVSMHCTL ||(SVSHRVL0 *级别);
    
    //等待SVM高侧稳定
    ,同时(PMMIFG & SVSMHDLYIFG)== 0);
    
    //清除标记
    PMMIFG &=~SVSMHDLYIFG;
    
    //将VCORE设置为新级别
    PMMCTL0_L = PMMCOREV0 *级别;
    
    //将SVM,SVS低侧设置为新级别
    SVSMLCTL = SVMLE |(SVSMLRRL0 *级别)| LYSLE |(SVSLRVL0 *级别);
    
    //等待直到SVM,SVS低侧稳定
    ,而PMMIG=(SMMIG=)
    
    //清除标记
    PMMIFG &=~SVSMLDLYIFG;
    // SVS,SVM核心和高端现已设置为保护新的核心级别
    
    //恢复低边设置
    //清除所有其他位_除_级别设置
    SVSMLCTL &=(SVSLRVL0+SVSLRVL1+SVSMLRRL0+SVSMLRRLL1+SVSMLRRL2);
    
    //清除备份寄存器中的级别设置,保留所有其他位
    SVSMLCT_BACKUP &=~(SSLRLRRLR0+SVRL1+SLRSVRL2)
    
    //恢复低侧SVS监护仪设置
    SVSMLCTL |= SVSMLCTL_BACKUP;
    
    //恢复高端设置
    //清除除级别设置
    之外的所有其他位SVSMHCTL &=(SVSHHRVL0+SVSHRVL1+SVSMHRRL0+SVSMHRRL1+SVSMHRRL2);
    
    //清除备份寄存器中的级别设置,保留所有其他位
    SVSMHCTL_BACKUP &SVHCSHRVL0+SVSMHRL1+SVSMHRRLL1;~ SVSMHRL1+SVSMHRLTL1+SVSMHRLTL1+SVSMHRLTL1+SVSMHRLTL1+SVSMHRLTL1+SVSMHRLTL1+SVSMHRLTL1+SVSMHRLTL1+SVSM
    
    
    
    
    //等待高侧,低侧稳定
    ,同时((PMMIFG & SVSMLDLYIFG)==0)&&(PMMIFG & SVSMHDLYIFG)==0);
    
    //清除所有
    MRPMMIFG &=~(SVMHVLRIFG | SVSMHIFG | SVSMSVHDLYIFG | SVSMLLIFG
    
    | SPLYPMLIE = SMLLUG; Flg; Flags = //恢复PMM中断启用寄存器
    PMMCTL0_H = 0x00; //锁定PMM寄存器以进行写入访问
    
    返回PMM_STATUS_OK;
    }/***********************************************************************
    
    
    *\Vcore简要降低一个级别
    *
    \Vcore需要降低到的param级别
    *\Return status success / failure
    ****************************************************************************** /
    静态uint16_t SetVCoreDown (uint8_t级别)
    {
    uint16_t PMMRIE_backup,SVSMHCTL_BACKUP,SVSMLCTL_BACKUP;
    
    //减少Vcore的代码流已更改,以解决
    //错误FLASH37。
    //请参阅勘误表以了解特定设备是否受到影响
    //请勿更改此功能
    
    //打开PMM寄存器以进行写入访问
    PMMCTL0_H = 0xA5;
    
    //禁用专用中断
    //备份所有寄存器
    PMMRIE_BACKUP = PMMRIE;
    PMMRIE &=~(SVMHVLRPE | SVSHPE | SVMLVLRPE | SVSLPE | SVMHVLRIE |
    SVMHIE | SVSMHDLYIE | SVMLVLRIE | SVMLIE | SVSMLDLYIE );
    SVSMHCTL_BACKUP = SVSMHCTL;
    SVSMLCTL_BACKUP = SVSMLCTL;
    
    // Clear flags
    PMMIFG &=~(SVMHIFG | SVSMHIFLYIFG | SVSMLIFG | SMLIFSVG | SMLIFSV);SMLIFSVSMLICG
    
    //在正常模式下将SVM,SVS高侧和低侧设置为新设置
    SVSMHCTL = SVMHE |(SVSMHRRL0 *级别)| SVSHE |(SVSHRVL0 *级别);
    SVSMLCTL = SVMLE |(SVSMLRRL0 *级别)| SVSLE |(SVSLRVL0 *级别);
    
    //等待SVM高侧和SVM低侧稳定
    ,同时((PMMIFG & SVSMHDLYIFG)==0||(PMMIFG & SVSMLDLYIFG)==0);
    
    // clear flags
    PMMIFG &=~(SVSMHDLYIFG + SVSMLDLYIFG);
    // SVS,SVM core和high side现已设置为针对新的内核级别进行保护
    
    //将VCORE设置为新级别
    PMMCTL0_L = PMMCOREV0 *级别;
    
    //恢复低侧设置
    //清除所有其他位_except _级别设置
    SVSMLCTL &=(SVSLRVL0+SVSLRVL1+SVSMLRRL0+SVSMLRRLL1+SVSMLRLRLRRL2);
    
    //清除备份寄存器中的电平设置,保留所有其他位
    SVSMLCTL_BACKUP &=~(SVSLRVL0+SVSLRVL1+SVSMLRRL0+SVSMLRRL1+SVSMLRLRRL2);
    
    //恢复低侧SVS监护仪设置
    SVSMLCTL |= SVSMLCTL_BACKUP;
    
    //恢复高端设置
    //清除除级别设置
    SVSMHCTL &=之外的所有其他位(SVHRVL0+SVSHRVL1+SVSMHRRL0+SVSMHRRL1+SVSMHRRL1+SVSMHRHRHRRL2);
    
    //清除备份寄存器中的电平设置,保留所有其他位
    SVSMHCTL_BACKUP &=~(SVSHRVL0+SVSHRVL1+SVSMHRRL0+SVSMHRRL1+SVSMHRLR2+SVSMHRRL2);
    
    //恢复备份
    SVSMHCTL |= SVSMHCTL_BACKUP;
    
    //等待高侧,低侧稳定
    ,同时((PMMIFG和SVSMLDLYIFG)==0)&&(PMMIFG和SVSMHDLYIFG)==0); 	
    
    //清除所有标记
    PMMIFG &=~(SVMHVLRIFG | SVMHIFG | SVSMHDLYIFG | SVMLVLRIFG | SVMLIFG | SVSMLDLYIFG);
    
    PMMRIE = PMMRIE_BACKUP; //恢复PMM中断启用寄存器
    PMMCTL0_H = 0x00; //锁定PMM寄存器以进行写入访问
    返回PMM_STATUS_OK; 		//返回:确定
    }
    
    uint16_t SetVCore(uint8_t电平)
    {
    uint16_t actleval;
    uint16_t status =0;
    
    级别&= PMMCOREV_3; //为最大层
    actlevel设置掩码=(PMMCTL0和PMMCOREV_3); //获取实际VCORE
    //
    在(((LEVEL != actlever)&&(status ==0))||(LEVEL < actleve)){
    如果(level > actlever){
    状态= SetVCoreUp(++actleval);
    }
    否则{
    状态= SetVCoreDown (--actleval);
    }
    }
    
    返回状态;
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    感谢您提供更多详细信息。

    我知道您需要以比您的应用程序默认值更高的DCO频率运行,但我们要确定PMM26是否导致此问题。 为此,我们不要使用上面链接的SetVCore代码(因为此代码写入 到SVSMHCTL/SVSMLCTL寄存器),并在该测试的默认DCO频率下运行。

    此致,

    詹姆斯

    MSP客户应用程序

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    您是否有机会尝试我的最新反馈? 此问题也可能与AUXPMM2勘误表有关。 我一直支持下面的主题中的类似问题。

    此致,

    詹姆斯

    MSP客户应用程序

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,James:
    很抱歉,由于农历新年假期,回复出现延迟。
    我没有机会尝试你提到的电子计量器制造商的度假方法,因为我发布此问题后不久。 我会试着在假期结束时看看能否完成测试。
    我已经完成了该线程,是的,我们似乎遇到了完全相同的问题。但我在该线程中没有找到解决方法,它看起来仍处于待定状态...

    此外,设计不需要备用电源系统,因此AUXVCCx设置与其它线程中提到的Massa1相同。
    AUXVCC1 = AUXVCC2 = VSS = GND。

    AUXVCC3,DVCC和AVCC连接到3.3V电源线。


    此致,
    SeaFesse。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我只想说两个方面:在默认DCO下增加开机启动延迟,持续时间大约为100毫秒,这可以通过锁定MSP430实现奇迹。 初始化代码的开头:禁用WDT,__DELAY __CYCES() 100毫秒,以确保所有VCC导轨都稳定,然后才能继续MSP430的初始化。 对于仪表应用程序,启动延迟似乎不是关键问题。

    附注 您显示的VCC波形脉动非常非常糟糕。 在大多数申请中,这种情况应被视为不可接受。 不要在电力轨散装电容器上节省费用:)

    [编辑]此类VCC脉动与电压监控器相结合也可能是问题的原因-监控器可能会在每次VCC DIP上调用MCU的复位。