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.

[参考译文] LPDS 唤醒重启或复位问题

Guru**** 2771105 points

Other Parts Discussed in Thread: CC3200, CC3200SDK

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/665350/lpds-wakeup-restart-or-reset-problem

Thread 中讨论的其他器件:CC3200CC3200SDK

您好!

我正在处理 cc3200非 RTOS 应用程序,并面临一个问题,即在调用 PRCMLPDSEnter()函数唤醒后。 我之前使用内部32.768KHz 计时器唤醒器件以唤醒控制器、但它正常、控制器在 PRCMLPDSIntervalSet API 设置的持续时间后唤醒、 但问题是、唤醒控制器复位后、不会从其假定继续执行的最后一个状态开始执行。 我也使用了 PRCMSRAMRetentionEnable() API,但结果是一样的,它再次被复位,而不是从进入 LPDS 的同一时刻开始执行。  

我已尝试以下代码  

MAP_PRCMLPDSWakeupSourceEnable (PRCM_LPD_TIMER);
MAP_PRCMLPDSIntervalSet (32768);
PRCMSRAMRetentionEnable (((PRCM_SRAM_COL_1|PRCM_SRAM_COL_2|PRCM_SRAM_COL_3|PRCM_SRAM_COL_4)、PRCM_SRAM_LPD_RET);
MAP_PRCMLPDSEnter();

此外、我还发现了另一个 API、即 PRCMLPDSRestoreInfoSet、但不知道如何使用它、这是我必须传递的参数、以便存储 SP 和 PC 的最后状态。

这是否可以使用 PRCMLPDSRestoreInfoSet API 从控制器进入 LPDS 模式的同一点执行?

此外、我还了解了电源管理框架、该框架不会对我有所帮助、因为它使用基于 RTOS 的应用程序、而我使用的是基于非 RTOS 的应用程序。

我已查看以下电源管理策略链接:-

processors.wiki.ti.com/.../CC3200_Power_Management_Framework

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

    您是否已经了解过空闲配置文件 Nonos SDK 示例和文档? 此示例应有助于满足您的需求并提供指导。 下载/安装 CC3200 SDK (如果尚未这样做)、以查看示例代码。

    processors.wiki.ti.com/.../CC3200_Idle_Profile_NonOS_Application

    SDK 示例位置:C:\ti\CC3200SDK_1.3.0\cc3200-sdk\examples\idle_profile_nonos

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

    尊敬的 Kevin:

    感谢您的回复,但我看 了 idle_profile_nonos SDK 示例,但我无法通过 PRCMLPDSRestoreInfoSet() API 设置 SP 和 PC。

    另外还有一个问题、我在数据表中查看了数据表、其中提到当 MCU 处于工作模式时、NWP 可以切换到空闲连接模式、但我们无法完全关闭 NWP。 是否有任何方法可以完全关闭工作模式或睡眠模式下的 NWP 以最大限度地减小电流?  

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

    您能描述一下您要做什么吗? 从 LPDS 唤醒后、IDLE_PROFILE_NONOS 示例仍在 DO while 循环内运行、但您是对的、示例中处理这一情况的方式并不十分明显。 PRCMCC3200MCUInit 功能很可能会设置唤醒和恢复参数。

    可以使用 sl_start 和 sl_stop 打开/关闭 NWP。 休眠模式是另一种选择。

    让我了解您想要实现的目标、然后我认为我可以帮助您做得更好一些。

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

    尊敬的 Kevin:

    实际上、我想基本上省电、我还读出 NWP 不能完全关闭、它保持在空闲状态。 但在我的应用中、我需要节省 NWP 消耗的额外电流、因此根据数据表执行此操作的明显方法是将 MCU 置于 LPDS 模式、在这种模式下 NWP 本身也将进入 LPDS、 但这里的问题是、当我们从 LPDS 模式唤醒 MCU 时、控制器会复位、而不是从进入 LPDS 模式的最后状态执行。  

    我还尝试了 PRCMSRAMRetentionEnable API、但结果相同、它会再次复位。 我研究了另一个 API、即 PRCMRestoreInfoSet、它需要两个参数 PC 和 SP。 但是、我如何在任何时候都知道 PC 和 SP 的值、因为这些值不是固定的。 是否有任何 API 可在调用时获取 PC 和 SP 的值?

    或者是否有任何方法可以完全关闭 NMP 或进入 LPDS 模式以基本上省电?

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

    对于您的应用、我相信 LPDS 是您能够实现的最低功耗模式、因为您希望保留 RAM。 休眠、低于 LPDS 的功率级别将从根本上重置器件、RAM 将不会被保留。

    您计划如何将器件从 LPDS (即计时器、GPIO 等)唤醒? 从 LPDS 唤醒时、是否要跳转到代码的不同部分? IDLE_PROFILE_NONOS 示例利用电源管理框架并在唤醒后从其进入 LPDS 的位置开始执行、这是否不是您想要执行的操作?

    如果您尝试从进入 LPDS 的位置执行、则 PM 框架应管理上下文恢复(如果初始化正确)。 您是否已经浏览过有关此主题的 wiki 页面? processors.wiki.ti.com/.../CC3200_Power_Management_Framework

    请提供一些简单的代码、说明您如何初始化应用程序的 PM 框架、以帮助我为您提供帮助。

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

    可以使用 sl_stop()禁用(关闭) NWP。 有关更多信息、请参阅 SWRA462。 其中讨论了 MCU 和 NWP 可以处于的不同模式。

    http://www.ti.com/lit/swra462

    第7节"电源策略"可能也是一个不错的选择。

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

    尊敬的 Kevin:

    感谢您宝贵的回答、实际上我已经研究了空闲配置文件非操作系统示例、它从进入 LPDS 状态的同一时刻开始执行、但在控制器处于 LPDS 状态期间 GPIO 的状态不会被保留、 对吧? 但是、我们的应用需要一些能够在该模式期间保持 GPIO 状态的模式。  

    为此、我们可以尝试 DeepSleep 模式、但即使 NWP 关闭、它也会消耗过多电流、即12mA。 但我们需要节省功耗、因此我们需要使该电流至少达到3mA。 我遇到的问题是、即使我使用 sl_stop() API 停止了 NWP、它仍然消耗大量电流、即15mA。   

    那么、我要向您提出的问题是、是否有任何模式、或者是否有办法让我将电流降至至少3mA、并且该模式下的 GPIO 状态应该保持不变?

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

    我认为 LPDS 模式能够满足您的需求。 通过对软件进行一些更改、您可以保留进入和退出 LPDS 的 GPIO 的状态。

    请参阅以下 E2E 帖子、因为这些帖子可能会为您提供一些指导:

    e2e.ti.com/.../651404
    e2e.ti.com/.../360853

    此外、请查看 wiki 页面上的"IO Parking while entering LPDS (进入 LPDS 时的 IO 停止)"部分- processors.wiki.ti.com/.../CC32xx_Power_Management_Framework

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

    尊敬的 Kevin:

    我们检查 了 idle_profile_nonos 示例代码。 它在使用最新 SDK 1.3.0时工作正常。 但我们使用较旧的 SDK 开发了代码、即 SDK 1.1.0。

    我们将 idle_profile_nonos 示例代码与代码集成在一起、但无法获得正确的响应。 实际上、器件处于 LPDS 模式、但根据所选的唤醒源和持续时间、它不会退出 LPDS 模式。

    那么、我的问题是-

    我们能否将 使用 SDK 1.3.0开发的 idle_profile_nonos 示例代码与使用 SDK 1.1.0开发的主代码进行集成?

    2.使用 SDK 1.3.0 for LPDS 的代码使用 SDK 1.1.0时是否存在任何限制?

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

    1、只要您将 idle_profile_nonos 示例与 SDK 1.3集成了任何依赖项、我就不明白为什么不这样做。

    2.我建议查看1.2和1.3 SDK 的发行说明。 它将提到已做的修复/更改、依赖项和升级/兼容性信息。

    希望这对您有所帮助、
    Kevin