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.

[参考译文] LP-CC2652R7:CCS 版本12.1中的深度睡眠功耗过高

Guru**** 2810805 points

Other Parts Discussed in Thread: SYSCONFIG, CC2652R7, SYSBIOS

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1256116/lp-cc2652r7-deep-sleep-excessive-power-consumption-in-ccs-version-12-1

器件型号:LP-CC2652R7
Thread 中讨论的其他器件:CC2652R7SYSBIOS、SysConfig

您能帮助我解决 CC2652R7 LaunchPad 上的深度睡眠功耗问题吗?

 

我使用的是具有外部+3.3V 电源的独立 CC2652R7 LaunchPad。

 

我使用的是修改了 main ()的 Project Zero 副本,以使用 API PRCMDeepSleep ()将微控制器置于深度睡眠模式。  这些副本来自 CCS 10.4版、使用 SDK 版本 simplelink_13x2_26x2_SDK_5_20_00_52、以及 CCS 12.1版、使用 SDK 版本 simplelink_13x2_26x2_SDK_6_20_00_29。

 

我不使用您的电源策略 API、并且在.syscfg 中禁用了电源策略。  从未执行 SYSBIOS。

 

当我使用 CCS 10.4版编译 main ()和项目时,我得到一个"_oad.bin"文件,该文件以接近0uA 的电源电流执行 PRCMDeepSleep ()。

 

当我使用 CCS 12.1版编译 main ()和工程时,我得到了一个"_oad.bin"文件,该文件以大约595uA 的电源电流执行 PRCMDeepSleep ()。

 

系统启动文件或 main ()中的 Project Zero Board_initGeneral()函数似乎导致在 CCS 12.1版中打开某个功能,而在 CCS 10.4版中未打开该功能,这会导致深度睡眠期间电源电流过大。

 

或者,CCS 版本12.1中 SDK PRCMDeepSleep ()中的函数不会关闭与版本10.4相同的模块。

 

您能否帮助我在 CCS 12.1版中找到额外深度睡眠电流的来源、并告诉我可以使用哪个 API 或直接寄存器写入来获得我在 CCS 10.4版中看到的近0uA 深度睡眠电流。

 

以下是我在两个 CCS 版本的 main ()开始处使用的代码。 我在两个 CCS 版本中都使用直接寄存器写入、以避免 API 可能存在的任何差异或异常。

 

//#include for PRCMDEEPSLEP()

#Include DeviceFamily_structPath (driverlib/sys_ctrl.h)

 

int main()

{

  uint32_t un32时长;

 

 

 /*在堆栈中提出的用于陷阱断言的注册应用程序回调*/

 RegisterAssertCback (AssertHandler);

 

 Board_initGeneral();

 

 

 IntMasterDisable();

 

 //将所有 DIOxx 设置为 GPIO 模式,输入被禁用

 IOCPortConfigureSet (0、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (1、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (2、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (3、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (4、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 

 IOCPortConfigureSet (5、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (6、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (7、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (8、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (9、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 

 IOCPortConfigureSet (10、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (11、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (12、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (13、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (14、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 

 IOCPortConfigureSet (15、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (16、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (17、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (18、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (19、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 

 IOCPortConfigureSet (20、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (21、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (22、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (23、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (24、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 

 IOCPortConfigureSet (25、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (26、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (27、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (28、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (29、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 

 IOCPortConfigureSet (30、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 IOCPortConfigureSet (31、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);

 

 //禁止任何 DIOxx 线路作为输出

 HWREG (0X400220D0)= 0x0;

 

 //确保在进入深度睡眠之前启用 RTC

 //注意:在 CCS 10.0.0中,RTC_CTL 寄存器具有其"组合"事件

 //      标志全部设置为1

 HWREG (0X40092000)= 0X00070001;

 

 

 

 //关闭当前使用的模块的时钟

 

 // PRCM。 RFCCLKG 关闭 RFC 时钟

 HWREG (0X40082000 + 0X002C)= 0x0;

 

 // PRCM。 VIMSCLkG 关闭 VIMS 时钟

 HWREG (0X40082000 + 0X0030)= 0x0;

 

 // PRCM。 GPIOCLKGR 关闭 GPIO 时钟门运行/全部模式

 HWREG (0X40082000 + 0X0048)= 0x0;

 

 // PRCM。 GPTCLKGR 关闭 GPTx 时钟运行/全部模式

 HWREG (0X40082000 + 0X0054)= 0x0;

 

 // PRCM。 SSICLKGR 关闭 SSIx 时钟运行/全部模式

 HWREG (0X40082000 + 0X0078)= 0x0;

 

 // PRCM。 UARTCLKGR 关闭 UART 时钟运行/全部模式

 HWREG (0X40082000 + 0X006C)= 0x0;

 

 // PRCM。 CLKLOADCTL 载入那些需要载入请求的寄存器

 HWREG (0X40082000 + 0X0010)= 0x1;

 

 

 

 // PRCM。 OSCIMSC 选择振荡器中断屏蔽

 HWREG (0X40082000 + 0X0290)= 0x0;

 

 // PRCM。 OSCICR 振荡器原始中断清除

 HWREG (0X40082000 + 0X0296)= 0xF;

 

 // AON_RTC。 同步将事务同步到 AON 域

 //通过读取此寄存器

 un32Hold = HWREG (0X40092000 + 0x2C);

 

 

 

 //关闭电源域的电源

 

 // PRCM。 PDCTL0关闭电源域串行、外设

 HWREG (0X40082000 + 0X012C)= 0x0;// 0-5uA 睡眠电流、但复位问题

 

 // PRCM。 PDCTL1关闭电源域 VIMS、RFC、CPU

 HWREG (0X40082000 + 0X017C)= 0x0;

 

 // PRCM。 RFCBITS 关闭 RFC

 HWREG (0X40082000 + 0X01CC)= 0x0;

 

 // PRCM。 RFCMODESEL 选择 RFC 模式0 (??)

 HWREG (0X40082000 + 0X01D0)= 0x0;

 

 // PRCM。 VDCTL 请求微型 LDO

 HWREG (0X40082000 + 0X000C)= 0x1;

 

 // PRCM。 CLKLOADCTL 载入那些需要载入请求的寄存器

 HWREG (0X40082000 + 0X0010)= 0x1;

 

 // AON_PMCTL:JTAGCFG:JTAG_PD_FORCE_ON 关闭 JTAG

 HWREG (0X40090000 + 0X0034)= 0x0;

 

 //主机中断使能

 IntMasterEnable();

 

 PRCMDeepSleep ();

 

 

谢谢。

ReplyForward

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

    您好、Ronald、

    该问题可能与 CCS 版本无关、 但可能与 SDK 一起使用的 TI 编译器和 SysConfig 版本有关。  在将 SDK 升级到 v6.20时、您是否更新了 BIM hex 映像?  更可行的方法是 BIM 不识别较新的映像、因此会空闲、而不是不验证映像并相应地跳转到 PROJECT_ZERO 应用程序。   观察到的595uA 略接近空闲流耗。  为此、您应该针对该测试使用通用 TI 驱动程序示例、因为从未使用 BLE、因为这将有助于确认 BIM 不涉及该问题。  您还应检查 ti_drivers_config.c (由 SysConfig 生成)内的 Board_init、以确定是否有任何差异、如 Board_shutDownExtFlash。  请参阅 BLE5-Stack 调试指南 和其他 BLE5-Stack 用户指南资源、并在下一个回复中使用 Insert -> Code 来设置代码片段格式。

    此致、
    瑞安