Zigbee 组网过程分析|学习笔记

简介: 快速学习Zigbee 组网过程分析

开发者学堂课程【嵌入式之RFID开发与应用2020版Zigbee 组网过程分析】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/665/detail/11136


Zigbee 组网过程分析

 

内容简介:

一、回顾

二、协调器组网接口

三、Zigbee 组网过程

 

一、回顾

在此之前,了解了 zigbee 的通信过程,以及组网

1.zigbee网络中有4种通信方式:

单播通信,与指定设备通信

组播通信,与组内设备通信

广播通信,与网内设备通信

绑定通信,不是设备之间通信,而是不同端点之间的通信

2.zigbee网络中有3种通信设备:

全功能设备FFD:协调器

全功能设备FFD:路由器

半功能设备RFD:终端

接下来我们具体了解一下 zigbee 是怎样组网的,组完网络后的通信过程

 

二、协调器组网接口

1.组网的调用的接口是ZStatus 协议站所提供的接口

ZStatus_tNLME_NetworkFormationRequest(

请求设备组建一个新的网络并允许自身称为该网络的协调器

这个接口的内部实现并没有表现出来,可以通过代码找到其入网接口位置

uint16 Panld,//网络ID

uint8* ExtendedPANID,//64bit扩展网络ID

uint32 ScanChannels,//当前信道,0-26

byte ScanDuration,//持续扫描时间

byte BeaconOrder//信标设置,协议规定为

BEACON_ORDER_NO_BEACONSbyte SuperframeOrder,//协议规定为BEACON ORDER NO BEACONS byte

BatteryLifeExtension//为true协议栈会尽量延长电池寿命,为false则不);

协调器组网接口对应回调:

ZDO NetworkFormationConfirmCB(Status)

2.在阅读代码的时候,建议了解整个程序的入口,包括整个任务的内容,有关网络的组件整个过程,是通过ZDO 来实现的

ZDApp——Init(taskD++)

ZDO 里面是完成于网络相关的初始化,包括组件网络的整个流程

总之这些函数首先是初始化 ZDO 的任务的工作,与其 ZDO 初始化相关的还有事件循环处(任务服函数)

ZDAPP_event_loop

最终会调用到任务服函数中,来完成网络的建立和初始化

image.png

 

三、Zigbee 组网过程

首先了解一下组网的大致流程

之前了解过地址的概念:分为信道地址、网络地址、长地址和短地址以及端点

首先来了解几个地址概念:

channel,信道地址,对于2.4G刚好采用了32bit中间16位中为1的位表示该信道被启用(0x800Ox7fff800)。

panID,16bit网络地址,只有panID相同的设备才能组成一个网络

MAC, 由IEEE规定的64bit地址,类似网卡MAC必须唯一,又叫zigbee的长地址。

shortAddr,由父节点分配的16bit短地址,用于设备之间通信

是 个1-240的具体设备端点号

endPoint,

应用相关。

1.第一步先通过底层能量扫描,选择一个合适的信道建立  //并不是每次都能建立成功,它会自己去选择,自己去扫描,频率是有一个范围的

整个信道是怎样选择的?

image.png

打开这个配置文件

image.png

配置当前协调器所采用的信道,总共有27个信道,将 // 代开就代表开启信道,可以开启多个信道,例如打开第25个信道

这27个信道是由32个比特位中间的27个比特位为1,来表示的这个信道开启的,现在表示关闭,所以我们可以设置和选择他的信道

2.第二步协调器或路由器会不断广播信标(Beacon)// 不论蓝牙 wifi,只要是网络的创建者,都会去广播信标

// 信标就是让我们去发现网络的功能,想知道周围有多是wifi 热点,实际上每个热点都在广播信标,读到了这个信标,就可以发现对应的热点

// beacon 可以去修改它的参数:延迟的时间、帧的频率

返回上述文件,可以看到信标的信息

image.png

DBEACON_REQUEST_DELAY=100

设置信标的时间间隔的是100,单位是毫秒,也就是100毫秒就会广播一次信标

DBEACON_REQ_DELAY_MASK=0x00FF

唯一的x位代表有效位,八个一 代表可以设置信标的单位是一个字节,三个 f 就是12个比特位

范围就是0~255

3.第三步设备或路由器发现信标,请求入网

4.协调器或路由器会分配短地址给设备或路由器 // 观看路由器是要假如网络还是加入别的节点,协调器和路由器也有自己的短地址,短地址是一个会变化的地址

入网成功

5.基于端点展开通信  //每次通信不论发送还是接收,都要创建一个端点,就可以展开通信

6.协调器如何完成端点的扫描,和端点的建立

(1)这个任务主要是完成网络的创建

image.png

网络状态刚开始是一个网络的初始化

这个任务一开始是没有运行的,之所以会调用这个任务是有一个事件的触发的

这个事件

ZDOInitDevice(ZDO_INIT_HOLD_NWK_START);

//Blink LED to indicate HOLD_START

HalLedBlink(HAL_LED_4,0,50,500);

(2)这个函数是在b 区回调的,整个任务初始化就会先调ZDApp_Init函数,来完成初始化,记录他的 id

最终会调到这里

{

ZDOInitDevice(0);

}

来判断当前情况的状态,在这里将状态分为很多种:没有初始化、初始化、发现、加入...

image.png

如下状态

foostae  ey ouo)

