A协调器用仿真器下载好程序在线仿真,并运行程序。B路由器上电加入网络同时协调器记录上路由器的网络地址。B路由器断电。利用PC串口向协调器发送字符123456789,再由协调器发送数据给B路由节点。由于B路由器节点断电A协调器重发数据给B节点。为什么把重发次数APSC_MAX_FRAME_RETRIES参数值改大或改下都一样,无线抓到的数据以下:
pengfu dong:
回复 VV:
谢谢你的回复 我还是有点迷糊,我想给你打个电话 请问电话是多少?
pengfu dong:
回复 VV:
发送失败后触发AF_DATA_CONFIRM_CMD事件 得到的返回状态是0xE9 这个值就是MAC_NO_ACK,既然都得到MAC_NO_ACK这个值为什么设置APSC_MAX_FRAME_RETRIES还是不起作用
VV:
回复 pengfu dong:
当没有MAC ACK没有的时候,APSC_MAX_FRAME_RETRIES就不起作用了。
因为底层已经尝试8次发送了,没必要再多尝试了。
dong liu9:
回复 VV:
请问,如果我使用了AF_ACK_QUEST发送选项,那么对方的回应我在应用层那接收呢?还有接收到的是什么东西?是根据接收的内容怎么判断要不要重发
dong liu9:
回复 pengfu dong:
你弄明白这个问题了吗?明白的话希望你能帮我解答一下
我用的是zigbee2007pro协议栈,我想再终端设备调用AF_Data_Request()函数发送数据时,发送选项参数加上AF_ACK_REQUEST。我的问题是:1、接收端需要做什么处理?如果要处理的话在应用层怎么处理?
2、发送端如果接收到APS ACK,是在AF_DATA_CONFIRM_CMD事件下处理吗?是的话需要怎么处理?
VV:
回复 dong liu9:
1, 使能AF_ACK_REQUEST,目的地址接收端不需要做任何处理,协议栈APS层会自动把这个ACK发送给源地址。
2,收到APS ACK以后,在AF_DATA_CONFIRM_CMD中,就会有SUCCESS的状态值。
下面这个图,可以便于你理解关于ZigBee协议栈里面的MAC ACK和APS ACK的区别。
dong liu9:
回复 VV:
这两个机制是明白了,但是我昨天做实验验证的时候,在不使能AF_ACK_REQUEST的情况下,发送端的应用层还会进入到AF_DATA_CONFIRM_CMD事件里面,感觉有点奇怪,不是只有使能AF_ACK_REQUEST了,当收到APS ACK时才进入到AF_DATA_CONFIRM_CMD事件下吗?
另外我还有两个问题:1、使能AF_ACK_REQUEST,就是发送端在调用AF_DataRequest()函数时,将发送选项参数加上AF_ACK_REQUEST这个掩码就使能了是吗?
2、如果发送端接收到目的地址端的APS ACK 响应,发送端就会触发AF_DATA_CONFIRM_CMD事件,然后在这个事件下是提取消息中的pkt->hdr.status 值,根据不同的值来判断成功或者不成功吗?不知道理解的对不对。现在我不知道发回来响应时什么内容,也不知道如何去判断成不成功。
希望你能够解答我的疑惑,最好能能有个例程片段嘿嘿,谢谢
Aries Lord:
回复 dong liu9:
AF_DataRequest返回SUCESS就必出现AF_DATA_CONFIRM_CMD,AF_DATA_CONFIRM_CMD在不使能MAC ACK(广播)的时候,表示你要发送的数据的最后一个字节已离开CC2530了。
Aries Lord:
回复 dong liu9:
AF_DataRequest并不能保证你发的每一包数据都从CC2530的天线离开CC2530