本人在做测试,router节点发送数据给COO,每隔1秒发一次。在AF_DATA_CONFIRM_CMD观察发送数据的状态,发送存在ZMacChannelAccessFailure的情况,抓包发现这个数据没有发送出去。在这种情况下,是不是意味着信道干扰导致不能正常发送?MAC层是否会启动重新发送机制??还是需要我运用再次发送一次数据??能否介绍下相关的机制。谢谢
Aries Lord:
AF_DATA_CONFIRM_CMD是AF层的返回,当返回ZMacChannelAccessFailure,NWK操作了两次MAC层发送,AF_DATA_CONFIRM_CMD返回值是第二次MAC_MCPS_DATA_CNF的返回值。遇到信道干扰时,千万不可立即重发,否则干扰越厉害。应该等待一段时间避开冲突点。
dozen yao:
回复 Aries Lord:
恩,返回这个错误,实际上是CSMA退避后,还是不能发送导致的吧。我现在的想法是把这个CSMA退避运行次数和时间延长。如果还是失败,那么就返回错误的结果给运用,让运用判断是否需要再次发送。点对点测试发现信道干扰是主要的不能发送的原因。
Aries Lord:
回复 dozen yao:
发得快就容易遇到这个错误,一般100ms发一次比较合适。改相关参数在MAC PIB里面改,默认是320us一个回退周期,一共是1 到 (3+7+15+15)个周期,加上2次重发最大能达到60ms
dozen yao:
回复 Aries Lord:
回退周期应该是单片机时钟觉得的吧?一共是1到(7+15+31)个周期吧,默认minBe=3,maxBe=5。移3位-1=7,移4位-1=15,移5位-1=31。这样计算是不是正确?
谢谢你的回答