微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 请问:协调器如何知道路由器断电重新入网?

请问:协调器如何知道路由器断电重新入网?

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

我有个需求,当路由器断电,重新插上之后,我希望知道,路由器重新加入网络了。

但是我发现路由器重连并不会发送device_annce信号。

请帮帮我把。多谢

路由没重新入网这一说法,因为路由器只有在第一次入网的时候会有device Announce,之后路由器自己可以维持工作,即便重新上电也没关系的。

你可以在每次上电以后,发送一个应用层的数据出去,作为这个重新上电的标记。

嗨!VV:

     能不能帮我看看下面的问题啊:

1、父节点丢失(断电或者设备损坏)后,子节点重连处理方法?

找过之前的论坛问题解答,您提出了如下方法:

1)、通过心跳数据包或者定时查询网络状态来判断父节点是否丢失。

2)、开启了NV_RESTORE,清除网络相关NV数据,重新入网。

3)、未开启NV_RESTORE,直接SystemReset()。

关于2)中清除网络相关NV数据,能否具体指出?3)中调用SystemReset(),如果不重启,清除哪些相关变量重新入网可解决?

2、长地址通信中,属于广播方式还是点对点?长地址是IEEE 地址还是Secondary地址,如果能用Secondary地址通信,具体实现代码能否给个示例?

如:

SampleApp_PointToPoint_DstAddr.addrMode = (afAddrMode_t)Addr64Bit;
SampleApp_PointToPoint_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;

for(i=0;i<8;i++)
SampleApp_PointToPoint_DstAddr.addr.extAddr[i]= New_Mac_Addr[i];

1, 

// Set the NV startup option to force a "new" join.
zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );

SystemReset()

3)ZDApp_NetworkInit( 0);

2,

是的,你的方式是对的,但是用长地址通信,只是表面上用长地址,实际在底层还是通过长地址去搜索短地址,然后再通过短地址发送出去。

嗨!VV您好,感谢您的回复!

1、父节点丢失(断电或者设备损坏)后,子节点重连处理方法?

关于这个问题,我想了解:1)、父节点丢失后,协议栈本身做了哪些事?哪些事又是要在应用层完成的?

                                                2)、未开启NV_RESTORE的情况下。不执行SystemReset();直接ZDApp_NetworkInit( 0);这样能实现吗?

2、长地址通信中,长地址是IEEE 地址还是Secondary地址?

1,

1)在父节点丢失以后,节点的状态机会发生变化,先是变成了Orphan的状态,然后到Resume,开始重新去找原先的网络,进入Rejoin状态。

从这个过程来说都是协议栈自动完成了,不需要用户在应用做改动的。

在最新的协议栈里面,也已经加进去了,父节点丢失了,长时间没办法找到原先的网络话,协议栈会让节点过段时间再找网络,目的是为了不让节点过多的消耗电池电量。具体你可以看下最新协议栈中的变量

// Rejoin backoff (silent period ) duration
uint32 zgDefaultRejoinBackoff = REJOIN_BACKOFF;

2)你需要实现什么?重新找父节点?

2 首先在IEEE分为两个Primary IEEE和Secondary IEEE,Primary IEEE是固化在CC2530芯片里面,用户只能读。

Secondary IEEE是存放在Flash里面,允许用户读和写。 

协议栈选择哪个地址作为自己的IEEE地址,是根据用户是否有往Secondary IEEE写数据,如果有的话,就用Secondary IEEE作为自己的IEEE。

如果Secondary IEEE没有写,全是0xFF的话,那么就默认使用Primary IEEE作为自己的IEEE地址。

这个逻辑的实现在zmain_ext_addr(void)中实现。

协调器断电后,路由器不能重新加入网络,怎样处理

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

网站地图

Top