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.

[参考译文] CC3235S:不从休眠慢时钟唤醒32KHz唤醒

Guru**** 2392905 points
Other Parts Discussed in Thread: CC3235S, SYSCONFIG, CC3200, UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1099087/cc3235s-no-wakeup-from-hibernate-slow-clock-32khz-wakeup

部件号:CC3235S
主题中讨论的其他部件: sysconfigCC3200UNIFLAASH

您好,

我正在尝试使CC3235S休眠,我看到了PRCM API,其中我可以将唤醒源启用为SlowClock,以及如何设置间隔。 但是,在实践中,这不起作用。
我说它不起作用,因为我只看到我的LED闪烁一次,再也不会闪烁。 这说明没有退出休眠模式 (MCU基本上重启)。

我包括Power_init(),但实际上我没有使用电源策略,因为我的选项不包括通过时钟唤醒实现休眠。 我只看到休眠GPIO唤醒。
sysconfig电源菜单和PRCM源代码之间似乎不匹配。

        Power_init();
        While(1){
            LED_Blink();
            PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
            PRCMHibernateIntervalSet(32768); // should set up the HIB timer for x amount of ticks, 32,768 per second
            PRCMHibernateEnter();
            }

我也尝试使用Power_Shutdown,但我无法使用 Power_shutdown (01000);。

我在POWER_measurement示例中看到 ,使用Power_shutdown (0,毫秒);这可进入休眠模式,但即使我将时间间隔更改为2000毫秒,它也不会退出休眠模式。  因此,我在两个具有相同结果的实例中使用了Power_shutdown (0,毫秒)。

我看到文档提到休眠模式被RTC/SlowClock唤醒,但实际上没有任何功能。

我已经查看 了CC32xx API文档 ,这就是我如何使用上面提到的PRCM功能。

我还查看 了CC32xx电源管理文档,但文档中使用的功能在我的库中不存在。 没有一个应用说明或文档可以向我演示如何执行此操作。

下面给出的示例不存在:

// Setting up timer as a wake source

/* Setup the RTC initial value - This can be obtained from NTP too */
init_time.secs = 0;
init_time.nsec = 0;
cc_rtc_set(&init_time);

/* Create a real time timer */
realtime_timer.source = HW_REALTIME_CLK;
realtime_timer.timeout_cb = timer_intr_hndlr;
realtime_timer.cb_param = NULL;

timer_hndl = cc_timer_create(&realtime_timer);

/* Configure the timer for a periodic wakeup */
interval_time.secs = LPDS_DUR_SEC;
interval_time.nsec = LPDS_DUR_NSEC;
cc_timer_start(timer_hndl, &interval_time, OPT_TIMER_PERIODIC);


我是否缺少某些内容? 我只想通过SlowClock之类的文档状态从休眠状态唤醒。

谢谢你。

