鸣涧 发表于 2022-11-25 23:41:05

NXP Zigbee 3.0 软件开发流程 - 利用 Network Recovery 功能复制 Coor...

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 ;
[*]硬件:

[*]2 个协调器( 以下简称 CN( Coordinator New ),CO( Coordinator Old ));
[*]2 个子设备( Router or End Device ,以下简称 EPA,EPB );


测试流程
[*]CO 建立网络,EPA 加入 CO ,能够接受发送 ;
[*]ZGUI 连接 CO ,点击 Get PDM 控件,开始将 CO 的 PDM 信息拉取到 ZGUI 中保存,等待完成 ;
[*]ZGUI 连接 CN ,点击 Restore PDM 控件,开始将 CO 的 PDM 信息恢复到 CN 中,等待完成 ;
[*]将 CO 下电,ZGUI 连接 CN,点击 Permit join 控件,操作 EPB 寻找网络 ;通过抓包,我们发现,CN 能够和 EPB 关联成功,但是无法分发密钥,原因是 Recovery 完成后,没有注册分发密钥的 Callback 函数。要解决该问题,需要修改 Coordinator 的代码,在 Recovery 完成软复位后,协议栈初始化完成后,调用下面的函数,注册 Trust Center 分发密钥的 Callback 函数。ZPS_vTCSetCallback(APP_bSendHATransportKey);
[*]完成第 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 ( ) ) );
[*]完成第 5 步后,EPB 已经能正常入网,也能正常控制,但是我们发现,每次 Link Status 更新时,通过 CO 入网的设备都会广播 Network Status,报文中显示:Address Conflict( 地址冲突 ),这是由于 EPA 中保存的 TC Address 还是 CO 导致的。 解决改问题,目前有两个方法:

[*]修改 OTP Flash ,将 CN 的 MAC 地址修改为和 CO 一样
[*]EPA 重新入网





页: [1]
查看完整版本: NXP Zigbee 3.0 软件开发流程 - 利用 Network Recovery 功能复制 Coor...