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.

[参考译文] CC430F5133:随机 CPU 启动时的睡眠电流更高

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/797881/cc430f5133-higher-sleep-current-on-random-cpu-boots

器件型号:CC430F5133

我正在设计一个由 CR2032锂电池供电的密钥卡、并使用 MSP430系列的 CC430F5133微控制器。 时钟源是 XT1上的一个外部32KHz 晶振。

在正常运行中、LPM4睡眠状态下的电流消耗为5.5uA。  每隔一段时间、睡眠电流为8.5uA。

我已将代码修整为以下内容:

#include 
#include 
#include "HAL_PMM.h"

#define FOB_UBTN0BIT0
#define FOB_UBTN0_PORT_DIRP1DIR
#define FOB_UBTN0_PORT_SELP1SEL

#define FOB_UBTN1DIR 1DIR #define FOB_UBTN2_PORT_FOBTRF2_FOBTRF2_FOBTRF#define












#define P2BTR_FOBTRF2_FOBTRF2_FOBTRY_FTRF2_FOBTRFIN_TRFIN_TRF#define #define #define P2BTRF2_FOBTRY_FIN_FOBTRFIN_TRF_FOBTRF_FOBTRF_TRF_TRF_TRF_TRF#define #define #define #FOBTRF2_FOBTRF_TRF_TRF_TRFIN_TRF_TRF_TRF_TRF_TRF_TRFIN_TRF_TRF_TRF_TRF_TRF_TRF_TR



#define FOB_LED_PORT_OUTP3OUT
#define FOB_LED_PORT_SELP3SEL

静态空初始化端口(void)
{
P1SEL = 0x00;
P2SEL = 0x00;
P3SEL = 0x00;
P5SEL = 0x00;

P1DIR = 0xFF;
P2DIR = 0xFF;
P3DIR = 0xFF;
P5DIR = 0xFF;
PJDIR = 0xFF;

P1OUT = 0x00;
P2DIR = 0x00;
P3OUT = 0x00;
P5OUT = 0x00;

PJOUT = 0x00;

//为 XOUT
P5DS 的 XIN 设置端口5 |= BIT0+BIT1;
P5OUT |= BIT0+BIT1;
P5SEL |= BIT0+BIT1;
P5DIR &=~

~Ω(BTN0+BIT1);P5DIR B0_BIT0_BIT0_B0_BIT0_BIT0_BIT1;P0_BIT0_BIT0_BIT0_BIT0_BIT0_BIT0_B
FOB_UBTN0_PORT_SEL 和=~FOB_UBTN0;

FOB_UBTN1_PORT_DIR 和=~FOB_UBTN1;
FOB_UBTN1_PORT_SEL 和=~FOB_UBTN1;FOB_UBTN2_PORT_DIR

和=~
~FOB_UBTN2_FOBTN2;FOB_UBTN2_UBTN2_FOBTN2

FOCK_UBTN3_PORT_DIR 和=~FOB_UBTN1;
FOB_UBTN3_PORT_SEL 和=~FOB_UBTN2;

FOB_VREF_PORT_DIR 和=~FOB_VREF_PIN;

FOB_LED_PORT_OUT 和=~FOB_LED1;
FOB_DIR_FOB_D1;FOB_DIR | FOB_DIR
FOK_LED_PORT_SEL &&~







~
~FOB_LED1;}void LFXT_Start (uint16_t xtdrive){UCSCTL6_L |= XT1DRIVE1_L + XT1DRIVE0_L;//针对 XT1启动的最高驱动设置,同时(SFRIFG1 & OFIFG){//检查 X1DRIFG + FAULTFFG + FFFF FAULT7 + XFFG FAULTFFG + FFFF FAULTFFG + FAULTFFG + FAULTFFT + FAULTFFG //清除 OFIFG 故障标志
}
UCSCTL6 =(UCSCTL6 &~(XT1DRIVE_3))|(xdrive);//设置驱动模式
}

int main (void)
{
//关闭 WDTCTL 的看门狗
= WDTPW + WDTHOLD;
SFRIE1 &&=~WDTIE;

SetVCore (0)

;

XTIVSTART (0);TXDIV0)

