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.

[参考译文] MSP430F5438A:1%构建的电路板将出现应用程序代码停止

Guru**** 2547510 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/834519/msp430f5438a-1-of-boards-built-will-have-the-application-code-stall

器件型号:MSP430F5438A
主题中讨论的其他器件:MSP430WARE

各位专家、您好!

背景:

我的客户遇到了大约1%的余波、他的 MSP430应用将会停止、例如振荡器未转换。  

对于现场的一小部分主应用、 在时钟的主应用配置后很快停止。

我仍在尝试确定 确切的位置、但电流消耗很小且是静态的。   

示波器探针表明25MHz 时钟正在正确振荡。

 

通过在微控制器的运行跳闸点附近快速循环向电路板供电、可以重现故障。

下面是 kicker: 在连续清理上电时、电路板将在第二组时钟初始化之后继续失败。

 

该故障可通过快速循环通电来清除、之后将正常启动。

代码:

固件从引导带部分开始、该部分在执行到主代码的盲跳转之前验证主代码。

它具有以下时钟初始化代码(与 TI 示例非常一致):

 

          --------   BSL       ---

 

   SetVCore (3);  

 

        P5SEL |= BIT2+BIT3;                      //端口选择 XT2

         UCSCTL6 &=~XT2OFF;                      //启用 XT2

         

                                                   //将驱动强度[01]设置为12MHz

        UCSCTL6 &=~(XT2DRIVE1);                //关闭驱动位1

         UCSCTL6 |=  XT2DRIVE0;                //打开 驱动位0

         

                                                   //将驱动强度[00]设置为32kHz

        UCSCTL6 &=~(XT1DRIVE1);                //关闭驱动位1

         UCSCTL6 &=~(XT1DRIVE0);                //关闭驱动位1  

           

           

          //设置 XT1

        P7SEL |= BIT0+BIT1;                      //选择 XT1

        UCSCTL6 &=~(XT1OFF);                    // XT1打开

 

        

       //循环直到 XT1、XT2和 DCO 稳定-在本例中循环直到 XT2稳定

 操作

 {

   UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);

                                           //清除 XT2、XT1、DCO 故障标志

   SFRIFG1 &=~OFIFG;                     //清除故障标志

 }  while (SFRIFG1&OFIFG);                  //测试振荡器故障标志

   

 

        UCSCTL4 = 0X0055; //Acclk= xt1、SMclk = XT2、 MCLK = XT2clk

       

        UCSCTL1 |= DISMOD ; //关闭调制

 

 

{ 对主应用程序内存执行校验和检查后,它将跳转到主应用  程序}

 

 

------------   主应用 程序-------------------------------------------------------

{ 在其中,它会经历类似的时钟启动过程 }

{之所以实现冗余,是因为 BSL 的性质不适合在调试期间进行仿真}

 

 SetVCore (3);  

 

         P5SEL |= BIT2+BIT3;                      //端口选择 XT2

         UCSCTL6 &=~XT2OFF;                      //启用 XT2

         

                                                   //将驱动强度[01]设置为12MHz

        UCSCTL6 &=~(XT2DRIVE1);                //关闭驱动位1

         UCSCTL6 |=  XT2DRIVE0;                //打开 驱动位0

         

                                                   //将驱动强度[00]设置为32kHz

        UCSCTL6 &=~(XT1DRIVE1);                //关闭驱动位1

         UCSCTL6 &=~(XT1DRIVE0);                //关闭驱动位1  

           

           

          //设置 XT1

        P7SEL |= BIT0+BIT1;                      //选择 XT1

        UCSCTL6 &=~(XT1OFF);                    // XT1打开

 

        

       //循环直到 XT1、XT2和 DCO 稳定-在本例中循环直到 XT2稳定

 操作

 {

   UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);

                                           //清除 XT2、XT1、DCO 故障标志

   SFRIFG1 &=~OFIFG;                     //清除故障标志

 } while (SFRIFG1&OFIFG);                  //测试振荡器故障标志

   

        UCSCTL4 = 0X0055; //Acclk= xt1、SMclk = XT2、 MCLK = XT2clk

       

        UCSCTL1 |= DISMOD ; //关闭调制

 

 

这只是代码的复制。

问题:

 

  1. SetVcore (3)可以两次吗?
  2. 对于最终用于汇编的25MHz 时钟、驱动强度设置不正确。
    1. 尽管时钟会达到正常振荡的优先级、MSP 的内部时钟是否会受到影响?
  3. 一般来说、可以对 UCS 寄存器进行两次操作吗?

谢谢!

簧片

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

    嗨、Reed、

    很抱歉,对于我的上一篇文章,我将尝试确认使用 SetVcore()函数是否实际正常。

    编辑:我无法将此函数作为 MSP430ware 的一部分进行查找、因此可能是客户编写的函数。    

    谢谢、

    JD

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

    嗨、Reed、

    有趣的是、您报告器件停止但时钟仍在运行。  如果是、那么它实际上并不像时钟故障。  我是否正确理解了这一点、或者在这些情况下时钟是否实际发生故障?  

    我担心 Vcore 是如何设置的、而且这个问题是在启动时发生的。   是否有 setVcore()函数的源代码?    

    《MSP430F5438A 系列用户指南》的第2.2.4节定义了 Vcore 的设置过程、其中包括一个代码示例、网址 为:http://www.ti.com/lit/ug/slau208q/slau208q.pdf  

    我想确认客户已实施此操作。   

    谢谢、

    JD

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

    JD、

    感谢您的反馈。 如果 SetVcore()不是问题,我们还能在哪里找到?  

    1. SetVcore (3)可以两次吗? 答案=似乎可以吗?
    2. 对于最终用于汇编的25MHz 时钟、驱动强度设置不正确。
      1. 即使时钟看起来正常振荡、MSP 的内部时钟是否会受到影响?
    3. 一般来说、两次操作 UCS 寄存器是否正常?

    谢谢、

    簧片

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

    JD、

    请告诉我您对这3个问题的评论。

    谢谢、

    簧片

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

    嗨、Reed、

    1、 虽然第二次迭代可能不会更改设置、但两次设置 Vcore 寄存器应该是可以的、因为它已经设置为3。  同样、客户必须遵循数据表中概述的更改 Vcore 的流程。  

    2、只要晶振振振振振荡、就不会因驱动强度而出现时钟问题。  主要问题是如果它太低、可能会出现功率或温度条件、从而导致晶体不振荡。    

    3.一般而言,只要您再次完成稳定过程,我就不会看到再次设置 UCS 寄存器的任何问题。   

    谢谢、

    JD

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

    嗨、Reed、

    加电时是否总是出现问题?  客户表示" 可以通过在微控制器的运行跳闸点附近快速循环通电来重现故障。"  这可能会导致一些问题。     

    SVS 是否启用、保持 MCU 处于复位状态?   

    VCC 在快速恢复之前下降了多远?   

    Vcore 是否因 VCC 下降而下降?   

    如果是完整、干净的循环通电、问题是否存在?   

    我想可能会有一种情况、即降低 VCC 而在没有完全复位的情况下启动可能会导致 Vcore 下降并导致 MCLK 速度违例。  我建议在这里花些时间。   

    谢谢、

    JD

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

    嗨、Reed、

    他们是否确定了问题?   

    谢谢、

    JD

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

    JD、

    感谢您的跟进。

    它们已将问题与退出复位时发生的序列隔离。 通过增加一些任意的延时时间、这个问题已经解决。

    感谢您的支持!
    簧片