微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > (急!)zigbee:AF_DataRequest发送,及路由发现问题

(急!)zigbee:AF_DataRequest发送,及路由发现问题

时间:10-02 整理:3721RD 点击:

各位TI的大侠、各位zigbee高手,我现在在使用Z-Stack Home 1.2.2a.44539协议栈+自己的应用,但是我发现一个非常棘手的问题:

步骤:1、烧录了一个coordinator、一个router、一个enddevice(休眠模式1秒钟询问一次),router(shortADD为R1)和enddevice(shortADD为E1)的父节点都是coordinator。通过串口可以控制route和enddevice,收发正常;

          2、将coordinator断电,enddevice会自动rejoin到router上,enddevice的shortADD变为E2,等几分钟后再把coordinator重新上电;

          3、通过串口使用地址E2就无法控制enddevice了,使用R1控制路由还是正常的;

          4、我使用sniffer查看数据包,发现在使用E2控制enddevice时,并没有发送NWK route request(0x01)这个路由发现包。但是如果使用原来的E1发送的话就会通过sniffer看到有:

我觉得很奇怪,想请问各位,这种情况正常吗?有解决的办法吗?控制enddevice

补充一下:在3中我可以通过enddevice按键给coordinator发送数据,接受的很正常

补充:

1、我的发送函数:

uint8 option = AF_DISCV_ROUTE;
dstAddr.addrMode = afAddr16Bit;
dstAddr.endPoint = GENERICAPP_ENDPOINT;
dstAddr.addr.shortAddr = destAdd;
AF_DataRequest(&dstAddr, &GenericApp_epDesc,
GENERICAPP_CLUSTERID,
dataLength,
buf,
&GenericApp_TransID,
option,
AF_DEFAULT_RADIUS);

2、第3步中通过E2控制不了enddevice,通过sniffer也看不到数据包发出来!

3、我的配置:

coordinator:

ZTOOL_P1
HAL_LCD=FALSE
NV_INIT
NV_RESTORE

router:

ZTOOL_P1
HAL_LCD=FALSE
NV_INIT
NV_RESTORE

enddevice:

POWER_SAVING
NWK_AUTO_POLL
ZTOOL_P1
HAL_LCD=FALSE
NV_INIT
NV_RESTORE

因为你加了NV_RESTORE,协调器在关联表中保存了节点信息,你断电后,节点跳到路由器上去,变成路由器的子节点,你

再次上电协调器,协调器还认为节点是他的子节点,你通过协调器发数据给这个节点,显然不可能成功,因为没有收到节点的data request 怎么可能发出去!

已解决。

谢谢!确实是这样的!

这段时间太忙了,等我测试完成后再给你一份之前的参考协议栈程序,希望理解!

OK,忙就对了^ ^,我自己也先琢磨下,您有空再发过来下呗。

在最新的Z-Stack Home 1.2.2a协议栈,如果老的父设备收到子设备通过新的父设备转发出来的消息以后,老的父设备会把子设备信息删除,认为子设备已经换了父设备了。 你可以使用Device Announce,或者其他的数据告诉协调器。

@VV 

你好,Z-Stack Mesh 1.0.0 也有这样的功能吗?如果老的父设备收到子设备通过新的父设备转发出来的消息以后,老的父设备会把子设备信息删除,认为子设备已经换了父设备了。

VV,我还是有个疑问,因为在coordinator掉电,enddevice重连上router的时候地址已经从E1变成E2了,这个时候coordinator重新上电,我用串口通过coordinator给E2发数据的时候coordinator应该不知道E2这个地址啊,根据TI文档的说明coordinator在查找了邻居表和关联表之后没找到这个地址的话就会找路由表,如果路由表也没找到的话就会发路由request的,但是为什么发布出来呢?因为我的理解是coordinator应该不知道E2的存在啊,所以coordinator应该发路由request的,实在是想不通啊!

是啊,同问,

Mark Zhang

VV,我还是有个疑问,因为在coordinator掉电,enddevice重连上router的时候地址已经从E1变成E2了,这个时候coordinator重新上电,我用串口通过coordinator给E2发数据的时候coordinator应该不知道E2这个地址啊,根据TI文档的说明coordinator在查找了邻居表和关联表之后没找到这个地址的话就会找路由表,如果路由表也没找到的话就会发路由request的,但是为什么发布出来呢?因为我的理解是coordinator应该不知道E2的存在啊,所以coordinator应该发路由request的,实在是想不通啊!

在使能NV_RESTORE的情况,节点rejoin加网的话,短地址是不会变化的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top