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:CC2530处于 PM2中时的出厂复位问题

Guru**** 2540080 points
Other Parts Discussed in Thread: CC2530

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/566775/cc2530-factory-reset-issue-when-cc2530-is-in-pm2

器件型号:CC2530

您好!

现在、CC2530上的出厂复位仅在器件完全唤醒且不在 PM2中时才起作用。 因此、当我在 PM2期间按住 HAL_KEY_SW_6时、它会唤醒板、但不会进行出厂复位、也不会查找集线器。 为什么会这样、如何解决?

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

    您的 SW6映射到哪个引脚、您是否在触发 SW6时检查 ISR 是否被调用?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它位于 P2.0、当我按下按钮时触发 ISR。 当我按住按钮进行出厂复位时、CC2530会做一些奇怪的事情。 它不会返回 PM2、也不会扫描集线器、功耗会增加并保持不变。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当您说功耗保持不变时、您会看到什么功耗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在进行更多测试后、我发现当我执行出厂复位时、释放按钮后、CC2530恰好返回到睡眠状态。 因此、基本而言、一旦 CC2530已经进入 PM2、我就无法进行出厂复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何执行恢复出厂设置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用以下代码、但出厂复位仅在 CC2530处于唤醒状态并且在 CC2530处于 PM2中时不工作时才有效。

    if (事件和 KEYHOLD_EVT)

    如果(P2_0==1)

    if (KeyPressCnt>30){
    KeyPressCnt=0;
    extern void ZDRApp_ResetTimerStart( uint16 delay );
    zgWriteStartupOptions (ZG_STARTUP_SET、(ZCD_STARTOPT_DEFAULT_NETWORK_STATE | ZCD_STARTOPT_DEFAULT_CONFIG_STATE));
    ZDUApp_ResetTimerStart (2000);
    zclSampleLight_BasicResetCB();

    否则{
    KeyPressCnt++;
    OSAL_START_timerEx (zclSampleLight_TaskID、KEYHOLD_EVT、100);
    RET=osal_start_timerEx (zclSampleLight_TaskID、KEYHOLD_EVT、100);


    返回(事件^ KEYHOLD_EVT);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于您使用的是 ZDUAP_ResetTimerStart (2000)、因此它应该在2秒后复位。 您是否在"if (events & ZDO_DEVICE_RESET){...}"中设置断点 来查看它是否在2秒后调用 ZDUApp_ResetTimerStart (2000)之后达到?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在事件循环中看不到 IF 语句。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它位于 ZDUP.c 中

    uint16 ZDUApp_EVENT_LOOP (uint8 task_id、uint16事件)

    (笑声)

     if (事件和 ZDO_DEVICE_RESET)
     {
    #ifdef ZBA_FRELET_NWKKEY
       if (devState == dev_end_device_unauth)
       {
         ZDSecMgrFallbackNWKKey();
       }
       其他
    #endif
       {
         //设置 NV 启动选项以强制"新建"加入。
         zgWriteStartupOptions (ZG_STARTUP_SET、ZCD_STARTOPT_DEFAULT_NETWORK_STATE);

         //设备已处于取消验证状态,因此请重置
         //注意:此呼叫不会返回
         SystemResetSoft();
       }
     }
    (笑声)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该程序不允许我在下面设置断点。 为什么会这样呢?

    #ifdef ZBA_FRELET_NWKKEY
    if (devState == dev_end_device_unauth)

    ZDSecMgrFallbackNWKKey();

    其他

    但我可以在下面设置一个断点、但该断点从未命中。

    #endif

    //设置 NV 启动选项以强制"新建"加入。
    zgWriteStartupOptions (ZG_STARTUP_SET、ZCD_STARTOPT_DEFAULT_NETWORK_STATE);

    //设备已处于取消验证状态,因此请重置
    //注意:此呼叫不会返回
    SystemResetSoft();
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尝试在"SystemResetSoft();"上设置断点,而不是在"if ( devState ==DEV_END_DEVICE_UNauth ){...}"上设置断点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    无论 CC2530是不是在 PM2中、都不会到达断点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不知道您的代码为什么不命中。 尝试调用"SystemResetSoft();"而不是"ZDApp_ResetTimerStart (2000);"以查看 CC2530是否复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    断点命中,但仅在出厂复位代码中,而不在 IF (Events & ZDO_DEVICE_RESET)代码中。 这是问题吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果未进入“if ( events & ZDO_DEVICE_RESET ){...}”,则设备不会复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您认为问题可能出在哪? 如何复位 CC2530?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我在上一篇帖子中所回答的,我不知道您的应用程序为什么不会点击“if ( events & ZDO_DEVICE_RESET ){...}” 在它调用"ZDApp_ResetTimerStart (2000);"之后。 我建议您将"SystemResetSoft();"(而不是"ZDApp_ResetTimerStart (2000);"全部联系起来、以查看 CC2530是否复位、或者您是否可以跟踪到 ZDApp_ResetTimerStart 并查看是否调用了"osal_start_timerEx (ZDAppTaskID、ZDO_DEVICE_RESET、DELAY);"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是否需要进行任何硬件设置、以便 CC2530进行软件复位? CC2530是如何进行软件复位的?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您不必进行任何硬件设置。 SystemResetSoft()会将软件复位到 CC2530。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    执行软件复位需要什么? 是否需要禁用外设、禁用中断等?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不可以、只需调用 SystemResetSoft。