微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > Zigbee zstack 2.5.1 两个路由设备之间,怎么能点播通信。

Zigbee zstack 2.5.1 两个路由设备之间,怎么能点播通信。

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

Zigbee   zstack 2.5.1 两个路由设备之间不知道对方短地址,怎么能点播通信。我看有个 afAddr64Bit 模式,不知道是怎么使用的

dstAddr.addrMode = afAddr64Bit;
    dstAddr.addr.extAddr[7] = 0x01;
    dstAddr.addr.extAddr[6] = 0xff;
    dstAddr.addr.extAddr[5] = 0x20;
    dstAddr.addr.extAddr[4] = 0x03;
    dstAddr.addr.extAddr[3] = 0xFF;
    dstAddr.addr.extAddr[2] = 0xFF;
    dstAddr.addr.extAddr[1] = 0xFF;
    dstAddr.addr.extAddr[0] = 0xFF;
    dstAddr.endPoint = LOCATION_REFNODE_ENDPOINT;//端点号

if(afStatus_SUCCESS == AF_DataRequest( &dstAddr, (endPointDesc_t *)&epDesc,
IR_XUE_XI_CMD, 10, RegisterMsg, &transId, AF_DISCV_ROUTE | AF_ACK_REQUEST , AF_DEFAULT_RADIUS ) ) //发送数据,要求APS层ACK应答
{
AFSendBufOkCnt++;
if(AFSendBufOkCnt> 0xfffffff0)
AFSendBufOkCnt=0;
}

这样设置,在协调器上发送给路由设备,路由能收到。而如果是路由这样设置发给另一个路由。却收不到。

afAddr64Bit的方式只能发送给直接连在协调器上的设备,而不能发给下一级设备

关键我现在的问题是,一个协调器,两个路由AB,先开路由A,再开路由B。B发送数据给A。用这个afAddr64Bit 。

还是发不过去。是端点描述符什么的要设置吗?难道端点描述符里面的输入输出簇都要设置一致,才能发送到达吗?

社区默认的帖子文字太小,费眼睛,我给设置大了。更好看一些。技术支持们辛苦了!少占鱼zigbee单播

dstAddr.addrMode = afAddr64Bit;
dstAddr.addr.extAddr[0] = 0x06;
dstAddr.addr.extAddr[1] = 0x7f;
dstAddr.addr.extAddr[2] = 0x20;
dstAddr.addr.extAddr[3] = 0x03;
dstAddr.addr.extAddr[4] = 0xff;
dstAddr.addr.extAddr[5] = 0xff;
dstAddr.addr.extAddr[6] = 0xff;
dstAddr.addr.extAddr[7] = 0xff;
dstAddr.endPoint = LOCATION_REFNODE_ENDPOINT;//给协调器 

if(afStatus_SUCCESS == AF_DataRequest( &dstAddr, (endPointDesc_t *)&epDesc,
IR_XUE_XI_CMD, 10, RegisterMsg, //0X0038 定时注册,发送MAC和AD
&transId, AF_DISCV_ROUTE | AF_ACK_REQUEST , AF_DEFAULT_RADIUS ) ) //发送数据,要求APS层ACK应答
{
AFSendBufOkCnt++;
if(AFSendBufOkCnt> 0xfffffff0)
AFSendBufOkCnt=0;
}

static const SimpleDescriptionFormat_t RefNode_SimpleDesc =
{
LOCATION_REFNODE_ENDPOINT, //端点号定义
LOCATION_PROFID, //终端支持的特征ID

LOCATION_REFNODE_DEVICEID, //设备ID号

LOCATION_DEVICE_VERSION, //版本号
LOCATION_FLAGS, //没有使用

sizeof(RefNode_InputClusterList), //输入簇个数
(cId_t*)RefNode_InputClusterList, //输入簇的列表

sizeof(RefNode_OutputClusterList), //输出簇个数
(cId_t*)RefNode_OutputClusterList //输出簇列表
};

