微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 路由节点睡眠问题

路由节点睡眠问题

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

之前问过,说是路由节点不能睡眠,但我的任务是实现路由节点睡眠。现在发现路由节点之所以不能睡眠是halSleep函数里的MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS条件一直没有满足,单步跟踪发现是macSleep函数if (macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags)条件一直满足,所以返回false。

我尝试着将macRxEnableFlags条件去掉,路由节点可以睡眠,通过z-sensor monitor发现可以和协调器组网通信,但无法实现路由功能啦,即终端节点不能连路由节点啦! 我也尝试着在MAC_PwrOffReq函数之前运用if ((!(macRxActive || macRxOutgoingAckFlag || macTxActive))&&(macRxEnableFlags))对macRxEnableFlags清0,就是恢复不知道在哪里对macRxEnableFlags恢复?试了几个地方,结果还是不能路由,但能和协调器通信!

请问改了这一块,路由节点为什么能和协调器继续通信,但不能路由啦?

可以通过改别的地方来解决这个问题吗?附一篇专利文章US20130039240A1,说的是实现路由节点睡眠,但它没说明!

谢谢!

通信是没问题,你想发数据的时候直接发出去就可以了。

但是路由的话,你休眠的路由节点并不知道什么时候会有路由转发的数据的,有可能需要转发路由数据的时候节点处于休眠状态。

你好,我在线调试的,先让终端节点连上路由节点,然后给路由节点发一个命令,使其if (macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags) 条件改为if (macRxActive || macRxOutgoingAckFlag || macTxActive),这样路由节点就可以睡眠啦,也可以正常连协调器,但终端节点不再连路由节点啦,而是连接协调器。节点周期性发数据,发送间隔为SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT

我让终端节点发送数据的间隔大些,发现还是这个现象!

请问终端节点的保活时间是多少啊,在哪里赋值的?

如果我让路由节点睡眠的时间小于删除终端节点的时间,是否可以?我该修改哪些参数或代码呢?

谢谢VV的解答,我还有一些疑问:

今天又做的实验,在线调一个路由节点1,此时未让路由节点1睡眠,拿一个路由节点2,路由节点2连接上路由节点1。此时给路由节点1发一个命令,使其if (macRxActive || macRxOutgoingAckFlag || macTxActive || macRxEnableFlags) 条件改为if (macRxActive || macRxOutgoingAckFlag || macTxActive),这样路由节点1就可以睡眠啦,这时路由节点2能继续一直连接路由节点1,但把路由节点2断电之后重新插电,发现路由节点2一直协调器,不连路由节点1啦!

我将2个路由节点同时断电,先把路由节点1连上协调器,再把路由节点2上电,发现路由节点2还是连接协调器!

实验中2个路由节点挨着,放在离协调器3米之外的地方!

实验的现象说明:路由节点睡眠之后其他节点还是可以连上它的,上面也提到,为啥终端节点就不行啊?是不是哪里的时间设的不一样,是的话您知道差别在哪里吗?

既然路由节点2连路由节点1,在重新上电之后为什么路由节点2不再连接路由节点1?

麻烦啦!

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

网站地图

Top