ZDOInitDevice( 0);

else

ZDOInitDevice( ZDO_INIT_HOLD_NWK_START);// Blink LED to indicate HOLD_START

HalLedBlink ( HAL_LED4 0. 500)

(3)里面有很多接口,最终会调到ZDA 中,启动网络,包括有一个延时

// Trigger the network start

ZDApp_NetworkInit( extendedDelay );

// set broadcast address mask to support broadcast filtering NLME_SetBroadcastFilter( ZDO_Config_Node_Descriptor.CapabilityFlags); return( networkStateNV );

就是立刻创建网络,还是过一会创建

void ZDApp_NetworkInit( uint16 delay)

if (delay)

// Wait awhile before starting the device

osalstart timerEx(ZDAppTaskID,ZDO_NETWORKINIT, delay );

(4)Delay就是过多长时间创建网络,启动了一个延时器,过多长时间

Osal_set_event(后面添加了一个事件,这个任务就会被执行)就是直接创建网络

指定任务添加事件:

osal_set event(uint8 task id,

uint16 event_flag)

tasksEvents[task id] event_flag;

会去处理 NETWORK_TNTT,会打印出 网络初始化,表示我们现在正在建立网络

在这里调用建立网络

ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType,devStartMc

DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER);

分类是协调器、路由器、还是终端设备

(5)如下是协调器会调用的接口

NLMENetworkFormationRequest zgConfigPANIDzgApsUseExtendedPANID zgDefaultChannelList

zgDefoultStartingScanDuration

oerframeOrder

就是接口

