TI中文支持网
TI专业的中文技术问题搜集分享网站

TI ZigBee协议栈中终端设备的状态切换存在bug。

就是Home 1.2.2a这个版本存在bug,应用层函数无法通过消息ZDO_STATE_CHANGE来正确获取当前状态。

1,任何一个状态都无法切回到DEV_INIT状态,因为在执行ZDApp_ChangeState( DEV_INIT )后又立即执行ZDO_StartDevice,状态不会切回DEV_INIT。

2,DEV_NWK_DISC状态如果没有扫描到网络,会无止境的扫描下去,状态是连续的DEV_NWK_DISC。如果ZDApp_StopJoiningCycle后再ZDApp_StartJoiningCycle,是不是应该回到DEV_INIT一次?

3,REJOIN时,不会进入DEV_NWK_SEC_REJOIN_CURR_CHANNEL状态。该版本协议栈中,rejoin的四种方式,由prevDevState的值决定。虽然这样做实现了四种rejoin模式的切换,但是应用层通过ZDO_STATE_CHANGE并不能获得当前的rejoin状态。

VV:

1,DEV_INIT只是一个初始状态,如果设备秘钥认证没有通过的话,会回到INIT状态

http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/104629.aspx

2,这个在应用层完全可以自己根据实际需求控制,协议栈提供了start stop的API 函数。另外最新的协议栈里面有back off的功能,可以参考着使用

3,应用层为什么需要知道这些状态?

Aries Lord:

回复 VV:

1,我增加了一个DEV_IDLE状态,这个状态是指每次join,rejoin失败,或者scan扫描不到任何网络时,进行下一次扫描前的状态。这个状态下应用层进行stop操作,可以减少一次不必要的scan。

2,back off的切换时间默认是15分钟,而且都是周期性切换,对于一些传感器节点来说并不合适。传感器节点在无网可入的情况下,最好是进入PM3。

3,应用层是根据硬件不同而进行不同设置的,可以绑定按键触发事件。很多实际使用遇到的问题是节点入网前功耗特别大,所以控制功耗最好的办法就是入网前如果不能入网,就没有必要一直去耗电,可以进入低功耗模式,在传感器检测到某个状态后再去触发。

赞(0)
未经允许不得转载:TI中文支持网 » TI ZigBee协议栈中终端设备的状态切换存在bug。
分享到: 更多 (0)