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-CC1352P7:从关断模式唤醒

Guru**** 2551110 points


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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1569304/lp-cc1352p7-wake-up-from-shutdown-mode

器件型号:LP-CC1352P7


工具/软件:

您好、

我使用 zed_sw 样片测试关断模式。 我要做的是、当开关丢失父级超过 10 秒时、它将切换到 SHUTDOWN 模式、并可以由 BTN-1 (DIO15) 唤醒。
我配置了 LED_GREEN、在尝试重新加入网络时它将闪烁、在发送第一个重新加入请求时 LED_RED 将亮起。

#if ZG_BUILD_ENDDEVICE_TYPE
    case BDB_COMMISSIONING_PARENT_LOST:
      if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_NETWORK_RESTORED)
      {
        //We did recover from losing parent
        if (UtilTimer_isActive(&EndDeviceShutdownClkStruct))
        {
          UtilTimer_stop(&EndDeviceShutdownClkStruct);
        }
        LED_setOff(gGreenLedHandle);
        LED_setOff(gRedLedHandle);
      }
      else
      {
        //Parent not found, attempt to rejoin again after a fixed delay
        LED_toggle(gGreenLedHandle);
        UtilTimer_setTimeout( EndDeviceRejoinClkHandle, SAMPLEAPP_END_DEVICE_REJOIN_DELAY );
        UtilTimer_start(&EndDeviceRejoinClkStruct);
        if (!UtilTimer_isActive(&EndDeviceShutdownClkStruct))
        {
          LED_setOn(gRedLedHandle, 100);
          UtilTimer_setTimeout(EndDeviceShutdownClkHandle, SAMPLEAPP_END_DEVICE_SHUTDOWN_DELAY);
          UtilTimer_start(&EndDeviceShutdownClkStruct);
        }
      }
    break;
#endif

处理 shutdown 的代码。

if ( appServiceTaskEvents & SAMPLEAPP_END_DEVICE_SHUTDOWN_EVT )
{
  if (UtilTimer_isActive(&EndDeviceRejoinClkStruct))
  {
    UtilTimer_stop(&EndDeviceRejoinClkStruct);
  }
  if (UtilTimer_isActive(&EndDeviceShutdownClkStruct))
  {
    UtilTimer_stop(&EndDeviceShutdownClkStruct);
  }
  LED_setOff(gRedLedHandle);
  LED_setOff(gGreenLedHandle);
  IOCIOShutdownSet(CONFIG_GPIO_BTN_LEFT_INPUT, IOC_WAKE_ON_LOW);
  PowerCC26X2_sysctrlShutdownWithAbort();
  appServiceTaskEvents &= ~SAMPLEAPP_END_DEVICE_SHUTDOWN_EVT;
}

到目前为止、在父级丢失 10 秒后、开关可以成功进入 SHUTDOWN 模式、并能够通过按 BTN-1 唤醒。 但唤醒后(仍然父级丢失)、它会尝试永远重新加入网络(由 PPK2 检查)、我看不到 LED_GREEN 闪烁

此 LED_GREEN 在函数 静态 void zclSampleSw_initialization (void) 中进行配置并设置。  因此我认为它应该在从 SHUTDOWN 模式唤醒后开启。

static void zclSampleSw_initialization(void)
{
    ...

    LED_Params ledParams;
    LED_Params_init(&ledParams);
    gGreenLedHandle = LED_open(CONFIG_LED_GREEN, &ledParams);
    gRedLedHandle = LED_open(CONFIG_LED_RED, &ledParams);
    LED_setOn(gGreenLedHandle, LED_BRIGHTNESS_MAX);
    LED_setOff(gRedLedHandle);
    
    ...
}

从 SHUTDOWN 模式唤醒后、MCU 是否以主代码启动? 如果没有、则在代码开始运行的位置。 您能否提供正确的方法来手动将器件置于关断模式?

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

    你好 Van Buong Vo,

    希望您做得不错、能否提供您当前正在使用的 SDK 版本? 当器件进入关断模式并唤醒时、它从 main 开始。

    谢谢、
    Alex F  

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

    尊敬的 Van:

    此处的 gpioshutdown 示例显示了进入 SHUTDOWN 模式的正确序列。  

        /* Configure DIO for wake up from shutdown */
        GPIO_setConfig(CONFIG_GPIO_WAKEUP, GPIO_CFG_IN_PU | GPIO_CFG_SHUTDOWN_WAKE_LOW);
    
        /* Go to shutdown */
        Power_shutdown(0, 0);

    另外、还需要注意的是在退出 SHUTDOWN 模式时禁用 IO 锁存器。

        PowerCC26X2_ResetReason resetReason = PowerCC26X2_getResetReason();
    
        /* If we are waking up from shutdown, we do something extra. */
        if (resetReason == PowerCC26X2_RESET_SHUTDOWN_IO)
        {
            /* Application code must always disable the IO latches when coming out of shutdown */
            PowerCC26X2_releaseLatches();
    
            /* In this example we toggle LED1 */
            LED_startBlinking(led1Handle, 500, 3);
        }

    您将希望在执行其他应用程序初始化过程之前执行此操作。

    此致、
    Ryan

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

    您好、Ryan、
    感谢您的答复。 我按照 gpiosutoff 示例进行操作、正如预期的那样、这会带来很大影响。