ZStatus_tNLME_NetworkFormationRequest(

这个接口就是请求创建网络,并且让自己称为协调器。创建网络,必须的参数:网络id、扩展id、信道、周期

extern ZStatus_t NLME_NetworkFormationRequest( uindio PanId, wint8r ExtendedPANID, wintJ2 5er

ScanDuration,U BeaconOrder

byte SuperframeOrder, byte BatterytifeExtensian )

(6)参数参考:

ZStatus_t NLME_NetworkFormationRequest(

uint16 Panld,//网络ID

uint8* ExtendedPANID, //64bit扩展网络ID

uint32 ScanChannels,//当前信道,0-26

byte ScanDuration, //持续扫描时间

byte BeaconOrder,//信标设置,协议规定为BEACON ORDER NO BEACONS

byte SuperframeOrder, //协议规定为BEACON ORDER NO BEACONS

byte BatteryLifeExtension//为true协议栈会尽量延长电池寿命,为false则不会

这些信息来自于传进去的参数,而且函数的实现暂时看不到

这些参数都是一些全局变量,是是来自于

// Configured PAN ID

uint16 zgConfigPANID = ZDAPP_CONFIG_PAN ID

(7)定义在了配置文件里,可以在配置文件中搜索一下,在输入内容前加一个 D

image.png

实际上是把 -DZ 表示穿插,0xFF0 就是我们当前要用到的值,把hong 用边缘器取出来,传递

DZDAPP_CONFIG_PAN_ID=0xFFF0

信道地址也是同理会传到函数中,建立网络

网络建立成功后,会有回调

回调是什么?可以通过 zigbee2007协议栈API 函数使用说明中搜索

image.png

就可以搜到

此函数请求组建一个新网络并允许自身成为该网络的ZibBcc协调器

。这个行为的返回结果返回到ZDO—NetworkFormationConfirmCB()中。

(8)ZDO—NetworkFormationConfirmCB 就是回调,将其去搜索

如果显示ZSUCCESS说明协调器建立网络成功

(9)上述协调器建立成功,换成路由器会怎样

如果是路由器或其它设备,并不是要去创建网络,而是要去发现网络

发现网络的接口中同样会用到参数,被发现网络,也有回调函数

路由或终端首次入网过程:

NLME NetworkDiscoveryRequest(uint32 ScanChannels,uint8 scanDuration);//指定信道和扫描时间发现网络路由或终端首次入网接口对应回调:

ZDO_NetworkDiscoveryConfirmCB(status)

入网成功后又失去联系的回调函数: 字ZDO_SyncIndicationCB(O

路由器重新入网:

nwk_ScanJoining0rphan()

终端重新入网:

NLME_OrphanJoinRequest()

这些接口可以一一了解,以上就是整个入网的基本流程

协调器建立网络、路由器和终端是加入网络,同时协调器可以给终端分配地址。

相关文章
|
2月前
|
监控 物联网 网络架构
DPDK关于光纤通讯的资料收集
DPDK关于光纤通讯的资料收集
|
7月前
|
传感器 物联网 开发工具
短程无线自组网协议栈之:意义和价值是什么?
近几年随着智能手机和智能硬件的快速发展,人们已经意识到未来的设备除了电源之外,整个通讯和链接将会是无线化的,这些设备的形状不一样,功能不一样,电源供电方式不一样,接收或者控制的对象也不一样,传输的内容更是千差万别。
|
缓存 网络协议 网络架构
数据通信网络之使用 eNSP 组网
数据通信网络之使用 eNSP 组网
181 0
|
数据采集 安全 算法
Zigbee协议栈介绍|学习笔记
快速学习Zigbee协议栈介绍
Zigbee协议栈介绍|学习笔记
|
传感器 网络协议 物联网
Zigbee通信总结|学习笔记
快速学习Zigbee通信总结
Zigbee通信总结|学习笔记
|
网络性能优化 网络架构
计算机网络实验(华为eNSP模拟器)——第十一章 帧中继网络
计算机网络实验(华为eNSP模拟器)——第十一章 帧中继网络
计算机网络实验(华为eNSP模拟器)——第十一章 帧中继网络
WLAN无线局域网技术 基础(二)PoE与PoE交换机的功能,二层组网和三层组网的概念与方式,有线组网概念:直连式组网、旁挂式组网,CAPWAP协议
WLAN无线局域网基础、讲述了有线侧组网的概念,PoE与PoE交换机的功能,二层组网和三层组网的概念与方式,直连式组网、旁挂式组网,CAPWAP协议
WLAN无线局域网技术 基础(二)PoE与PoE交换机的功能,二层组网和三层组网的概念与方式,有线组网概念:直连式组网、旁挂式组网,CAPWAP协议
【实践】工业用变频器上云 【3】 硬件开发,使用嵌入式硬件通过485通讯的ModBusRTU协议控制变频器
本系列介绍,如何将一台台达变频器接入阿里云物联网,并且实现云端操控的实践案例。本章着重解决让硬件正确的驱动变频器实现下面级的正确控制