主题中讨论的其他器件:Z-STACK
您好!
我的设备正在尝试加入不存在的网络。 我正在擦除存储器并将其刷写、以确保 NV 已清除、 且在大约5分钟后触发 ZDO_SyncIndicationCB 且其 devStartMode 更改为 MODE_REGIN。 这可能是什么原因呢?
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.
您好 Panagiotis:
您使用的是什么 Z-Stack 版本、引用的项目/编译配置示例以及您对默认设置进行了哪些更改? ZDO_SyncIndicationCB 指示与父设备失去同步、并且对于没有父关系的新设备、不会预期异或 MODE_REJIN。 您如何擦除器件存储器以及是否尝试通过软件执行恢复出厂设置? 请在代码中共享 devStartMode 更改为 MODE_REGIN 的确切位置。 是否使用了 Touchlink 功能? 此外、确认您的信道配置并提供监听器日志、至少记录从器件发送的信标请求。
此致、
瑞安
您好!
我正在使用 Z-Stack 1.2.2a、引用的项目是 SampleLight 终端器件、但该项目取得了很高的进展、以至于像是自己的项目一样。 我被告知这个项目是为了解决这个问题、所以我对它的配置没有太多了解。 我尚未尝试 通过软件执行恢复出厂设置、但我曾尝试让"网络"保持不变、但没有任何结果、同时也尝试重新启动设备。 devStartMode 在 ZDEP.c 第1669行更改为 MODE_REGIN。 touchlink 在家庭自动化中不可用。 关于监听器、由于 ZigBee 流量较高、我将该器件和监听器都设置为通道21。 以下是到监听器日志的链接(并非所有信标请求都来自我的设备、但其中大多数请求都来自): https://drive.google.com/file/d/1z1Mdkc9o0aBPe6yBKazf9qBgyphUTT8x/view?usp=sharing
如果对 ZD8p 进行了修改、那么此处会是您需要的确切代码片段
if (nwkStatus == ZSuccess)
{
.....
}
else
{
if ( devStartMode == MODE_RESUME )
{
if ( ++retryCnt <= MAX_RESUME_RETRY )
{
if ( _NIB.nwkPanId == 0xFFFF )
devStartMode = MODE_JOIN;
else
{
devStartMode = MODE_REJOIN;
_tmpRejoinState = true;
prevDevState = DEV_NWK_SEC_REJOIN_CURR_CHANNEL;
}
}
我设法弄清楚何时触发回调。 当程序启动时、一分钟后它会将带有 NLME_SetPollRate 的轮询速率设置为 x 数、除非器件加入网络、否则在6分钟后、它会再次将轮询速率设置为相同的 x 数、然后会触发回调。 在后续设置的轮询率上(因为如果器件未加入网络、则每6分钟会发生一次)、 不会触发回调
如代码片段所示、如果 _NIB.nwkPanId 不等于0xFFFF、则设置 MODE_REGIN。 当 devStartMode 等于 MODE_REGIN 时、_NIB.nwkPanId 在 NIB_init 中设置为 INVALID_NODE_ADDRESS、否则在 ZD8p_ProcessOSALMSg 中针对 ZDO_Nwk_dic_CNF 情况进行了更改。 您可以进一步监视_NIB 内容并根据您的需要修改 ZDAP.c。 我建议参考 Z-Stack 3.0.2版本、因为它更加完善和稳健、例如它还 在 ZDOInitDevice 中将_NIB.nwkPanId 设置为0xFFFF。 您所描述的六分钟时间听起来像是在 f8wConfig.cfg 文件中定义的 REGUING_BACKOFF 和 REGUING_SCAN。 该网络上是否有 ZC/ZR 设备的信标? 它们未出现在监听器日志中、即使 ZED 打算"重新加入"、也应响应 Beacon 请求。 您是否还尝试过测试默认的 Z-Stack 1.2.2a ZED SampleLight 项目?
此致、
瑞安