编辑:我应该提到,我使用 的是Launchpad开发板,它确实有一个用于RTC的外部32kHz振荡器。  

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

    您好,

    您将设备置于休眠状态并从慢速时钟唤醒的代码似乎是正确的:

    PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
    PRCMHibernateIntervalSet(32768); // should set up the HIB timer for x amount of ticks, 32,768 per second
    PRCMHibernateEnter();

    为了验证,我使用了POWER_MANAGEMENT示例将设备置于休眠模式。 应用程序调用powerShutdown(),然后调用Power_shutdown()。 我 在platform.c中编辑了powershutdown(),方法是添加上面的代码行进入休眠状态,并根据慢速时钟唤醒设备,然后注释掉Power_shutdown(),如下代码片段的底部所示:

    void powerShutdown(uint32_t shutdownTime)
    {
    #ifdef CC32XX
        Power_NotifyObj hibSignal;
    #endif
    
    #ifdef __MSP432P401R__
    #if 0
        Power_registerNotify(&hibSignal, PowerMSP432_ENTERING_SHUTDOWN,
                             preHibConfig,
                             (uintptr_t)NULL);
        if(shutdownTime != MAX_INT)
        {
            /* config gpio to wakeup from hib */
        }
        /*
         *    PowerMSP432_SHUTDOWN_0 => PCM_LPM35_VCORE0
         *    PowerMSP432_SHUTDOWN_1 => PCM_LPM45
         */
        Power_shutdown(PowerMSP432_SHUTDOWN_0,0);
    #else
        if(shutdownTime != MAX_INT)
        {
            if(shutdownTime >= 1000)
            {
                sleep(shutdownTime / 1000);
            }
            usleep((shutdownTime % 1000) * 1000);
        }
    #endif
    #elif CC32XX
        Power_registerNotify(&hibSignal, PowerCC32XX_ENTERING_SHUTDOWN,
                             preHibConfig,
                             (uintptr_t)NULL);
        //Power_shutdown(0,shutdownTime);
        PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
        PRCMHibernateIntervalSet(32768);
        PRCMHibernateEnter();
    #endif
    }

    当我将相同的代码行添加到按键式示例时,休眠和唤醒功能也可以正常工作。

     PRCMCC3200MCUInit()和Power_init()是否是应用程序代码执行的第一个函数? 它们通常由Board_init()调用。

    此致,

    杰西

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

    此外,仅供参考,您上面链接的CC32xx电源管理文档适用于较早的第1代CC3200。 下面是 CC3x3x网络子系统电源管理文档的链接

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

    感谢您的建议和链接。

    我像您一样精确地修改了POWER_measurement,但没有达到您的结果。 当设备进入休眠模式时,我再也看不到另一个打印语句。 我应该在Hib Wake后看到Banner再次打印(因为MCU重新启动),并且我还在shutdown()后放入了UART打印,以防万一。

    如果看不到UART打印,我就认为这意味着我没有唤醒。 但是,当我再次运行程序时,我确实看到唤醒原因是HibWake,只是调试器/CCC唤醒它,而不是我的慢速时钟。

    这意味着什么? 我的情况有何不同?

    我正在使用具有默认跳线设置的Launchpad。 我是否错过了某种准备?

    SDK 5.20 .........00 (我没有更新,因为我有一个复杂的项目,它在其他SDK上有问题。 我稍后将调试该程序,但5.20 现在将继续)。

    我确实确认了在Board_Init()中调用PRCMCC3200MCUInit()和Power_Init()。


    感谢您的时间和努力。

    Tom

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

    你好,Tom,

    如果您像我一样编辑了POWER_measurement示例,您将不会看到横幅(“Power Measurement Example Ver...”)再次打印,因为当设备从休眠状态重新启动时,它将进入间歇性连接状态,原因是下面POWER_Measure.c中显示的代码部分,该代码在displayBanner()之前被调用。 当我在终端上运行应用程序时,我看到设备进入休眠状态,1秒钟后,设备将从休眠状态唤醒,并在终端上打印"从Hib唤醒"和"间歇性连接..."。 我使用SDK的v 5.20 00进行了测试,它工作正常,因此我认为SDK版本不是问题。 您使用的是什么Service Pack?

    if (isWokenFromHib())
        {
            /* When waking from Hibernate we need to determine
               what use case the app exercises */
            if (getHibRetentionReg() == (uint8_t) UseCase_Transceiver)
            {
                PowerMeasure_appData.useCase = UseCase_Transceiver;
            }
            else
            {
                PowerMeasure_appData.useCase = UseCase_IntermittentlyConnected;
            }
        }

    您是否正在CCS中从调试器运行应用程序? 如果是,您是否可以尝试将程序写入设备并运行它? 从调试器运行时,进入休眠状态时,调试器将断开连接,然后在设备从休眠状态唤醒时,将运行以前刷新到设备的任何应用程序。

    此致,

    杰西

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

    Jesse,

    这解决了我的问题,谢谢。 调试器被切断/断开连接后,我的"刻录"图像正在运行,这只是我输入的一堆NOP。

    简而言之,上一个图像是测试MQTT客户端的AWS项目,所以当我在调试时将其置于无人看管状态时,猜猜我在我的AWS MQTT测试客户端上发现了多少MQTT发布了!  所以我刻录了一个图像,它没有每2-3秒发出MQTT消息,我 的NOP图像。

    感谢您提供信息,我不敢相信有什么简单的事情是我的问题。 将来,是否有办法在 不使用 UniFlash中的Image Creator功能的情况下将CCS创建的调试图像“粘住”?

    我看到有两种方法可以使用UniFlash。 我成功使用 了Image Creator (图像生成器)功能,但速度很慢。 我尝试使用自动检测(Top Option),但我的图像验证始终失败,所以我只需放弃并使用Image Creator (图像生成器)。

    我希望在调试器断开连接时,图像保持在状态,但 图像创建程序需要很热的时间才能刷新。 也许这是我唯一的选择。  

    在处理16位MSP430项目时,我没有这个问题,所以我想这是我的CC3235S无知的结果。

    再次感谢。

    Tom

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

    Tom,您好!

    在UniFlash中使用Image Creator (映像创建程序)可能是将映像刻录到设备的最佳/最快选择。

    如果您从CC32xx SDK的示例项目启动项目,则可能会看到“MCU+Image”作为CCS中的构建配置选项,如下所示: https://dev.ti.com/tirex/content/simplelink_cc32xx_sdk_6_10_00_05/docs/simplelink_mcu_sdk/sysconfig_imagecreator.html#code-composer-studio,在这种情况下,您应该能够通过CCS构建和刷新映像。

    否则,通过UniFlash创建映像将是您将映像插入记忆棒的最佳选择(请参阅此处的用户指南: https://www.ti.com/lit/ug/swru469h/swru469h.pdf?ts=1652128413663)  

    此致,

    杰西

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

    感谢你的所有帮助。 我和其他人对此表示赞赏。