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.

[参考译文] AWRL6432:关于在 awr6432上启用 lowPowerCfg

Guru**** 2455560 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1499737/awrl6432-about-enable-lowpowercfg-on-awr6432

器件型号:AWRL6432

工具/软件:

您好、

  我想在 AWR6432中启用低功耗模块。

  我在 demo (__LW_AT__motion_and_presence_detection)中根据 MMWAVE_L_SDK_05_05_03_00配置并启用了低功耗模式

  根据文档中的以下说明、程序进入低功耗状态且计时器退出后、可以继续执行代码。

 但根据我实际运行的结果、这是 init 和 config 的重新运行

  除了在 CONFIG 中将 lowPowerCfg 设置为1之外、是否需要任何其他配置

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

    您好、

      我们期待您的答复!

    此致、

    桂林市

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

    您好:

    感谢您通过 E2E 讨论低功耗模式! 我不太清楚要实现的目标、但我可以解释电源状态管理的更多软件流程。 如您所指出、退出低功耗深度睡眠模式后、器件可以继续执行代码。 在这种情况下、器件将在 DEEP SLEEP 之前返回 PC 寄存器中的最后一个地址、该地址仍处于电源驱动器层、尤其是 Power_sleep 函数。 然后、将执行用户可定义的 POWER_LPDSresumehook、对于我们的大多数演示、该函数会重新初始化和重新配置驱动程序、外设和其他系统组件。 之后、程序将通过电源驱动程序层返回到应用层、即 powerManagementTask、将创建之前删除的 DPC 和 TLV 任务、然后开始下一帧。

    请告诉我这是否有帮助。 如果没有、请澄清您的问题是什么或您的最终目标是什么。

    此致、

    Kristien

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

    你好  Kristien、

      鉴于项目对产品的功耗要求、我需要启用低功耗模式。
     当前启用低功耗模式时、由于上电后程序会再次初始化、因此上电时间过长。 我希望减少执行射频的低功率恢复时间

     我想表达的是、当我调试演示时、程序没有像您所描述的那样执行。 我通过 UART 调试观察到程序的执行顺序、并重新执行了主函数

    此致、

    桂林市

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

    你好  Kristien、

      我已经解决了这个问题。 我将低功耗配置从演示(power_mode)复制到演示(motion_and_presence_detection)

      下图显示了两种配置和低功耗配置之间的差异。 我想了解这些配置参数的功能。

     1.power1.selectGpioSyncioLPDS   ="POWER_SYNCIN IO_WAKEUP_LPDs";

     2.power1.wakeupSYNCIOEdgeLPDS   ="RISE_EDGEDGE";

     3.power1.syncio.sync_in.$SugestSolution        ="SYNC_IN0";

    以下哪种配置会使程序以重新启动的方式执行、而不是在上一次进入低功耗后继续执行

      

    此致、

    桂林市

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

    您好:

    感谢您在此澄清您的目标。 请参阅下面的一些评论。

    我观察到了通过 UART 调试程序的执行顺序、并重新执行了主函数

    您应该无法在进入 LPDS 时调试程序(至少在最初)、因此我预计调试器会在第一帧后断开连接。 不管怎样,这里的陌生人的行为是程序正在重新执行的主要功能。 除非发生软复位、否则不应出现这种情况。

    我知道您已解决此问题、但如果您确实返回并在重新执行程序时测试问题、您可以通过 TRM 中所述的 APP_CTRL:APPSS_BOOT_INFO_REG0[3:0]来确定复位原因

    以下哪种配置会导致程序作为重新启动执行而不是在上一次进入低功耗状态后继续执行

    这些更改都不能解决程序在进入低功耗时重新执行的问题。 这些都是用于在上升沿启用或配置 SYNCIN IO 作为从 LPDS 唤醒的源的设置。  

    selectGpioSyncioLPDS 允许 SYNCIN IO 作为唤醒源
    wakeupSYNCIOEdgeLPDS 设置 SYNCIN IO 上的上升沿 以触发唤醒
    SYNC_IN.$SugestSolution ="SYNC_IN0" 将 SYNCIN IO 的实例名称设置为 SYNC_IN0

    此致、

    Kristien

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

    你好  Kristien、

     有了它,我将尝试找出原因,如果有任何结果,我将与你同步。 也许时间会稍慢一些。

     "我知道您已解决此问题、但如果您确实返回并在重新执行程序时测试问题、您可以通过 TRM 中所述的 APP_CTRL:APPSS_BOOT_INFO_REG0[3:0]来确定复位原因

    此致、

    桂林市

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

    您好:

    当然、如果有任何可以分享的内容、请告诉我。 我想进一步了解这个问题、但请慢慢来。

    此致、

    Kristien

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

    你好  Kristien、

      我读取了寄存器(APP_CTRL:APPSS_BOOT_INFO_REG0[3:0])的值、发现重新启动的原因是 STC_PORZ、我仔细调试了程序、程序异常的原因与 thresholdForLPDS 值有关。

      ThresholdForLPDS 在演示中使用10000的默认配置(motion_and_presence_detection)、但修改后为30000000。

     ThresholdForLPDS 配置的单位是什么、其配置有任何限制。

    此致、

    桂林市

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

    您好:

    感谢您对此进行进一步研究、并让我们了解您的发现。 ThresholdForLPDS 的测量单位为微秒、表示为睡眠时间指定的时间量、低功耗深度睡眠最需要超过该时间。  在这种情况下、将 ThresholdForLPDS 设置为 30000000表示只有超过30秒的睡眠时间才会触发低功耗深度睡眠。

    这也意味着您可能不会进入低功耗模式进行运动和存在检测、而是进入空闲模式、因为默认配置的帧周期最多为250ms、睡眠时间不能超过帧周期、至少在我们的演示中是如此。 STC_PORZ 是最后一个复位原因、这表明器件正在下电上电且不进入 LPDS 这一事实也证实了这一点。

    阈值的下限取决于 LPDS 延迟(默认为2ms)、上限为64秒、因为这是睡眠计时器本身的限制。

    此致、

    Kristien

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

    你好  Kristien、

      在听到你对 ThresholdForLPDS 的解释后,我意识到我以前误解了。
     我以前认为 ThresholdForLPDS 是低功耗模式的上限、ThresholdForLPDS 最多只能处于低功耗模式。
     基于此、我重新调试演示(power_mades)、发现我以前以为自己处于低功耗模式、但实际上我处于电源空闲模式。

      我使用 ti EVM 板进行调试。 您能尝试一下并向我提供您的结果吗?

    此致、

    桂林市

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

    你好  Kristien、

      是否有任何关于低功耗演示的更新

    此致、

    桂林市

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

    您好:

    很抱歉耽误你的时间。 在美国有一个假期。 我测试了低功耗演示、发现我正在使用电源管理选项1进入 LPDS。 您是在测试中更改 ThresholdForLPDS 还是在 SLEEP_TIME_TICKS 宏中更改?  

    此致、

    Kristien

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

    你好  Kristien、

     我没有更改  ThresholdForLPDS 或 SLEEP_TIME_TICKS  宏。

      您可以在我给您的串行端口日志中看到它、ThresholdForLPDS 为30000、SLEEP_TIME_TICKS 为50000。

      是否还有其他需要注意的事项。

    此致、

    桂林市

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

    你好  Kristien、

     低功耗是否需要特殊的硬件配置?
     您能通过电子邮件与我分享您的计划和项目吗? 我将运行调试和检查。

      我的电子邮件是 guilin.shi@mindcruise.ai。

    此致、

    桂林市

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

    您好:

    在从 SDK 刷写空的应用映像后、您可以通过 CCS 调试器加载程序来进一步调试此问题 、并在 vPortSuppressTicksAndSleep 处设置断点、该断点应在 xSemaphoreTake 之后触发。 由于这不是主工程文件的一部分、我建议通过 在 CCS 的 Disassembly 视图中搜索 vPortSuppressTicksAndSleep 函数来设置断点、并在函数的汇编指令的开头添加断点。

    选择电源管理选项1时、应将50000个周期传递到 vPortSuppressTicksAndSleep、该周期应在传递到  Power_idleFunc 之前转换为500000微秒。 这将传递到 Power_sleepPolicy 函数、该函数包含用于确定传递的时间是超过 LPDS 阈值、睡眠阈值(如果前者为 false)还是空闲阈值(如果前者为 false)的条件逻辑。 在本例中、它应超过 LPDS 阈值、即使我们考虑了延迟、通常也会使用 LPDS。

    如果您可以分享此过程各个阶段的睡眠时间/节拍数、我们应该能够确定在应进入 LPDS 时为什么处于空闲状态。

    此致、

    Kristien

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

    你好  Kristien、

      在调试程序时、我 在 vPortSuppressTicksAndSleep 设置了一个断点、但在选择低功耗选项1之前就触发了该断点。

    这是否与预期不符?

    此致、

    桂林市

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

    嗨、Shi、

    是的、对于这里的任何混淆、我深表歉意。 vPortSuppressTicksAndSleep  可能在 DebugP_scanf 函数之后被触发、同时应用程序等待字符输入。 当调用 Power_enablePolicy 时、可以在第125行中设置断点、运行该断点、然后在  vPortSuppressTicksAndSleep 中设置断点。 如果您想跳过一位电源序列、也可以在"Disassembly"视图中搜索 Power_sleepPolicy、并在该视图中添加断点。 仅当选择了电源管理选项1时才应触发此操作。

    此致、

    Kristien

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

    你好  Kristien、

      我调试了程序并发现在函数 vPortSuppressTicksAndSleep 中、当我们设置 SLEEP_TIME_tics=50000时、计算结果超出了 uin32_t 数据范围、导致最终有效时间不符合预期。
      、、当我将 SLEEP_IME_TICKS 设置为5000、ThresholdForLPDS = 3000 μ s 时、程序也无法按预期打印低功耗日志(退出 LPDS)。它也不会打印从空闲模式中压出的日志。

      我希望您可以提供一个程序来打印日志、以便根据文档进入和退出低功耗模式、从而继续进一步开发和调试。

    此致、

    桂林市

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

    嗨、Shi、

    我建议将 xSemaphoreTake 函数与 Power_sleepPolicy 函数交换、以防止任何变量类型溢出。 请记住、需要以微秒而非节拍来指定传入的睡眠时间、因此如果要保持相同的默认睡眠时间50秒和空闲时间25秒、则在调用 Power_sleepPolicy 时必须超过50000000和25000000。  

    我还将注意、演示 在通过调试程序运行时可能会崩溃。 这可以通过在 Power_disablePolicy 调用之后添加1秒的睡眠延迟来解决、即 ClockP_SLEEP (1)。

    此致、

    Kristien

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

    你好  Kristien、

      我尝试了您提到的解决方案、通过调试程序、我可以看到它最终进入低功耗模式。 (__LW_AT__Power_Sleep (POWER_LPDS);)μ s
    但程序仍然没有按预期打印输出以退出低功耗模式。 (__LW_AT__离开了 LPDS!! 复位原因是 DEEP SLEEP)

    此致、

    桂林市

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

    嗨、Shi、

    我有几个问题需要了解您目前的情况:

    1. 您是等待器件在50秒后通过睡眠计数器唤醒、还是通过点击电路板上的 USER_SWITCH 来手动唤醒?  
    2. 您是从 SDK 刷写空的应用映像并通过 CCS 调试器加载电源示例、还是直接刷写电源示例应用映像?
    3. 如果您使用的是调试器、是否还在  Power_disablePolicy -应该在第126行和第154行之后添加了 ClockP_SLEEP 调用?

    此致、

    Kristien

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

    你好  Kristien、

      1.我正在等待器件在50秒后通过睡眠计数器唤醒。

      我从 SDK 刷写空 API、并通过 CCS 调试器加载示例以 确认程序运行、并 在公司程序串行端口上刷写修改后的电源示例 appimage。公司程序串行端口。

      3.这里是我修改的代码的一些截图。

    ClockP_SLEEP  

    此致、

    桂林市

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

    嗨、Shi、

    您能否在 Power_sleepPolicy 处设置断点并验证传递给 PRCMLPDSIntervalSet 的保留值是否约为50000000? 更准确地说、它应该是49998000、因为该函数考虑了2000的 LPDS 延迟。 也可以 在 PRCMLPDSIntervalSet 之后检查以下存储器地址0x5A040030、并验证寄存器是否与保留值匹配。

    此致、

    Kristien