NXP Zigbee 3.0 软件开发流程 - 利用 Network Recovery 功能复制 Coordinator 调试笔记

调试目标

  • 将网关 A 的网络配置同步到网关 B,不修改 OTP Flash MAC 地址的情况下,让网关 B 正常工作,网关 A 和 B 的子设备可以互通

(ps. 本文中的网关皆指代 ZigBee 网络中的 Coordinator 角色)


测试环境

  • 软件工程(原厂提供):JN-AN-1216-Zigbee-3-0-IoT-ControlBridge_NETWORK_RECOVERY ;

  • 上位机:软件工程中的 ZGUI ;

  • 硬件:

    1. 2 个协调器( 以下简称 CN( Coordinator New ),CO( Coordinator Old ));

    2. 2 个子设备( Router or End Device ,以下简称 EPA,EPB );


测试流程

  1. CO 建立网络,EPA 加入 CO ,能够接受发送 ;

  2. ZGUI 连接 CO ,点击 Get PDM 控件,开始将 CO 的 PDM 信息拉取到 ZGUI 中保存,等待完成 ;

  3. ZGUI 连接 CN ,点击 Restore PDM 控件,开始将 CO 的 PDM 信息恢复到 CN 中,等待完成 ;

  4. 将 CO 下电,ZGUI 连接 CN,点击 Permit join 控件,操作 EPB 寻找网络 ;

    通过抓包,我们发现,CN 能够和 EPB 关联成功,但是无法分发密钥,原因是 Recovery 完成后,没有注册分发密钥的 Callback 函数。

    要解决该问题,需要修改 Coordinator 的代码,在 Recovery 完成软复位后,协议栈初始化完成后,调用下面的函数,注册 Trust Center 分发密钥的 Callback 函数。

    ZPS_vTCSetCallback(APP_bSendHATransportKey);
  5. 完成第 4 步后,CN 能够正常分发密钥了,但是 EPB 入网后,会马上 leave ;

    通过抓包,我们发现,Transport Key 报文中 Key Descriptor Payload 中的 Source Address 是 CO 的 MAC 地址,这个地址就是 Trust Center Address ;

    而在 ZigBee 协议中,分发密钥的必须是 Trust Center,然而这个 Transport Key 报文的源地址是 CN,造成了 TC Address 和密钥分发方不一致,子设备就会认为该次入网不安全,立即发起离网 :

     

    要解决该问题,需要修改 Coordinator 的代码,在 Recovery 完成软复位后,协议栈初始化完成后,调用下面的函数,将 Trust Center 的地址改为本地。

    ZPS_eAplAibSetApsTrustCenterAddress ( ZPS_u64NwkNibGetExtAddr ( ZPS_pvAplZdoGetNwkHandle ( ) ) );
  6. 完成第 5 步后,EPB 已经能正常入网,也能正常控制,但是我们发现,每次 Link Status 更新时,通过 CO 入网的设备都会广播 Network Status,报文中显示:Address Conflict( 地址冲突 ),这是由于 EPA 中保存的 TC Address 还是 CO 导致的。

     

    解决改问题,目前有两个方法:

    1. 修改 OTP Flash ,将 CN 的 MAC 地址修改为和 CO 一样

    2. EPA 重新入网

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论