//端点描述符,
static const endPointDesc_t epDesc =
{
LOCATION_REFNODE_ENDPOINT, //端点号
&RefNode_TaskID, //任务ID
(SimpleDescriptionFormat_t *)&RefNode_SimpleDesc, //简单描述符指针
noLatencyReqs
};

static const cId_t RefNode_InputClusterList[] =
{
LOCATION_XY_RSSI_REQUEST, //RSSI 信号强度请求
LOCATION_REFNODE_CONFIG, //参考节点配置
LOCATION_REFNODE_REQUEST_CONFIG, //参考节点请求配
LOCATION_REFNODE_PWD_CONFIG, //密钥配置请求

LOCATION_BLINDNODE_COME_REQUEST,//查岗申请
LOCATION_RSSI_BLAST //收集 RSSI 值
};

static const cId_t RefNode_OutputClusterList[] =
{
LOCATION_XY_RSSI_RESPONSE, //参考 RSSI 回答
LOCATION_REFNODE_PWD_RESPONSE, //密钥配置应答
LOCATION_REFNODE_CONFIG, //参考节点配置

LOCATION_BLINDNODE_COME_RSSI_RESPONSE//查岗到位应答


};

我只是想实现网络内任意两个路由之间单播通信。该怎么办呢? 尽量不涉及广播。以免造成网络整体压力。

除了先用MAC地址去广播获取短地址,没别的办法吗? 这个64位地址是指的入网后的MAC地址是从ITEM 0X0001地址里取出来的吗。入网MAC地址产生优先级遵循  芯片出厂MAC ------用户自定义IEEE ------系统随机生成MAC  的顺序吗? 那我也不知道对方入网的时候究竟是在第几步成功了。我怎么给对方发数据?少占鱼求赐

成功了。能64位单播发送了。

 afAddr64Bit  64位单播发送
有时候发送可以有时候一点都不发,原来是因为。必须先让发送方入网
然后再打开接收方入网。这样才行。我一直先开的接收,所以老是发不过去。我晕少占鱼zigbee64位地址单播IEEE

afAddrType_t dstAddr;

    dstAddr.addrMode = afAddr64Bit;   

    dstAddr.addr.extAddr[0] = 0x06;//目的地路由的IEEE地址。用户自定义的那个。就是他的64位入网地址
    dstAddr.addr.extAddr[1] = 0x7f;
    dstAddr.addr.extAddr[2] = 0x20;
    dstAddr.addr.extAddr[3] = 0x03;
    dstAddr.addr.extAddr[4] = 0xff;
    dstAddr.addr.extAddr[5] = 0xff;
    dstAddr.addr.extAddr[6] = 0xff;
    dstAddr.addr.extAddr[7] = 0xff;
   
    dstAddr.endPoint = LOCATION_REFNODE_ENDPOINT;//目的地 路由类

if(afStatus_SUCCESS == AF_DataRequest( &dstAddr, (endPointDesc_t *)&epDesc,
                          IR_XUE_XI_CMD, 10, RegisterMsg,  //0X0038 定时注册,发送MAC和AD
                          &transId,  AF_DISCV_ROUTE | AF_ACK_REQUEST , AF_DEFAULT_RADIUS ) ) //发送数据,要求APS层ACK应答 
     {
        AFSendBufOkCnt++;
        if(AFSendBufOkCnt> 0xfffffff0)
          AFSendBufOkCnt=0;
     }

 

我只是想实现网络内任意两个路由之间单播通信。该怎么办呢? 尽量不涉及广播。以免造成网络整体压力。

除了先用MAC地址去广播获取短地址,没别的办法吗? 这个64位地址是指的入网后的MAC地址是从ITEM 0X0001地址里取出来的吗。入网MAC地址产生优先级遵循  芯片出厂MAC ------用户自定义IEEE ------系统随机生成MAC  的顺序吗? 那我也不知道对方入网的时候究竟是在第几步成功了。我怎么给对方发数据?少占鱼求赐

如果路由没有直接挂在协调器下。能不能收到其他路由的 64位地址单播发送过来的数据呢? 如果不能,该怎么解决单播发送的问题。

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

网站地图

Top