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()

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

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

相关文章
|
机器学习/深度学习 自然语言处理 搜索推荐
探索机器学习在个性化推荐系统中的应用
【4月更文挑战第23天】 随着大数据和人工智能技术的迅猛发展,机器学习已成为推动个性化推荐系统革新的关键动力。本文将深入探讨如何通过机器学习算法提升推荐系统的精准度和用户体验。首先,概述了推荐系统的工作原理及其重要性;随后,详细分析了几种主流的机器学习技术以及它们在构建个性化推荐系统中的应用实例;最后,讨论了当前面临的挑战及未来的发展趋势。
|
SQL 存储 关系型数据库
SQL语言优缺点有哪些?
SQL(Structured Query Language)语言作为数据库管理和操作的标准语言,具有一系列的优点,同时也存在一些缺点。
331 7
|
12月前
|
Linux
linux/mac 下查看、修改文件权限的命令
这篇文章介绍了在Linux和Mac操作系统下如何查看和修改文件及文件夹的权限。
594 0
|
10月前
|
机器学习/深度学习 文字识别 自然语言处理
医疗行业化验单智能识别技术探讨:OCR与表格识别的应用
本文探讨了OCR与表格识别技术在医疗化验单处理中的应用,通过自动化数据提取和录入,显著提高了效率和准确性,降低了人工劳动强度和错误率。技术实现包括图像预处理、文字识别和表格解析等核心算法的优化,支持与医院信息管理系统集成,未来将向跨模态数据融合、多语言适配及数据安全方向发展。
1004 9
|
11月前
|
存储 传感器 算法
如何选择合适的 CRC 多项式
CRC(循环冗余校验)多项式的选取对数据传输的错误检测至关重要。选择时需考虑多项式的长度、检测性能及实现复杂度,常用多项式有CRC-8、CRC-16、CRC-32等,适用于不同场景以确保高效准确的错误检测。
1010 4
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
12月前
|
存储 安全 Linux
|
12月前
|
Ubuntu PHP 开发者
如何在Ubuntu中切换多个PHP版本
通过上述步骤,您不仅能够高效地在Ubuntu系统中安装和切换PHP版本,还能根据项目需求灵活配置,大大提升开发效率与灵活性。更多关于服务器配置与优化的信息,获取全面的技术支持与解决方案。
303 1
|
存储 Java
Java中Integer.MAX_VALUE的含义
Java中Integer.MAX_VALUE的含义
644 0