在AssociatedDevList未满时Route将ZED的关联表项删除(关联表中可能存在地址为FFFF的项目),经常发生MTO Failure问题,不知是何原因引发?
各位高手,我们在开发中遇到问题,请救帮助。
芯片和协议栈版本:CC2530 ZStack 2.5.1a
网络结构:1 ZC,5 ZR,32 ZED,每个路由与6个或7个ZED绑定,ZED仅与绑定的ZR通信;使用Many to One方式,ZC作为Concentrator接收ZC的数据
设备休眠:ZED向绑定的ZR发完数据后进入PM3休眠,由外部中断唤醒后以orphan方式恢复网络,再次工作完后进行PM3休眠。因为应用环境无法提供供电,所以ZR由电池供电,也需要周期性进入休眠,同样由外部中断唤醒。
修改过的协议栈代码或编译项:
f8wconfig.cfg中的DQUEUED_POLL_RATE=0
DRESPONSE_POLL_RATE=0
MAX_RTG_SRC_ENTRIES=10
MAX_RTG_ENTRIES=10
LINK_DOWN_TRIGGER=1000
NWK_MAX_DEVICE_LIST=20
NWK_MAX_ROUTERS=20
遇到的问题:
1、我们在每次ZR与ZC同步完时间后使用AssocCount()获取关联表数,并通过串口打印出来,网络组建后运行一段时间会发现ZR的关联表数会减少,关联表数减少后与该ZR绑定的某个或某几个ZED在被外部中断唤醒后无法恢复网络,从抓包记录中可以看到ZED唤醒后发送了Orphan notification,但是ZR不回复Coordinator realignment,此时ZR的收发是正常的。测试中不止一次遇到这种情况。
补充一个现象:因为现在使用的是DMA串口打印,在设备连续收发时,关联表项打印不完,但有时会发现若是关联表的前几项被删除的话,打印出来的关联表中会存在一个地址为"FFFF"的项目。
如下图:
在出现这种情况下,必须让ZED与ZR重新进行关联才可以实现二者通信,不知是何种原因导致ZR删除了某个ZED的关联表项,如何避免这种情况?
2、ZR与ZC通信时经常出现MTO FAILURE情况,我们的MAX_RTG_SRC_ENTRIES=10大于当前网络的最大路由数,路由和路由之间不存在同时工作的情况,但是经常会出现ZR向ZC发送请求,能够从抓包记录中看到该请求的MAC ACK,但是ZC会报出MTO FAILURE状态,如下图。请问如何能避免这种情况,MTO FAILURE状况出现时,重新进行路由发现会占用不少时间。
有谁遇到过这种情况吗?Zstack 2.51a是没有child age功能的啊。
我同时到TI E2E发帖问,得到答案的话来这里补充。
得到建议升级协议栈到最新版本,现在正在向zstack mesh 1.0.0移植。遇到的编译问题很多,还在努力。
我遇到类似问题一的情况,楼主实际ZR数5 ,那MAX_NEIGHBOR_ENTRIES必须大于5
另外 楼主ZR周期性进入休眠是怎么做的,会不会发link status