zigbee 信道切换过程解析

环境:TI  CC2530

关键命令:

Mgmt_NWK_Update_notify  : 路由器通知协调器考虑切换信道(不一定会切换 )

Mgmt_NWK_Update_req      :协调器通知所有路由器进行信道切换

 

一、发送 Mgmt_NWK_Update_notify

       所有路由器和协调器会时刻计算传输数据总数和传输失败数量,当传输总数超过 ZDNWKMGR_MIN_TRANSMISSIONS 并且失败率超过 ZDNWKMGR_CI_TX_FAILURE,则认为当前信道受到干扰,则进行下面操作:

1、进行全部信道能量扫描,如果当前信道能量并不超过其他信道,则继续照常工作。

2、如果当前信道能量增加,则发送Mgmt_NWK_Update_notify到协调器报告信道受到干扰。

3、为避免有设备通信出现故障而不断发送Mgmt_NWK_Update_notify,规定一个设备一小时发送Mgmt_NWK_Update_notify不   能超过 4

 

二、Mgmt_NWK_Update_notify 的处理

协调器收到Mgmt_NWK_Update_notify后进行以下判断:

1、是否有必要切换信道?

     1)设备传输失败率超过  ZDNWKMGR_CC_TX_FAILURE

     2)设备传输失败率超过上一次失败率

2、如何选择信道?

能量值最低,能量低于最低阈值  ZDNWKMGR_ACCEPTABLE_ENERGY_LEVEL

 

三、信道切换 Mgmt_NWK_Update_req

1、新信道确定后,协调器广播发送 Mgmt_NWK_Update_req(其中nwkUpdateId加1,与旧信道区分)到所有路由和协调器,通知新的信道值,协调器会设置一个 ZDNWKMGR_UPDATE_REQUEST_TIMER 定时器,期间不会接受同样的命令(切换信道)。并且设置一个 nwkNetworkBroadcastDeliveryTime 定时器,超时执行切换信道

2、所有路由器接收到 Mgmt_NWK_Update_req 命令后,定时 nwkNetworkBroadcastDeliveryTime 后切换信道,并将新的nwkUpdateId 存放在 NIB 和 beacon payload 中,清除传输总量和传输失败率

3、所有RFD_RCVC_ALWAYS_ON==TRUE的设备,如终端,将不会收到Mgmt_NWK_Update_req命令,即不会自行切换信道,这些设备在路由器和协调器切换信道后会掉线,开始依据 channelList 使用 EPID 进行网络搜索,如果找到有EPID相同的信道,则选择其中 nwkUpdateId 更高的信道,如果 channelList 中找不到 EPID 相同中的则启动全信道搜索。

 

四、关键代码分析

主要代码文件:ZDNwKMgr.c 、 ZDNwKMgr.h

主要流程:

1、路由器&协调器

1)ZDNwkMgr_ReportChannelInterference 获取当前信道传输总数和传输失败数,发送NM_CHANNEL_INTERFERE事件

2)ZDNwkMgr_ProcessChannelInterference 启动一次信道能量扫描NLME_EDScanRequest,默认全信道扫描(此处个人建议不要修改为部分信道,后面代码好像没有对部分信道扫描的的代码分析,以免发生意想不到的错误)

3)ZDNwkMgr_EDScanConfirmCB() 获得全部信道及其对应的能量值,发送NM_ED_SCAN_CONFIRM事件

4)ZDNwkMgr_ProcessEDScanConfirm()根据扫描信道数量,默认全信道扫描,ZDNwkMgr_MgmtNwkUpdateReq.scanCount == 0xFF 进行当前信道能量检测

 5)ZDNwkMgr_CheckForChannelInterference 若有其他信道能量比当前信道低,则

     a、ZDNwkMgr_BuildAndSendUpdateNotify 将扫描信道能量组合数据包(若有些信道没有扫描可减少数据量,但默认全部信道扫描)

     b、ZDP_MgmtNwkUpdateNotify将状态(未用)、信道掩码、传输总量、传输失败数、能量列表数、能量数组打包,FillAndSendBufferTxOptions单播发送Mgmt_NWK_Update_notify命令给协调器

2、协调器

1)收到Mgmt_NWK_Update_notify事件执行ZDNwkMgr_ProcessMgmtNwkUpdateNotify

2)ZDO_ParseMgmtNwkUpdateNotify内执行ZDO_ParseMgmtNwkUpdateNotify取出消息里的扫描信道掩码、传输总量、传输失败数、能量列表,接着ZDNwkMgr_CheckForChannelChange检查准备切换信道

3)ZDNwkMgr_CheckForChannelChange中比较传输失败率大于设定值,大于最新失败率,能量列表中最小值小于设定值,则确认切换信道。找出能量列表中最小的信道,并与当前信道不同(此处可增加条件,强制切换到自己预定的信道列表中),则将nwkUpdateId+1,新信道掩码广播发送Mgmt_NWK_Update_req给所有路由器,自身定时切换新的信道

3、路由器

1)收到Mgmt_NWK_Update_req后执行ZDNwkMgr_ProcessMgmtNwkUpdateReq

2)先ZDO_ParseMgmtNwkUpdateReq取出数据中的信道掩码channelMask和扫描持续时间scanDuration,后根据scanDuration不同进行处理,此处scanDuration作用不明,协调器广播Mgmt_NWK_Update_req时将scanDuration置为0xfe,是否有其他地方设置为其他值,待研究

3)根据scanDuration == 0xfe,路由器定时切换到新的信道上。

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值