TI中文支持网
TI专业的中文技术问题搜集分享网站

请教CC2530的2.5.1a协议下AF_DataRequest如何确认协调器接收到发送的消息

使用场景:

协调器C, 路由R。

正常情况下:R通过短地址0x0000,AF_DataRequest发送消息给协调器,显示返回状态0,为成功;

抓包文件看到C有mac层的ack确认帧;

出现问题的情况:将C断电后,R通过短地址0x0000,AF_DataRequest发送消息给协调器,仍旧显示发送成功。

抓包文件发现有重发三次,并且C没有返回ACK(C都断电了,让然没有ack了)。

分析:AF_DataRequest的返回状态应该只表明了发送成功,但是没有处理接收成功;

问题:

我应用层如何知道C没有接收到,因为消息不可以丢失,我可以怎么处理?

是否可行的方案:

1. 通过协调器收到消息后,应用层再返回数据帧;

2. 是否有应用层可以处理mac层的ack超时事件,用于择机重发。

YiKai Chen:

使能並檢查APS ack就可以了

user4356936:

回复 YiKai Chen:

感谢 YK Chen,我要在哪里使能此项?

YiKai Chen:

回复 user4356936:

AF_DataRequest的options參數上去使能AF_ACK_REQUEST

user4356936:

回复 YiKai Chen:

我试试,谢谢。

user4356936:

回复 Alvin Chen:

我已经加上 AF_ACK_REQUEST,并且ubiqua下也能看到这个ack;
我把协调器C断电后,ACK没有了,但是这个依旧似乎 status= afStatus_SUCCESS;
我看了其他你之前的帖子:
提示说: 你有沒有用zcl_registerClusterOptionList去註冊要收APS ACK;
还有 :e2e.ti.com/…/using-the-af-data-confirm-cmd-system-event-in-the-z-stack-to-track-acknowledgements-zigbee.aspx, 这个文件我打不开了。应该是地址变化了吧。
具体还有些不知怎么操作,需要你指点。

YiKai Chen:

回复 user4356936:

可以參考 sunmaysky.blogspot.com/…/how-to-check-aps-ack-in-ti-z-stack.html

user4356936:

回复 YiKai Chen:

sunmaysky.blogspot.com 我们国内无法访问吗?

user4356936:

回复 YiKai Chen:

我启用AF_ACK_REQUEST后,在SAPI.C里面的 SAPI_ProcessEvent() 下的SYS_EVENT_MSG事件里面的case AF_DATA_CONFIRM_CMD: 下pDataConfirm->hdr.status 变量如果为0,表示协调器接收到。
如果不为0(典型的是0XE9),表示协调器没接收到(我此时关掉了协调器)。
以上看起来满足了我的需求。
但是,但是,我将AF_DataRequest 里面的option选项 将 AF_ACK_REQUEST修改为0后,上面的pDataConfirm->hdr.status仍旧可以用。看起来是我的使用方法不对。但是又不知道问题出在哪里。。。
而下面这个访问不了,比较尴尬
sunmaysky.blogspot.com/…/how-to-check-aps-ack-in-ti-z-stack.html

user4356936:

回复 YiKai Chen:

另外一个问题: 我只有一个R和一个C,但是看整个空中报文很多。不知道红框内的报文是干嘛的?

因为我一个C下面挂60-80个R,每个R会根据状态随时汇报数据给C,只是一个R就这么多报文,我怕到时候那么多的R,整个网络都拥挤不堪。

已经启用了MTO。

附件里的是:一个R,大概7-8秒发送一个报文给C。这样的报文密度是否正常,我是否可以优化一些网络参数?

 AAA.c

赞(0)
未经允许不得转载:TI中文支持网 » 请教CC2530的2.5.1a协议下AF_DataRequest如何确认协调器接收到发送的消息
分享到: 更多 (0)