|
查看: 3067|回复: 3

关于终端rejoin的问题

[复制链接]

22

主题

35

回帖

288

积分

华贵铂金

积分
288
发表于 2025-4-29 14:22:19 | 显示全部楼层 |阅读模式 来自 广东深圳
information
说明:   建议参照本版块置顶帖内容输入必要信息
芯片型号: tlsr8258
SDK及版本: V3.6.7.4
你好,目前使用终端遇到一个问题,在终端失去父节点或者协调器时,会启动sdk内部的rejoin backoff机制,它会以很短的时间发起beacon request,因为低功耗设备短时间内发起beacon request会很耗电,期望它的间隔可以由应用层设置,比如开始时候是几秒钟一次,随着时间推移半小时,一个小时;于是将ZDO_REJOIN_TIMES设置0,它不会触发rejoin backoff机制,然后用软定时调用zb_rejoinReq(NLME_REJOIN_METHOD_REJOIN, zb_apsChannelMaskGet()),进行rejoin这样会带来另一个问题,如果终端经过路由入网,终端与路由由于距离或者信号问题无法通信时,终端将无法进行rejoin,此时即使很近的距离也无法进行rejoin,它的rejoin时入下图所示,在device annuonce 后直接进行data request,没有办法进行数据交互;


问:如何在终端离网后,发起的beacon request的时间可以应用层控制,不影响终端的rejoin?
期望得到你们的回复,谢谢

ac655d528e764fd41182347069126ef.png

29

主题

364

回帖

1167

积分

版主

积分
1167
发表于 2025-4-30 16:58:55 | 显示全部楼层 来自 上海
你好,

beacon request是由rejoin触发的,在调用zb_rejoinReq()后,协议栈会根据传进来的channel mask执行active scan(即在指定的channel mask上发送beacon request),
然后在收集到的所有beacon中筛选一个合适的作为意向父节点,并向它发起rejoin请求,rejoin成功后就会广播device announce告知周边的节点它已经入网成功。

因此,应用层可以通过控制调用zb_rejoinReq()的时间,来实现你的应用需求。

22

主题

35

回帖

288

积分

华贵铂金

积分
288
 楼主| 发表于 2025-4-30 18:02:12 | 显示全部楼层 来自 广东深圳

dai

qiTL_YB 发表于 2025-4-30 16:58
你好,

beacon request是由rejoin触发的,在调用zb_rejoinReq()后,协议栈会根据传进来的channel mask执行 ...

你好,感谢你的回答,也许我表达还不够清楚,如果将应用层所有zb_rejoinReq屏蔽,当失去父节点后,协议栈还是会一直以一定的间隔发起beacon request,我意思是在无法和父节点通信时,让协议栈不 会一直发起beacon request,这个可以在我应用层管理,所以我尝试将ZDO_REJOIN_TIMES设置为0,达到我的要求,但是这样会有一个问题,如果终端经过路由入网,终端与路由由于距离或者信号问题无法通信时,终端将无法进行rejoin,此时即使很近的距离也无法进行rejoin,无法恢复网络与父节点通信,期待你的再次回答

29

主题

364

回帖

1167

积分

版主

积分
1167
发表于 2025-5-9 20:48:55 | 显示全部楼层 来自 上海
haiou 发表于 2025-4-30 18:02
你好,感谢你的回答,也许我表达还不够清楚,如果将应用层所有zb_rejoinReq屏蔽,当失去父节点后,协议栈 ...

我的理解是,当你将ZDO_REJOIN_TIMES设置为0时,底层将不再主动rejoin,这就需要应用层来调用zb_rejoinReq()去触发rejoin。

本版积分规则

关注公众号
隐私政策|Telink forum

相关侵权、举报、投诉及建议等,请发 E-mail:forum@telink-semi.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|沪ICP备17008231号-1 |沪公网安备31011502403548号

在本版发帖返回顶部