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.

[参考译文] CC2530:5秒后、电路板胜出#39;t 进入 PM2

Guru**** 2535750 points
Other Parts Discussed in Thread: CC2530, CC2531EMK, CC2531

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/567150/cc2530-after-5-seconds-board-won-t-enter-pm2

器件型号:CC2530
主题中讨论的其他器件: CC2531EMKCC2531

您好!

我一直面临这个问题、在从 -DREJOIN_SCAN=5000扫描集线器5秒钟后、器件不会进入 PM2。 当电路板进入 PM2时、应消耗1.2微安的电流、而是消耗8mA 的电流。 下面的代码显示 CC2530确保在它进入 PM2之前一切准备就绪、但是一个任务、或者任务、却阻止了电路板这么做。 这是什么任务、为什么要打开它? 为什么5秒后 CC2530不会进入 PM2?

next = osal_next 超时();

OSAL_SET_CPU_TO_SLEEP (下一个);

e2e.ti.com/.../4061.code.txt

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

    "next = osal_next _timeout();"和"OSAL_SET_CPU_TO_SLEEP (next);"应在 osal_pwrmgr_powersaveaveep 中处理、该值由 osal_run_system 调用。 您应该在应用程序中直接调用它们。 如果您打算停止 ez-mode、则不应使用以下行:

    if (zclEZModeState!= EZMODE_State_ready)

    zcl_SetEZModeError (EZMODE_ERR_CANCELLED);
    //需要关闭计时器、关闭连接等...
    zcl_SetEZModeState (EZMODE_State_finish);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 1)我尝试了您的代码、但它未解决问题。 你还建议什么?
    2) 2)当您说"您应该在您的应用中直接调用它们"时、我应该如何在我的应用中实现它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.你能否详细说明你打算实现什么目标?
    这是一个拼写错误。 我的意思是说"它不应该..."。 我修改了我之前的帖子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    扫描集线器5秒后、我希望 CC2530进入 PM2、并且仅消耗1.2微安、而不是8mA。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否使用 eZ-Mode 扫描集线器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的。 它是一个终端设备、因此必须这样做。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    通常情况下、eZ-mode 不会在5秒内完成、因此它设置了3分钟的超时时间、由 EZMODE_TIME 定义。 如果您将 EZMODE_TIME 更改为15秒并触发 eZ-MODE、您是否会看到15秒后功耗下降到 PM2?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不幸的是、不是
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您看到的功耗是多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    8mA 功耗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试在 zcl_EZModeAction()中添加以下红线,然后再次进行测试。

    (笑声)

       案例 EZMODE_ACT_TIMENT_OUT:
         //超时
         if (zclEZModeState!= EZMODE_State_ready)
         {
           zcl_SetEZModeError( EZMODE_ERR_timedout );
           zcl_SetEZModeState( EZMODE_State_finish );

           OSAL_pwrmgr_powersave(); //将处理器/系统置于睡眠状态
         }
    (笑声)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这也没有解决问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我对事件循环中与 eZ-mode 相关的所有以下代码进行了注释、功耗仍然为8mA。 为什么会这样呢?

    if (事件和 Period_EVT2)

    #ifdef ZCL_EZMODE

    //调用 eZ-Mode
    zclEZMode_InvokeData_t ezModeData;

    //调用 eZ-Mode
    ezModeData.endpoint = SAMPLELIGHT_endpoint;//要调用 eZ-Mode 的端点
    if (((zclSampleLight_NWKState =DEV_ZB_COord)||
    (zclSampleLight_NWKState =DEV_router)||
    (zclSampleLight_NWKState =DEV_END_DEVICE))

    ezModeData.onNetwork = true; //节点已在网络上

    其他

    ezModeData.onNetwork = false; //节点尚未在网络上

    ezModeData.initiator = false; // OnOffLight 是一个目标
    ezModeData.numActiveOutClusters = 0;
    ezModeData.pActiveOutClusterIDs=空;
    ezModeData.numActiveInClusters = 0;
    ezModeData.pActiveOutClusterIDs=空;
    zcl_InvokeEZMode(&ezModeData );


    #else //非 eZ-Mode

    zAddrType_t dstAddr;
    HalLedSet (HAL_LED_4、HAL_LED_MODE_OFF);

    //启动终端设备绑定请求,此绑定请求将
    //仅使用对绑定非常重要的群集列表。
    dstAddr.addrMode = afAddr16位;
    dstAddr.addr.shortAddr = 0;//协调器进行匹配
    ZDP_EndDeviceBindReq (&dstAddr、NLME_GetShortAddr ()、
    SAMPLELIGHT_终结 点、
    ZCL_HA_PROFILE_ID、
    ZCLSAMPLELIGHT_BINDINGLIST、BindingInClusters、
    0、NULL、//没有要绑定的传出群集
    true );

    #endif // ZCL_EZMODE


    OSAL_START_timerEx (zclSampleLight_taskID、periode_EVT2、5000);
    返回(事件^ Period_EVT2);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议您使用监听器来检查您的设备是否仍然发送信标请求。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它现在没有我的监听器件、我不相信 CC2530在20秒后会扫描集线器、因为示波器显示 CC2530不再发出任何信标请求。 您认为是否还有其他可能会导致此问题? 那么、除了 ez-mode 之外、还有哪些其他任务可以使 CC2530保持唤醒状态?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到您每5秒保持重启 periode_evT2、这意味着 period_evT2每5秒切换一次 eZ-mode。 我认为这会使您的器件保持在 EZ 模式、并导致您的功耗问题。 我建议您购买 CC2531EMK 和 Ubiqua 数据包分析器来执行监听器任务、否则您无法确定此信标是否请求了相关内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了进行测试、我更改了它、以便仅在按下 HAL_KEY_SW_6时激活 EZ 模式、但 CC2530仍然消耗8mA 电流。 同时、由于我目前没有使用 CC2531、除了 eZ-mode 之外、还有哪些其他问题可能会导致此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上、您在 periode_evT2中调用 zcl_InvokeEZMode、它每5秒出现一次、这样代码就会在 period_evT2中切换 eZ-mode。 可能会尝试停止 period_EVT2事件以查看问题是否得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是这样做的。 我将代码移动到 HandlKeys、以便只有 HAL_KEY_SW_6切换 eZ-mode。 我现在删除了 periode_evt2、但问题仍然存在。 为什么您认为只有 ez-mode 导致问题? 没有其他原因会导致此问题吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了证明我的想法、您可以启用 HOLD_AUTO_START 和 eZ-MODE 来打开器件电源(器件上电后不要触发 eZ-MODE)、以检查功耗是多少。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我用于执行测试的设置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、即使在器件上电后没有触发 SW6以启动 EZ 模式、您仍然会看到8mA 电流?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的。 在编译器选项中、我甚至尝试禁用 ez-mode 并保持自动启动、但电流消耗仍然为8mA。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您使用 IAR 进行调试并暂停应用、那么当出现功耗问题时、您会看到什么器件状态?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何检查器件状态?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    暂停应用程序并检查 ZDRApp.c 中的 devState 值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、我在这里设置一些断点、就是发生的情况。 启动时、会按 ContinueJoining = true、并且 devState 的值为 DEV_NWK_DISC。 在大约8-10秒后、断点 continueJoining = false 被命中、值为 DEV_NWK_backoff。

    问题:
    1) 1)我将扫描值设置为20秒、而不是10秒、那么为什么它会停止连续连接?
    2) 2)如果它停止连续连接、那么为什么在8mA 时功耗仍然很高?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.如何将扫描设置为20秒?
    2.您的应用程序中是否有任何使系统保持忙碌的任务?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我注意到、通过将以下代码添加到事件循环中、下一个变量确实会使 CC2530进入睡眠状态1-5ns、然后它保持在8mA。 因此、当 CC2530降至8mA 时、经过5秒后、它进入 PM2、然后立即唤醒。 这个周期一直持续下去。 这意味着每5秒就会结束一个任务、但随后它会再次继续。 那么、该任务在5秒内有效、然后关闭的情况可能是什么?

    //保持中断。

       HAL_ENTER_CRITICAL_SECTION (intState);

       //下一次超时

       next = osal_next 超时();

       //重新启用中断。

       HAL_EXIT_CRITICE_SECTION (intState);

       //将处理器置于睡眠模式

       OSAL_SET_CPU_TO_SLEEP (下一个);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的应用中是否有 while 循环或 for 循环、可以执行阻止任务一段时间?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否 我检查了、但没有。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    执行更多测试后、我发现 CC2530确实进入了 PM2。 但是、当我按下 HAL_KEY_SW_6时、CC2530会被唤醒并保持在8mA。 为什么会这样呢?

    e2e.ti.com/.../23323.code.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    注释掉 zclSampleLight_HandleKeys ()中的"osal_start_timerEx (zclSampleLight_TaskID、KEYHOLD_EVT、100);"行、查看功耗是否下降。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它不是。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试在 zclSampleLight_HandleKeys 中注释掉以下代码以重新测试。

    if ((键& HAL_KEY_SW_2)/*||(键& HAL_KEY_SW_1)*/)

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

    我这么做了、但不幸的是、它没有解决问题。 你还建议什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议您先找出问题的根本原因。 您是否测试了我建议删除 SW2相关代码以查看功耗是否下降?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的。 您能否提供一个列表、列出我可以尝试找出问题的根本原因的所有可能因素?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是意味着什么? 注释掉 SW2相关代码后、功耗是否会下降? 我没有列表。 我只需检查您的代码、建议您逐个删除您添加到应用程序中的内容、看看我们是否能找到一些线索。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我删除了您指定的代码、但它没有解决问题。 我接下来应该尝试什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您注释掉"if (keys & HAL_key_sw_6)..."中的所有内容,功耗是否会下降?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    功耗不会下降。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    注释掉"if (Events & KEYHOLD_EVT)..." 以查看功耗是否下降。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我注释掉了所有 KeyHold 代码、电池监控器代码、HAL_KEY_SW_6代码、消耗量仍然不会下降。 我还注释了所有 eZ-mode 代码(FYI、除非按下 SW6、否则不进入 eZ-MODE)、并且流耗仍然为8mA。 因此、我认为功耗与按钮保持/出厂复位、SW6、SW2、电池监控器或 eZ-mode (与 SW6/周期性事件相关的 ez 模式)无关。 您认为还有哪些其他可能会导致问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否在注释掉您提到的所有代码后附加您的最新代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    代码如下:

    e2e.ti.com/.../4722.code.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试注释"if (Events & Periodical_EVT)..." 在事件循环中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试过、但它没有解决问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试注释 zclSampleLight_LcdDisplayUpdate()内的所有内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也没有解决问题。