微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 改进状态机转换,解决未入网节点不能低功耗。

改进状态机转换,解决未入网节点不能低功耗。

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

设计思路:zigbee节点在无法入网,或者被挪动至原理已入网网络的覆盖范围。在多次尝试无法入网时,进入PM3或者PM2模式,进行较长时间的休眠,并通过下次触发唤醒时再尝试入网,减少功耗损失。

以CC2530为例,在扫描网络时,每次扫描一个信道,需要打开RX侦听近500ms,在16个信道下持续时间会达到4s,电流27mA。而每次扫描完成后约200毫秒会进行下一次信道扫描。这也就是为什么没有入网的节点,电流持续在27mA。

未入网的节点会不停的发起网络扫描,因此一直在DEV_NWK_DISC状态不停的循环。而这个时候千万不要再发起ZDApp_NetworkInit函数。因为当一次网络扫描还没结束时再发起一次网络扫描,会使z-stack进入一个不可恢复的错误。因此如果在一个IO中断触发时去调度ZDApp_StartJoiningCycle,会导致ZDApp_NetworkInit连续调度,出现错误。(IO中断时调度ZDApp_StartJoiningCycle会死机)

  如果在devStates_t中增加一个DEV_IDLE状态,每次扫描网络后扫描不到打开permite join的网络,或者加入网络失败(Assoc Join和Rejoin,orphan join),都会进入DEV_IDLE状态。用DEV_IDLE代替DEV_NWK_DISC状态,DEV_NWK_DISC表示正在进行网络扫描,这个状态下务必禁止再次发起网络扫描。ZDApp_StartJoiningCycle和ZDApp_StopJoiningCycle只能在DEV_IDLE和DEV_INIT状态下执行。DEV_IDLE可以通过消息ZDO_STATE_CHANGE传给应用层,应用层可以在多次扫描或者入网失败后停止入网,而停止入网的节点不会再次发起下次扫描,而是转入DEV_INIT状态,在DEV_INIT状态下,节点可以进入PM3模式,然后通过外部IO触发的方式重新发起ZDApp_StartJoiningCycle。

和DEV_NWK_BACKOFF的区别

DEV_NWK_BACKOFF是周期执行,周期切换。节点在XX时间内无法入网,就会进入DEV_NWK_BACKOFF,再在XX时间内离开DEV_NWK_BACKOFF状态,再次尝试入网。而实际传感器节点并非适合按照时间周期来管理功耗,传感器节点在生产完成后,包装运输过程中,往往是无法加入网络的,但是有些传感器节点因为硬件设计的原因是无法切断电源的,所以让传感器节点在包装运输过程中保持在PM3模式是合理的。

Arise Lord你好

我是初学者,关于这个问题,我想请教一下:当节点脱离网络进入DEV_NWK_DISC状态,并且找网失败时,不能够强制休眠吗?

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

网站地图

Top