鸣涧 发表于 2022-11-25 22:57:50

NXP Zigbee 3.0 软件开发流程 - 子设备老化机制分析

NXP Zigbee 3.0 软件开发流程 - 子设备老化机制分析





在 ZigBee 网络中,父节点需要维护它的邻居表,这涉及到丢弃不活跃的子节点(可能已经离开了网络),以便让路给潜在的新的子节点。终端设备老化机制可以支持这一点的维护。在这种机制中,超时行为应用于路由节点邻居中的每一个子节点。路由父节点如果在超时过期之前没有从终端设备子节点接收到一个名为“Keep Alive(保活)”的数据包,就假定该子节点不再活跃并将其从邻居表中删除。
下面来讲解在 NXP ZigBee 3.0 协议栈中终端设备老化机制。

[*]超时周期设置包
当终端设备连接(或重新连接)网络时,此期间通过“端设备超时周期设置请求包(Timeout Request)”传递给父设备。超时机制将由父设备应用于端设备的邻居表条目。Keep Alive 包从端设备到达父设备将导致超时定时器重置。如果超时过期,父设备将从其邻居表中删除相关的子项。在收到终端设备的超时周期设置请求(Timeout Request)后,父级将向终端设备发送响应(Timeout Response),指示请求的结果。如果请求已成功,则终端设备随后可以发送保活(Keep Alive)的数据包。
通过 ZigBee 3.0 Sniffer Log ,我们可以看到在子设备入网时会发送超时周期设置包。NWK Payload 数据:0x000E0B0B 代表请求,0E 代表时间周期 16384 minutes。



[*]超时周期间隔
超时周期是特定于单独的一个子节点的,并使用函数zps_bAplAfSetEndDeviceTimeout(ZPS_pvAplZdoGetAplHandle(), u8Timeout); 在终端设备上设置。参数 u8Timeout 在 NXP 协议栈中可以使用以下的时间周期: 父设备最初将所有终端设备的超时周期都设置为 NIB 中定义的默认值,在 NXP 软件中为 256 分钟。除非由终端设备更改,否则超时将保持在此值,如上所述。
超时周期也可以由父设备设置,通过使用函数 zps_vAplAfSetLocalEndDeviceTimeout(ZPS_pvAplZdoGetAplHandle(), u16Short, u8Timeout); 在父设备上设置。

[*]保活包
可以使用函数 zps_eAplAfSendKeepAlive() 从终端设备发送一个保活(Keep Alive)的数据包。建议在为终端设备定义的超时周期内至少调用三次此函数,以防止由于父端丢失保存活数据包而意外地将该子函数从网络中删除。保活的数据包也可以是以下任何一种类型:
[*]MAC 数据轮询:在这种情况下,父级可以将挂起的数据发送回终端设备。此数据到达终端设备将由 zps_EVENT_AF_DATA_INDICATION 事件指示
[*]终端设备超时周期设置请求:此包类型只具有在父设备上重新启动终端设备超时周期的效果,该超时周期设置请求包将返回对终端设备的超时周期设置响应,指示请求的结果。
要使用的保活包类型由父设备确定,并在父级上的 NIB 中配置,在 NXP 软件中,默认情况下,路由器被配置为接受任何一种保活包类型。此信息在连接网络时发送到终端设备的超时周期设置响应(Timeout Response)中传递给终端设备。然后,zps_eAplAfSendKeepAlive() 函数将自动发送适当的保活数据包类型,如果任何一种数据包类型被父级接受的话,该函数发送一个数据轮询数据包。       默认情况下,任何一个数据轮询(包括 Data Request )都能作为保活包。


参考资料《 JN-UG-3113 ZigBee 3.0 Stack User Guide v1.5.pdf 》Page 106 – 5.10.1 jn-ug-3113_zigbee_3_0_stack_user_guide_v1_5.pdf《 Zigbee-Spec-R21 》Page 365 – 3.6.10.5,3.6.10.6 zigbee-spec-r21.pdf



页: [1]
查看完整版本: NXP Zigbee 3.0 软件开发流程 - 子设备老化机制分析