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.

[参考译文] CC2652R7:我如何知道哪个模块阻止了低功耗模式?

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1284428/cc2652r7-how-can-i-know-which-module-is-preventing-low-power-mode

器件型号:CC2652R7

我有一个包含定制应用的定制电路板、其功耗高于预期。 我使用  Power_registerNotify 编写了一个调试函数、以确定我们是否要进入低功耗模式、并在主任务中添加了回调、但从未发生通知。 由此以及高功耗特性、我只能假设我的应用从未降至待机或低功耗状态。 我正在使用默认策略(SB)、该策略指出非常激动、并会尽可能转到 SB。  

我是否有办法确定哪个模块阻止应用程序进入 SB? 我将使用 IAR 和 SDK simplelink_cc13x2_26x2_SDK_5_10_00_48。

谢谢。

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

    您好!

    您能否简单描述一下您的应用在做什么?

    您的固件是否基于我们的其中一个 SDK 示例?
    https://dev.ti.com/tirex/explore/node?node=A__AJE5PlHxcCS3M1k4fd7DWw__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST

    既然你已经在蓝牙论坛上发布过、可能是一个 BLE5-Stack 示例?

    为了检查它是否是使器件处于运行状态的硬件模块、此处的寄存器可参考: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/docs/driverlib_cc13xx_cc26xx/cc13x2x7_cc26x2x7/register_descriptions/CPU_MMAP/PRCM。html 

    我建议检查 PRCM 寄存器、例如:

    • PDCTL0
    • PDSTAT0
    • PDCTL1
    • PDSTAT1

    之后、您可以检查可能需要工作模式的不同外设。
    例如、要检查 UART 的这一点、这些寄存器是相关的:

    • UART0.CTL.UARTEN

    谢谢。
    托比

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

    感谢 Toby、  

    是的、该应用基于 simple_peripheral SDK 示例。 此应用程序是 ASIC 的接口、可生成模拟信号和大量数据、然后通过 BLE 流式传回。 我们正在努力将功耗降至最低、而系统空闲时、这意味着会对 ASIC 进行选通、并且不会发生 BLE 活动、除了以低速率广播之外。  

    查看寄存器非常有用、因为它让我看到许多模块在睡眠或深度睡眠期间都具有 CLK EN、所以我有一个后续问题:

    如果 I2CCLKGR = I2CCLKGS = I2CCLKGDS = CLK_EN = 1、这是否意味着 I2C 模块会因需要运行时钟而阻止深度睡眠、还是意味着只有特定模块不会进入深度睡眠状态?

    我正在考虑修改 I2C 代码、以便在 I2C 事务完成后立即关闭句柄、从而在空闲状态下大部分时间都不使用 I2C 硬件资源。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 I2CCLKGR = I2CCLKGS = I2CCLKGDS = CLK_EN = 1,这是否意味着 I2C 模块会由于需要时钟运行而阻止深度睡眠,或仅意味着只有特定模块将不会进入深度睡眠状态?

    是的、这是我的理解。

    通常、为了实现最低功耗运行、我们建议针对任何未使用的模块调用*_close。

    当应用准备好进入低功耗模式时、您能否尝试调用 I2C_Close?
    根据 I2C ASIC 的不同、在 I2C_Close 之前、您可能还需要发送一些 I2C 命令来将 ASIC 置于低功耗模式。

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

    你知道同样的逻辑是否适用于 GPIO 模块吗? 我看到 GPIOCLKGDS 和 GPIOCLKGS 在 CLK_EN 位置具有1、但这些模块没有 GPIO_OPEN/CLOSE 函数。 我认为有道理、因为您不希望 GPIO 模块在低功耗期间释放引脚状态。 如何配置 GPIO 模块进入深度睡眠模式?  

    谢谢  

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

    GPIO 状态在待机模式下保留。

    摘录自数据表:

    换句话说、GPIO 不会阻止处于待机状态。