CC2530发送数据问题。
问题描述:
一个半功能设备(END设备)掉网后,从新入网后(此时父设备更改了),然后这个END设备通过路由发送数据给协调器,协调器能正确的收到,但是协调器给他发数据就出错了。串口返回的值是这样子 FE 03 44 80 F0 02 00 35 ,这个状态值是0xF0,我看资料里说的是ZMacTransactionExpired,我不知道这个是怎么引起的,我看文档和协议栈中都没有详细说明,我想问这个情况怎么解决,是怎么引起的。谢谢·
你好,
1)有没有开启NV功能,如果没有的话,重新入网后会分配新的地址,协调器发的时候是不是按照原来的地址在发
2)有没有抓包的文件
3)ZMacTransactionExpired是指父节点buffer子节点数据的时间,现在父节点向子节点发送数据,是indirect的,父节点发给子节点的数据是通过子节点发data rquest,poll的形式把父节点处的数据拿走了,如果长时间没有data request就会产生expired
我找到原因了,是因为这个协调器已经这个设备还是他的子设备,其实他已经重新入网,换了父设备,只是这个协调器没有收到设备申明,所以没有更新自己网络信息表,我看你们的新协议栈Zstack2.5.1a更新错误中有提到这个。但是我们用你们2.5.0版本基本都完成整个程序了,现在这个BUG怎么解决啊。
还有一个问题我想问问 void NLME_SetPollRate( uint16 newRate );NLME_SetQueuedPollRate( uint16 newRate );NLME_SetResponseRate( uint16 newRate );这三个函数的参数最小设置为多少是有效的啊?我现在发现一个问题,我的设备唤醒200ms,我将newRate设置为100有时都没法从父设备读取到数据,我很诧异,难道建立通信需要很长时间吗?newRate 短一点是不是频率就更快?这个最小值设置我多少比较合适?
你可以比较下void ZDO_ProcessDeviceAnnce( zdoIncomingMsg_t *inMsg )这个函数。
void NLME_SetPollRate( uint16 newRate ); 是用于子设备向父设备请求数据用
NLME_SetQueuedPollRate( uint16 newRate );是用于poll indication用
NLME_SetResponseRate( uint16 newRate );是用于poll confirm用的
这几个数据并不是说越小越好,如果太小你的协议栈频繁处于poll,反而会影响其他工作。
我们协议栈里面提供的默认值,是经过测试验证的,一般情况下不要去修改