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.

[参考译文] 编译器/LAUNCHXL-CC2650:终端器件(CC2650)与协调器(CC2530)之间的通信

Guru**** 2589280 points
Other Parts Discussed in Thread: CC2530, CC2650

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/717009/compiler-launchxl-cc2650-communication-between-end-device-cc2650-and-coordinator-cc2530

器件型号:LAUNCHXL-CC2650
Thread 中讨论的其他器件:CC2530CC2650

工具/软件:TI C/C++编译器

您好!

我将 CC2650 launchxl 用作终端器件、将 CC2530用作协调器。  

我正在尝试开始协调器和终端设备之间发送的通信和数据。 我不使用 EZmode 进行数据传输、因此不会出现查找和绑定过程。 我已禁用编译器预处理器中的 ZCL_EZMODE。 我只有 ZSAK_MANUAL_START 才能开始发现过程。  

我能够在协调器端建立网络。当我开始在终端设备端下载和调试代码时、在数据包监听器上、我看到关联请求成功、并向协调器轮询数据请求。 请参阅 PSD 文件 e2e.ti.com/.../NwkCommunication_5F00_8.psd 以了解有效性。 这是否意味着终端设备已加入协调器并已准备好发送数据?  

当我调试代码时、我看到 params.state 为 ZSTART_State_Hold。 从代码中、我看到如果这是状态、则器件将再次初始化并再次执行该过程、但器件在保持后不执行任何操作。

请帮助。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据您的监听器日志、我看到您的设备加入了协调器、并且已准备好发送数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的及时响应。 我还在数据包监听器侧看到此信息。 但是、当我调试代码时、我看到 params.state 为 Zstart_hold_state。  

    这是一段代码、我在其中打印状态和 params.state:

    zstart_params * Zstart_processStateChange (Zstack_DevState)
    {
    System_printf ("%x %x\n"、state、params.state);
    if ((state =ZStack_DevState_dev_router)
    ||(状态=ZStack_DevState_dev_end_device))
    {
    if (params.state =ZSTART_State_Joined_PREAUTH)
    {
    params.state = ZSTART_State_Joined;
    }
    否则、如果(params.state =ZSTART_State_ReJoining)
    {
    params.state = ZSTART_State_Rejoined;
    }
    其他
    {
    //未知状态
    params.state = ZSTART_State_Hold;
    }
    
    //使用 Save off default channel list (保存关闭默认频道列表),以便稍后重新加入
    zstart_writeParameters (ZNWK_DEFAULT_CHANLIST);
    
    //释放分配的内存
    params.chosenNetwork = 0;
    params.chosenRouter = 0;
    zstart_deleteNWkList();
    zstart_freeBlackList();
    
    //停止时钟
    if (Util_isClockActive (&zstartClkStruct)))
    {
    Util_stopClock (&zstartClkStruct);
    }
    }
    否则、如果(state =ZStack_DevState_NWK_孤立)
    {
    params.state = ZSTART_State_ReJoining;
    }
    其他
    {
    //未知状态
    params.state = ZSTART_State_Hold;
    }
    返回(params);
    }
    

    打印为 STATE = 6 (表示 ZStack_DevState_dev_end_device)且 params.state = 9 (ZSTART_State_Hold)的值。 怎么可能呢? 问题是否出在 system_printf 延迟打印内容以及已经通过无线方式执行的内容? 请改正我的问题。  

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

    我确实看到器件已成功加入、ZED 能够轮询 ZC 以检查是否有任何待处理数据、这意味着它们已成功加入。 在调试时、您是否看到这是 ZED 加入网络并进行轮询后的状态?

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

    您好 Sean、

    感谢您的回答。

    是的、这是当 ZED 轮询来自 ZC 的数据请求时在控制台上显示的状态。 请参阅:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在哪里可以看到器件将再次初始化并再次执行该过程?

    在 Switch_processZStackMsgs 内部、只有一个用于 ZSTART_State_Hold 的 if/else、在 ZSTART_State_Hold 内部没有任何作用。 我们可以看到、如您所述、req.state 为 ZStack_DevState_dev_end_device、这意味着 ZED 已成功加入网络并进行身份验证。 从监听器日志中可以看到、设备还可以成功轮询其父设备、以获取任何待处理数据。

    最棒的
    肖恩