关于使用ZDP_NwkAddrReq函数获取休眠终端的短地址
大家好,我在使用ZDP_NwkAddrReq函数通过IEEE地址获取节点短地址时遇到了问题:
需要让终端节点的-DRFD_RCVC_ALWAYS_ON=TRUE 才能成功获取到短地址。=FALSE时则不行。
想请教一下用什么办法可以用IEEE地址获取到 休眠 节点的短地址。
不管怎么样先在这里谢谢各位了!
论坛有类似问题,解答请看这边: https://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/91221.aspx
Viki Shi 你好,谢谢你在百忙之中回答我的问题。
这篇帖子我看了,原帖的发起者到最后也是遇到和我一样的疑问,按照原帖里VV说的进行操作,的确可以是在 -DRFD_RCVC_ALWAYS_ON=TRUE时获取到终端的短地址,但当 -DRFD_RCVC_ALWAYS_ON=FALSE时则没办法。
我也是着将ZDP_NwkAddrReq函数中dstAddr.addr.shortAddr=NWK_BROADCAST_SHORTADDR_DEVRXON
改为
dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVALL;
依旧无法实现。
大家好……
请问有人知道么……
谢谢了。
-DRFD_RCVC_ALWAYS_ON=FALSE的时候,你的POLL_RATE是多少,如果子设备没有向父设备进行data request的话,父设备是不会把广播数据发送给休眠的设备的。
另外父设备给子设备保存数据的最长时间是7.5s,如果超时就直接把数据丢了。
关于您说的7.5s,是固定的吗?有办法修改这个timeout值吗?
可以改。
在 f8wConfig.cfg 的 -DNWK_INDIRECT_MSG_TIMEOUT=
暂时告一段落,做一下小总结。
通过IEEE地址获取网络地址的方法:
//与用SmartRF Flash 读出来的IEEE地址是反过来的
uint8 pDestination[] ={0x34,0xB1,0xC4,0x08,0x00,0x4B,0x12,0x00};
调用函数发送请求:
if ( keys & HAL_KEY_SW_6 )
{
//按键S1
ZDP_NwkAddrReq(pDestination,ZDP_ADDR_REQTYPE_SINGLE,0,0);
}
在ZDApp_ProcessMsgCBs()的case NWK_addr_rsp:
ZDO_NwkIEEEAddrResp_t *My_pAddrRsp= ZDO_ParseAddrRsp(inMsg);
mu_addr=My_pAddrRsp->nwkAddr;
break;
网络地址则保存至mu_addr
经测试,可以获取休眠节点的网络地址并进行通讯。
您怎么确定是这个的? 默认值为7,单位应该是ms吧?
最大值是65536,怎么换算成7.5s呢?
/* Default indirect message holding timeout value:
* 1-65535 (0 -> 65536) X CNT_RTG_TIMER X RTG_TIMER_INTERVAL
*/
-DNWK_INDIRECT_MSG_TIMEOUT=7
CNT_RTG_TIMER的定义没有找到,RTG_TIMER_INTERVAL的定义为1000。
如果真的是7.5s,即使RFD_RCVC_ALWAYS_ON为false,ZE 1s查询一次,也应该能收到父节点的包啊。
只要你的节点在正常的data request父设备就可以收到数据的,跟-DRFD_RCVC_ALWAYS_ON设置成false或者true没有关系的。
所以还是好好观察下空中的报文,节点有没有在发送data request'
怎么解决的,我也遇到这样的问题了,睡眠情况下查不到短地址,求共享方法。
jinghuan hao 你好。
节点被唤醒后向协调器发出Data request,协调器可以获取到短地址的。
我设置了 -DRFD_RCVC_ALWAYS_ON=FALSE
-DPOLL_RATE=1000
也就是睡眠节点每隔1s醒来一次,向父节点询问一次信息,协调器是可以获取到短地址的。具体操作我在上面有说。
能发给我分工程文件吗?我折腾了半天,楞是没有结果,不知道哪里配置错了?1047381010@qq.com
谢谢。低功耗没研究过,节点怎么唤醒的?自己唤醒,还是外部中断唤醒,醒来后是协议自动发送Data request,还是要自己要写发送函数?
