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.

[参考译文] CC2652P:与 Silicon Labs 协调员在 PANID 更新请求方面的互操作性

Guru**** 2589280 points
Other Parts Discussed in Thread: CC2652P, Z-STACK, CC2530

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/991377/cc2652p-interoperability-with-silicon-labs-coordinator-for-panid-update-request

器件型号:CC2652P
Thread 中讨论的其他器件: Z-stackCC2530

我的客户正在测试 ZigBee 网络、将 CC2652P 用作终端设备、以便与 Silabs 协调器进行通信。  他们发现、发送更新 PANID REQ 时协调器不会增加 nwkUpdateId 字段、因此 CC2652将转储该请求、新的 PANID 将不被接受。

是否有权变措施使 CC2652P 访问 更新 PANID REQ 而不增加 nwkUpdateId?

此致、

水阳

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

    由于其 SL 协调器不会使 nwkUpdateId 字段递增、我建议您检查 SL 以解决问题。

    2.您可以尝试跟踪 ZDNwkMgr_ProcessMgmtNwkUpdateReq 并将其设备连接到其中,以查看是否可以解决此问题。

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

    您好、Shuyang、

    根据黄某的评估:

    1.从2017/R22 Zigbee 规范的附录 E 中:"网络管理器可以从 NIB 中递增 nwkUpdateId 参数、并将其包含在 Mgmt_nwk_Update_req...每个节点还应增加 nwkUpdateId 参数、并重置总传输计数和发送故障计数器。"  这就是 Z-Stack 要求 nwkUpdateId 递增的原因。

    2. 您可以修改 ZDNwkMgr_ProcessMgmtNWkUpdateReq 中的以下 if 语句作为变通办法:

    if ( Req.nwkUpdateId > _NIB.nwkUpdateId || ( Req.nwkUpdateId == 0 && _NIB.nwkUpdateId == 0xFF ) )

    请注意 、对于 RxOnWhenIdle  等于  false 的器件、将不会接收到任何网络通道变化。

    此致、
    Ryan

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

    您好、Ryan 和 Yikai、

    感谢您的澄清。

    API  ZDNwkMgr_ProcessMgmtNWkUpdateReq 似乎适用于 CC2530、我在 CC2652的文档中找不到它、CC2652是否具有类似的 API?

    BR、

    水阳

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

    您可以在 ZD_NWK_mgr.c 中找到 ZDNwkMgr_ProcessMgmtNWkUpdateReq

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

    找到它,谢谢!

    BR、

    水阳

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

    您好、Ryan、

    客户尝试修改  ZDNwkMgr_ProcessMgmtNWkUpdateReq、但协调器发送的网络更新请求是 NWK 层消息、而不是 ZDP 层消息、因此堆栈会忽略该消息、 并且永远不会触发 ZDNwkMgr_ProcessMgmtNWkUpdateReq。

     是否有办法在 CC2652中直接处理 NWK 层或 MAC 层消息? 在 CC2530的堆栈中、有一个称为 rxStartIsr 的 API 来处理 Mac 层、CC2652的堆栈是否具有类似的 API?

    谢谢。

    BR、

    水阳

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

    您好、Shuyang、

    开发人员无法访问 NWK_EVENT_LOOP、但他们可以尝试拦截 MAC_CbackEvent 中的消息。  他们是否愿意 共享此 NWK 层消息的监听器日志?   

    此致、
    Ryan

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

    您好、Ryan、

    请在 Silabs 设备之间查找监听器日志以进行 PAN ID 更新。 在此日志中、 PAN ID 已成功更新为0x4444。 但对于 CC2652、NWK 更新数据包将被忽略、PAN ID 将不会更新。

    e2e.ti.com/.../test11_5F00_2channel_5F00_ok.cubx

    BR、

    水阳

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

    如果 定义了 NWK_Manager、则 NLME_NETWORKUpdateCB 应调用 pZDNwkMgr_NetworkUpdateCB、您可以在 ZD_NWK_mgr.c 中修改该函 数、以使用 Zstackapi_DevForceNetworkUpdateReq API 手动强制进行网络更新。

    此致、
    Ryan

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

    您好、Ryan、

    客户在定义了 NWK_Manager 的情况下进行了尝试,但 仍然没有调用 pZDNwkMgr_NetworkUpdateCB。

    他们现在正尝试  直接截取 MAC 层消息、以实现需要一个 API 来解密 MAC 层消息。 他们在 SSP.h 中找到了一个 API、如下所示、但找不到任何相关文档。

    /*
     * Secure/Unsecure a network PDU
     */
    extern ZStatus_t SSP_NwkSecurity(uint8_t ed_flag, uint8_t *msg, uint8_t hdrLen, uint8_t nsduLen);

    您能否确认这是否是用于解密 MAC 层消息的正确 API、并提供一些有关如何使用此 API 的说明和示例? 例如,参数 ed_FLAG 和*msg 代表什么?

    谢谢。

    BR、

    水阳

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

    在 ZD_NWK_mgr.c 中、pZDNwkMgr_NetworkUpdateCB 声明为 NULL、如果希望函数生效、则必须更改该函数(填充所需的操作)。

    SSP_NWKSecurity 是用于保护(ed_flag=0)或不安全(ed_flag=1) NWK 层数据包的 API。  MSG 是 macMcpsDataInt_t -> sData_t ->*p 和 hdrLen/nsdualen 对应于 NLDE_FrameFormat_t 参数的指针。  由于数据包加密/解密由预构建的 Z-Stack 库处理、因此不会共享任何资源、也不会被开发人员直接使用。

    此致、
    Ryan

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

    Q1:当 CC2652在 NWK 更新消息中收到 nwkUpdateId 字段累加时、ZStack 可以触发 pZDNwkMgr_NetworkUpdateCB。 否则,不会触发 pZDNwkMgr_NetworkUpdateCB。

    ZStack 似乎丢弃了非法的 NWK 更新消息。

    :μ A

    我尝试使用 SSP_NWKSecurity()对监听器中的解密纯文本数据进行加密,以验证如何使用此 API。

    测试代码如下:

    #if 1.
    // NWK 密钥为2C:AC:D1:99:CE:A5:6E:00:94:0E:10:59:E6:AF:1B:1A
    uint8_t tmpSta = 0xFC;
    uint8_t tmpHdrLen = 36;
    uint8_t tmpNsduLen = 6;
    uint8_t tmpPlainTextData[36]={0x09、0x12、0xFC、0xFF、0x00、 0x00、0x01、0x64、0x46、0x12、 0x6E、0xFE、0xFF、0xE2、0x0A、 0x68、
    0x28、0xE1、0x3B、0x07、0x00、 0x46、0x12、0x6E、0xFE、0xFF、 0xE2、0x0A、0x68、0x00、
    0x08、0x60、0xAB、0xAF、0xEA、 0x13};

    uint8_t tmpCipherTextData[36]={0x09、0x12、0xFC、0xFF、0x00、 0x00、0x01、0x64、0x46、0x12、 0x6E、0xFE、0xFF、0xE2、0x0A、 0x68、
    0x28、0xE1、0x3B、0x07、0x00、 0x46、0x12、0x6E、0xFE、0xFF、 0xE2、0x0A、0x68、0x00、
    0xF7、0xCE、0xC2、0xB7、0xCA、 0xB5};

    uint8_t isEncrypt = 0;//0 -加密;1 -解密

    // SSP_NWKSecurity (uint8_t ed_flag、uint8_t *msg、uint8_t hdrLen、uint8_t nsduLen);
    tmpSta = SSP_NWKSecurity (isEncrypt、tmpPlainTextData、tmpHdrLen、tmpNsdualLen);


    _debug_printf_sub ("加密:STA = 0x%x、0x%02x%02x%02x%02x %02x%02x %02x %02x %02x %02x%02x %02x %02x %02x%02x%02x 0x%02x 0x%02x %02x %02x %02x %02x 02x %02x 02x %02x 02x %02x 02x %02x %02x 02x 02x %02x
    TmpSta、
    tmpPlainTextData[0]、tmpPlainTextData[1]、tmpPlainTextData[2]、tmpPlainTextData[3]、
    tmpPlainTextData[4]、tmpPlainTextData[5]、tmpPlainTextData[6]、tmpPlainTextData[7]、
    tmpPlainTextData[8]、tmpPlainTextData[9]、tmpPlainTextData[10]、tmpPlainTextData[11]、
    tmpPlainTextData[26]、tmpPlainTextData[27]、tmpPlainTextData[28]、tmpPlainTextData[29]、
    tmpPlainTextData[30]、tmpPlainTextData[31]、tmpPlainTextData[32]、tmpPlainTextData[33]、tmpPlainTextData[34]、tmpPlainTextData[35]);

    #endif


    打印结果如下:
    >>> zclSampleLight_processKey[2991]:加密:STA = 0x0、0X0912fcff 00000164 46126efe e20a6800 0x0860 ABAFE13
    >>> zclSampleLight_processKey[2991]:加密:STA = 0x0、0X0912fcff 00000164 46126efe e20a6800 0x0860 ABAFE13

    打印的结果显示 SSP_NWKSecurity()已成功执行。 我可以从何处获取加密的结果数据?

    如果您可以提供解密示例以帮助我们理解、那将非常好。

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

    抱歉、测试代码中出错:uint8_t tmpHdrLen = 36是错误;

    我将 tmpHdrLen 的值更改为30,运行后的打印结果如下:
    >>> zclSampleLight_processKey[2991]:加密:STA = 0x0、0X0912fcff 00000164 46126efe。 e20a6800 0x280E 00000011

    NWK 有效载荷看起来是新的、但看起来不正确。

    我的测试过程如下:
    步骤1:我通过监听器获取协调器广播的链路状态数据;
    步骤2:将这些数据添加到测试代码中、生成固件并将其烧写到 CC2652中;
    步骤3:CC2652加入协调器所在的网络;
    步骤4:按键触发 CC2652执行测试代码以解密操作;
    此过程是否有问题?

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

    你好,Howjie,

    pZDNwkMgr_NetworkUpdateCB 仅在 nwkUpdateId 递增时触发。  这 符合前面提到的 Zigbee 规范部分。  您可以联系 Silicon Labs 来确定其器件不能相应运行的原因。

    Z-Stack 使用 nwkApplyNwkSec 来应用网络级安全性(对传出进行加密)。   在使用 SSP_NWKSecurity (解密)验证安全性之前、NLDE_ParseMsg 用于解析传入的 NWK 消息。

    此致、
    Ryan

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

    谢谢你。

    可以成功解密。