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.

[参考译文] MSP430F2002:PON 之后的间或异常 CPU 行为

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/838226/msp430f2002-sporadic-abormal-cpu-behaviour-after-pon

器件型号:MSP430F2002

您好、查姆斯、

启动后、MCU 有时会显示非预期行为(尝试从客户处获取更多信息)。

在此异常状态期间、功耗显著降低(我的未确认假设:CPU 时钟远低于预期)。

只有在没有 JTAG 调试器的情况下才能看到这种行为!

在代码开始时配置 CLK。 解决方法似乎是插入2 x __no_operation()来绕过 TI 的行为。

只有一个__no_operation() 无法正常工作!

客户认为可以应用勘误表 BCL12、但代码在 PON 之后执行、因此不太可能。

以下是代码序列:

 /*将 MCLK 设置为12MHz 校准*/

 DCOCTL = 0;               //选择最低 DCOx 和 MODx 设置*/

 BCSCTL1 = CALBC1_12MHz;   //设置范围*/

 DCOCTL = CALDCO_12MHz;    //设置 DCO 步长+调制*

 BCSCTL2 |= DIVS_2;        // SMCLK = 3MHz */

 __no_operation()

 __no_operation()

 

问:为什么需要2 x __no_operation(),这是否是 确保大规模生产中稳定执行的有效变通办法?

 

 

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

    您好!

    您能给我们提供有关客户设置的更多详细信息吗? 我们需要电源电压图。

    最好在 GPIO 上插入触发信号的生成、切换引脚、以便能够在执行时钟系统操作的位置监控电源电压的状态。

    我怀疑是 CPU 超频。

    这个方向上的另一个测试是在时钟寄存器操作之前插入一个等待循环。 如果这也解决了问题、则将确认超频理论。

    我们当然还需要有关所用电源电压的信息。

    插入两个连续的 Nops 可消除数据总线系统上的变化、从而降低超频风险。 当然也取决于以下说明。

    但让我们一步一步一步。

    此致

    Peter

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

    Peter、

    客户将在几天内离开,稍后回答...请继续关注!

    -Dirk

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

    Peter、

    答案如下:

    我在 CLK 配置周围内置了 P1.2切换。 然后、MSP430的 VCC 约为1.9V、对于12MHz 而言、这太低了。 当 MSP430被超频时、会有什么运行方式?

     

    作为一种权变措施、有三个选项:

    • 在 CLK 配置之前等待(大约0.5ms)->它经过测试并正常工作
    • Vcc 的更快启动
    • 仅释放高于 Vcc = 2.7V 的复位信号的外部复位器件。 ->它已经过测试、工作正常

     

     

    固件启动:

     P1DIR = BIT2;      /*测试代码 P1.2输出、否则输入*/

     P1OUT = BIT2;      /*测试代码 P1.2高电平*

     /*将 MCLK 设置为12MHz 校准*/

     DCOCTL = 0;               //选择最低 DCOx 和 MODx 设置*/

     BCSCTL1 = CALBC1_12MHz;   //设置范围*/

     DCOCTL = CALDCO_12MHz;    //设置 DCO 步长+调制*

     BCSCTL2 |= DIVS_2;        // SMCLK = 3MHz */

     P1OUT = 0;         /*测试代码 P1.2低电平*

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

    您好!

    这证实了我的怀疑。 在这种情况下、器件肯定会超频。 可能的影响或多或少是不可预测的。 CPU 可以根据要执行的指令和数据生成所有类型的错误。

    因此、客户需要通过他列出的选项之一来解决此问题。 基本上、您可以将其归结为"客户需要确保、他使用时钟频率为器件计时(还要注意时钟的占空比/在这种情况下、由于正在使用 DCO、因此实际上并不适用、 但是、对于晶振或陶瓷谐振器、这可能适用...)、这与所有条件下指定范围内的所用电源电压相关。"

    上述所有三个选项都可以正常工作、尽管基于时序的纯解决方案是风险最大的解决方案、就像电源电压应以较慢的原因启动时一样、器件可能会再次发生故障。

    值得一提的是、虽然可能不是很关键。 此外、如果客户在12MHz 的关断期间操作器件、则关断阶段也会出现问题。 尤其是当应用程序中应存在任何闪存修改代码时。 CPU 可能会错误地跳转到闪存例程并损坏闪存内容。

    因此、直接监控电源电压无疑是一种更好的方法。

    此致

    Peter