//
RTCCTL01上的 RTC 计时器= RTCTEV0_H;

__bis_SR_register (LPM4_BITS);
}

SetVCode (0)函数来自 TI 示例项目的 HAL_PMM.c 模块。  我在上面显示的 LFXT_Start()也直接取自 TI 演示代码。

如您所见、这个修整后的代码中没有中断处理程序。  代码只会引导并直接进入睡眠状态并保持睡眠状态。

如果我切断电池电源、然后重新应用电池电源、通常在这段时间内等待500-1500ms、每10或20个电源周期中一次、睡眠电流为8.5uA。  在所有其他情况下、休眠电流为5.5uA。

在完整的产品源代码中(在我将其缩减至您在上面看到的内容之前)、我在密钥卡上有用于唤醒 CPU、执行一些处理、然后返回 LPM4睡眠状态的按钮。  当遥控器处于"坏"模式时、我可以反复重复此序列、并且它始终在8.5uA 的较高睡眠电流下返回睡眠状态。

但是,如果在 CPU 处于唤醒状态时,我只执行上面显示的 LFXT_Start()调用来重新定义时钟系统,问题就会消失,下一个睡眠周期会恢复到所需的5.5uA 睡眠电流,并在许多唤醒/睡眠周期后保持正确的睡眠电流。

作为另一个线索、如果我注释掉启动 RTC 计时器的代码、这也会导致问题消失(或使问题很难重现)。  在关闭 RTC 的情况下、我测试了超过150个功率周期、从未见过更高的睡眠电流。

是否有人可以提供一些有关如何调试的指导?

谢谢、

Bob

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

    我对这个问题做了一些研究、但没有发现任何可以解释这种行为的东西。
    在 LPM4中、所有时钟都关闭、因此我不确定写入 RTCCTL01寄存器有何影响。
    您能否替换您的 RTCCTL01 = 0x00;并查看是否存在相同的问题。

    此外、对于您使用的32KHz 晶振、制造商建议该晶振使用哪种并联电容?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我必须回到有关电容的问题。

    我刚刚验证了使用"RTCCTL01 = RTCTEV0_H"、问题很容易重现(可能是4次尝试中的1次)、使用"RTCCTL01 = 0x00"、实际上重现问题似乎更容易(大约每2次尝试中的1次、或者每3次尝试中的2次)。 如果我注释掉写入 RTCCTL01的行、睡眠电流会下降大约1uA、而大约50次尝试后、问题就不会重现。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们的晶体的数据表如下: abracon.com/.../ABS05.pdf

    数据表中没有任何外部电容器的推荐值。 它确实为该器件提供了12.5pF 的负载电容。

    我们在电路板上使用的是20 pF 电容器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bob、
    在调用 LFXT_Start ()后、位 UCSCTL6.XT1OFF 是"1"还是"0"?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    UCSCTL00x1370UCS 控制寄存器0 [存储器映射]
    UCSCTL10x0020UCS 控制寄存器1 [存储器映射]
    UCSCTL20x101FUCS 控制寄存器2 [存储器映射]
    UCSCTL30x0000UCS 控制寄存器3 [存储器映射]
    UCSCTL40x0044UCS 控制寄存器4 [存储器映射]
    UCSCTL50x0000UCS 控制寄存器5 [内存映射]
    UCSCTL60x010DUCS 控制寄存器6 [存储器映射]
    UCSCTL70x0400UCS 控制寄存器7 [内存映射]
    UCSCTL80x0707UCS 控制寄存器8 [内存映射]

    UCSCTL6.XT1OFF = 1.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您将该位设置为0、会发生什么情况?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    UCSCTL6.XT1OFF = 0时、我仍然可以重现此问题:

    UCSCTL6 &=~XT1OFF;
    LFXT_Start (XT1DRIVE_0);
    

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

    我使用 RTC 作为某种逻辑的一部分来生成随机数。 我切换到使用模数转换器的读数、这样我就可以使 RTC 保持关闭状态。 我现在只想使用该解决方案。

    我们可以将其视为已关闭、尽管我认为可能存在 TI 可能想要调查的处理器问题。