树形网络中的节点发送数据给协调器,只有协调器的子节点发送给协调器的数据能正常接收,网络深度大于等于2的节点通过点播方式发送给协调器的数据接收不到,是树形网络不支持路由转发功能吗?还是我什么地方没有配置正确呢?发送代码如下:
SampleApp_Com_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; //点播
SampleApp_Com_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
SampleApp_Com_DstAddr.addr.shortAddr = 0x0000;
AF_DataRequest( &SampleApp_Com_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_COM_CLUSTERID,
len,// 数据长度 str,//数据内容
&SampleApp_TransID,// 簇ID ??
AF_DISCV_ROUTE ,
AF_DEFAULT_RADIUS ) ;
VV:
用的是哪个版本的协议栈,确定是树形路由?
Crewe li:
回复 VV:
2.4.1版本,确定是树形。验证过程是这样的:协调器A,路由器B和C,配置为网状的时候,NLME_GetCoordShortAddr函数获取B的父节点是A,C的父节点是B,可以发送信息给A(C的邻居表中没有协调器地址,只有B的地址,其他全为0XFFFF),此时C发送数据给A,A可以收到。更改配置为树状网络(NWK_MODE_MESH改为NWK_MODE_TREE,其他保持不变),打印出邻居表,A,B,C之间的关系没有变,B的父节点为A,c的父节点为b,c的邻居表中没有协调器地址,除了父节点b外其他都为0xffff,但是这是C发给A的数据A收不到,c发送请求函数的返回值是成功的。请问是怎么回事呢?
Crewe li:
回复 Crewe li:
版本是2.3.0-1.4.0,更正一下,不好意思
VV:
回复 Crewe li:
如果是树形的话,那么节点A ,B,C的短地址是可以通过公式算出来的,你确定是否符合公式。
另外你可以通过看sniifer的包,看下C发出去的数据,MAC和NWK的目的地址分别是多少,C发给B以后,B是否有转发出去
Crewe li:
回复 VV:
短地址是使用随机分配方式确定的,网状网络和树形网络的地址分配方式一样,NIB.nwkAddrAlloc的值都是0x02,应该为随机分配方式,这种地址分配方式在树形网络中会影响路由中继功能?