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:如何在不关闭的情况下重新启动网络扫描

Guru**** 2390755 points
Other Parts Discussed in Thread: TIMAC

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1495404/cc2530-how-to-restart-the-network-scan-without-turning-off

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

工具与软件:

我使用 TIMAC。

如果在 ZigBee 设备开启后 ZigBee 协调器开启

则 ZigBee 器件将无法找到此网络。

这是一种用于重新启动 ZigBee 器件(HAL_SYSTEM_RESET ();)的解决方案。

但这种方法并不好、因为所有设置都会被重置。

如何在没有 HAL_SYSTEM_RESET()的情况下重新启动网络扫描?

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

    尊敬的 Edan:

    TIMAC 本身不是 Zigbee 堆栈解决方案、但它确实支持底层  IEEE 802.15.4-2006规范。  您应该能够使用 TIMAC API MAC_MlmeScanReq 和 MAC_MlmeAssociateReq 以及相应的回调用例 MAC_MLME_SCAN_CNF 和 MAC_MLME_ASSIGNE_CNF 执行器件扫描并与现有网络关联。   

    此致、
    Ryan

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

    感谢您的答复。

    我已经尝试过你的建议。

    osal_start_timerEx(MSA_TaskId, MAC_MLME_SCAN_CNF, MSA_WAIT_PERIOD);

    它可以重新扫描并加入现有网络。
    但所有设置仍然被重置。(所有数字输出端口均已关闭)

    我尝试了 MAC_MLME_Associated_CNF、而不是 MAC_MLME_SCAN_CNF。
    它似乎与 HAL_SYSTEM_RESET()相同。

    我尝试了 MSA_DeviceStartup ();而不是 回调情况 MAC_MLME_SCAN_CNF 和 MAC_MLME_Associated_CNF
    它 可以在 ZigBee 器件丢失网络时重新扫描网络、而无需重置数字端口。

    这怎么办?

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

    请使用 OSAL 计时器调用您在 msa.h 中定义的新事件、并   从该事件中调用 MSA_ScanReq -> MAC_MlmeScanReq 或 MSA_AssociateReq -> MAC_MlmeAssociateReq。  不应直接 输入 MAC_MLME_Associated_CNF 或 MAC_MLME_SCAN_CNF 回调、因为它们只应由堆栈根据无线电事件调用、在这种情况下、确认关联或扫描响应。

    您还可以进一步调试和单步执行代码、以确定复位原因以及导致数字输出端口行为的原因。

    此致、
    Ryan

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


    osal_start_timerEx(MSA_TaskId, MSA_DeviceStartup_EVENT, MSA_WAIT_PERIOD);

    是,MSA_ScanReq ()有两个参数。 但我不知道它的价值。

    所以我使用了 Start_Network ()。  MSA_ScanReq ()存在于 Start_Network ()中;

     

      if (events & MSA_DeviceStartup_EVENT){
        Start_Network();
        //MSA_DeviceStartup();
      return events ^ MSA_DeviceStartup_EVENT;
      }

    :  

    void Start_Network(void){
      if (!msa_IsStarted)
      {
        /* Read IEEE Address from Info Page */
        MAC_READ_CHIP_IEEE_ADDR(msa_ExtAddr);
        
        /* Decide if direct or indirect messaging is used */
        msa_IsDirectMsg = MSA_DIRECT_MSG_ENABLED;
    
        if (msa_IsDirectMsg)
        {
          /* Start the device as an DIRECT messaging device */
          if (msa_BeaconOrder != 15)
            MSA_ScanReq(MAC_SCAN_PASSIVE, MSA_MAC_BEACON_ORDER + 1);
          else
            MSA_ScanReq(MAC_SCAN_ACTIVE, 3);
        }
        else
        {
           /* Start the device as an INDIRECT messaging device and beacon disabled */
           /* Beacon network doesn't work with polling */
           if (!msa_IsStarted)
           {
             msa_IsDirectMsg = FALSE;
             MSA_ScanReq(MAC_SCAN_ACTIVE, 3);
           }
        }
      }
    }

    结果很好。
    "你说什么?

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

    这似乎是一种合理的方法。

    此致、
    Ryan

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

    感谢您的出色指导。