Other Parts Discussed in Thread: CC2530
我有个需求,当路由器断电,重新插上之后,我希望知道,路由器重新加入网络了。
但是我发现路由器重连并不会发送device_annce信号。
请帮帮我把。多谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: CC2530
我有个需求,当路由器断电,重新插上之后,我希望知道,路由器重新加入网络了。
但是我发现路由器重连并不会发送device_annce信号。
请帮帮我把。多谢
嗨!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,
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)中实现。