ZigBee绑定通信原理


ZigBee的通信方式分为:组播、单播、广播、MAC地址通信、绑定

ZigBee绑定

1,绑定是ZigBee一种基本通信方式,具体绑定通信又分为三种模式,这里只拿源绑定来说明。

单播的时候需要指明如下参数:
发送模块的网络地址
发送模块的发送端点

接收模块的网络地址
接收模块的接收端点
接收模块的接收簇

MAC地址通信的时候需要指明如下参数:
发送模块的MAC地址
发送模块的发送端点

接收模块的网络地址
接收模块的接收端点
接收模块的接收簇

以MAC地址通信的时候,在发送这前底层会在发送模块查询地址管理器,看是否存在这个MAC地址,然后将MAC地址替代为网络短地址。

源绑定:
发送模块的网络地址
发送模块的发送端点

接收模块的网络地址
接收模块的接收端点
接收模块的接收簇

对源绑定来说,发送模块必须要知道接收模块(被绑定模块)的网络地址和MAC地址、接收方的端点、接收的簇
在发送模块会调用一个函数,这个函数会创建一个结构体(绑定表),结构体含有的信息:MAC地址、发送模块的发送端点、
接收模块的接收端点、接收模块的MAC地址、接收模块的接收簇,还要确保地址管理器中有接收模块的MAC地址和网络短地址。
如果发送模块的绑定表建立成功,则意味着发送模块和接收模块建立了绑定关系。


绑定的时候要绑定的信息有:接收模块的接收端点、接收模块的接收簇、发送模块的发送端点、本模块的网络地址,不指定接收
模块的地址信息。

发送的时候,底层会分两步:
1,查绑定表
2,绑定表存在,查地址表,发送

注意:所有绑定工作都是在发送模块"一厢情愿"建立的,与接收模块没有任何关系

#define SAMPLEAPP_ENDPOINT           20  //定义端点编号    
uint8 SampleApp_TransID = 0;    
    
uint8 destMac = {0x0F,0x55,0x16,0x20,0x07,0x00,0x4B,0x12};//目标MAC地址  

zAddrType_t  destination;
destination.addrMode = afAddr64Bit;//地址模式
memcpy(destination.addr.extAddr,destMac,8);//MAC 地址
//创建绑定表,与接收模块建立绑定关系
APSME_BindRequest(SAMPLEAPP_ENDPOINT,SAMPLEAPP_PERIODIC_CLUSTERID,destination,SAMPLEAPP_ENDPOINT);

/*
 ZStatus_t APSME_BindRequest( byte SrcEndpInt,//源端点
                              uint16 ClusterId, //接收模块的簇
                              zAddrType_t *DstAddr, //目的地址
							  byte DstEndpInt);//目标端点
							  
//调用这个函数以后,不会发送任何无线数据包,只是在本地建立了一张绑定表(所有工作都是在本地完成)

*/

//携带模块的MAC地址广播出去,网络里面所有的节点都会收到,底层会判断这个MAC地址和自己的MAC地址是不是一样,
//如果一样,就会回复一个无线数据包给我们的发送模块,发送模块就会知道目标MAC地址对应的网线短地址。



afAddrType_t  SampleApp_Periodic_DstAddr; //广播    
SampleApp_Periodic_DstAddr.addrMode       = (afAddrMode_t)afAddrNotPresent; //表明以绑定的方式发送    

  
    
endPointDesc_t SampleApp_epDesc;    
SampleApp_epDesc.endPoint   = SAMPLEAPP_ENDPOINT;//模块的端点    
SampleApp_epDesc.task_id    = &SampleApp_TaskID;//指明数据由接收方的哪一个任务来处理    
SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;    
SampleApp_epDesc.latencyReq = noLatencyReqs;    
    
afRegister( &SampleApp_epDesc );//绑定    
    
    
uint8  SampleAppPeriodicCounter  = 0;//发送的数据    
    
//开始发送    
AF_DataRequest( &SampleApp_Periodic_DstAddr, //目标地址    
               &SampleApp_epDesc,//endPoint    
                SAMPLEAPP_PERIODIC_CLUSTERID,//簇,即指明消息要发往SAMPLEAPP_ENDPOINT(房间)的SAMPLEAPP_PERIODIC_CLUSTERID(房间里面的具体的某个人)    
                1,//数据长度    
                (uint8*)&SampleAppPeriodicCounter,//发送的数据    
                &SampleApp_TransID,//成功发送的帧数,这里要传地址,底层发送成功以后,底层会修改这个值    
                AF_DISCV_ROUTE,    
                AF_DEFAULT_RADIUS ); 
				
//调用AF_DataRequest的时候,底层会查询绑定表,然后查询地址管理表找到对应的网络短地址。




  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值