【Zigbee】进阶篇(1) Zigbee协议栈创建简单项目,协议栈、事件、消息学习

article/2025/10/22 0:31:24

大家好,我是皮皮猫吖!

每文一言:梦想不会逃跑,会逃跑的永远都是自己!


本篇文章:

主要是协议栈的介绍,使用协议栈完成一个简单例子,协调器创建网络的相关问题,学会在协议栈中自定义事件等。

正文如下:

一、Zigbee协议栈

1)Z-stack协议栈是什么?

Z-Stack协议栈是一个基于任务轮询方式的操作系统,其任务调度和资源分配由操作系统抽象层OSAL管理着。即Z-Stack协议栈=OSAL操作系统+CC2530硬件模块+AF无线网络应用。

2)Zigbee协议栈分为应用层、网络层、MAC层、物理层。

① 应用层:

Zigbee的应用层由应用支持子层、Zigbee设备对象、Zigbee应用框架、Zigbee设备模板和制造商定义的应用对象等组成。

应用支持子层通过一组通用的服务为网络层和应用层之间提供接口,应用程序框架提供端点的管理和数据的收发功能,Zigbee设备对象提供网络建立、发现网络、加入网络、应用端点的绑定和安全管理服务的功能。

② 网络层:

网络层主要实现网络的建立、路由的实现以及网络地址的分配。Zigbee网络层的不同功能由不同的设备完成。其中Zigbee网络中的设备有三种类型,及协调器、路由器和终端节点,分别实现不同的功能。

③ MAC层:

MAC层数据服务为物理层与网络层之间的数据传输提供一个接口, 以实现数据发送、接收和处理排列中清除一个MAC层服务数据单元。

MAC层管理服务允许上层与MAC层管理实体之间传输管理指令, 其主要功能为设备通信链路的连接和断开管理、信标管理、个域网信息库管理、孤点管理、复位管理、接收管理、信道扫描管理、通信状态管理、设备的状态管理、启动、网络同步、轮询管理等。

④ 物理层:

物理层定义了物理无线信道和MAC子层之间的接口,提供物理层数据服务和物理层管理服务。

物理层频率范围: 868/915 MHz 和 2.4 GHz。

2.4 GHz波段射频:提供250kbps的数据速率和16个不同的信道。

868/915MHz波段射频:868MHz支持1个数据速率为20kbps的信道,915MHz支持10个数据速率为40kbps的信道。

二、Z-stack协议栈

1)安装、配置协议栈

我在学习Zigbee的时候,使用的是胜达电子的Zigbee开发板。在学习Zigbee协议栈的时候,使用的也是电子开发板配套的协议栈。

① 安装胜达电子提供的协议栈,一路Next即可。最后在C盘下可以得到Zigbee协议栈文件夹:

在这里插入图片描述

② 协议栈文件夹:进入到协议栈的GenericApp文件夹,进行协议栈的学习

在这里插入图片描述

③ 协议栈相关配置:

  • 配置Linker
    在这里插入图片描述

  • 配置生成.hex文件

在这里插入图片描述

  • 开发板烧录模式

在这里插入图片描述

2)练习:在协议栈的前提下,协调器显示:C,路由器显示:R,终端显示:E

① 在APP文件夹中添加数码管模块文件:

在这里插入图片描述

② 在Zmain.c文件中,添加数码管头文件,并进行数码管的初始化

在这里插入图片描述

③ 在FiveGroupApp.c(我该过名字,没有改过名字的是GenericApp.c)文件中,添加协调器、路由器、终端初始化代码:
在这里插入图片描述

④ 将代码编译到三个模块中,选择不同的选项卡进行编译:

在这里插入图片描述

⑤ 三个模块分别烧入协调器、路由器、终端的代码,三个模块上的数码管分别显示“C”、“R”、“E”字符。

在这里插入图片描述

3)为什么只更改了选项卡的内容,在三个模块中烧入了看似相同的代码,三个模块却显示出了不同的内容?

选项选择不同,就会导致参与编译的配置文件不同,配置文件不同就会导致部分宏定义不同,宏定义不同就会导致工程里某些宏的值不同。

这些宏值不同就会影响程序执行的流程,就会导致出现不同的功能,所有有了不同功能的代码版本:协调器、路由器、终端。

协调器:C、路由器:R、终端:E。

4)在选项卡里每一种版本模块都貌似有2个分为不带-Pro和带Pro,他们的区别是什么?

Zigbee协议在发展过程中经历了3个版本,其中Zigbee在07出的是最新的规范,这个规范有2个版本。

ZIgbee2007、ZigbeePRO之间的区别是:

两个版本功能基本相同。但是,PRO版本功能稍微强大,在项目开发中一般都选择PRO。

5)协议栈中信道相关配置:

① 信道、协调器创建PAN配置文件

在这里插入图片描述

② 信道配置参数:
-DDEFAULT_CHANLIST=0x00000800  // 11 - 0x0B  
#define  DEFAULT_CHANLIST 0x00000800 相当于c语言的中的这个

DEFAULT_CHANLIST:表明Zigbee模块要工作的网络,当有多个信道参数值进行或操作之后,把结果作为DEFAULT_CHANLIST的值。

② DEFAULT_CHANLIST的值对于路由器和终端协调器的意义分别是什么?

DEFAULT_CHANLIST 0x00001800是两个信道的或操作(协调器建立网络时,会在较好的信道上进行建立;终端和路由器会在两个信道上选择一个较好的网络加入进去)

6)TI支持的信道【我手上的胜达开发板支持的信道】:

在这里插入图片描述

① 路由器和终端:

我可以在参与或操作的这些信道上(多个信道)选择一个相对于我来说信号质量最佳的网络,加入进去。

② 协调器:

我可以在参与或操作的这些信道上(多个信道)选择一个最佳的信道。并在这个信道上创建自己的Zigbee网络。

(可以解决:当某个信道上的数据包较多的时候,可以选择其他比较空闲的信道传输数据,增加数据传输的稳定性,数据传输的效率。)可以自己选择特定的信道创建网络。

7)协调器创建网络【PANID】

① PANID配置参数:

在这里插入图片描述

② 当DZDAPP_CONFIG_PAN_ID的值为非0xFFFF时:
  • 路由器和终端
    • 我必须要加入到PANID为DZDAPP_CONFIG_PAN_ID这样一个Zigbee无线局域网
  • 协调器
    • 我要创建一个网络,需要创建一个PANID为DZDAPP_CONFIG_PAN_ID的值的一个网络
③ 当DZDAPP_CONFIG_PAN_ID为0xFFFF时:
  • 路由器和终端
    • 在加入网络的时候我没有PANID的限制,我可以加入到信道上,网络状态较好的网络中
  • 协调器
    • 我可以随机生成一个PANID,我的名字不是指定的PANID(0XFFFF)

8)问题:当2个节点下载了相同的协调器代码,并且指定的PANID参数值为非0xffff,后果会怎样?

① 先上电的协调器模块会先创建PANID为非0xFFFF这样一个Zigbee网络,

② 后上电的模块发现该信道上已经存在PANID为0xFFF8的网络,它会创建一个PANID在0xFFF8基础上加1的网络。后上电的下载了协调器代码的模块会创建一个PANID为0xFFF9的网络。

③ 如果后面还有烧录了相同协调器代码的模块,产生的PANID依次往后加1。

9)Z-stack协议栈分层、事件

① 事件

在ZSTACK里,根据代码,按照功能来划分,可以将代码分成不同的层。

比如,硬件操作相关硬件层。 网络相关的代码称为网络层。自己写的应用程序部分叫应用层。

几乎每一个层都是一个任务,系统为每一个任务(层)分配一个一字节的唯一数值编号。每一个任务都能处理一些它们能够处理的事物。

我们把这个数值编号叫做任务ID。它们能够处理的事物叫做事件。

//系统事件:调用任务名为task_id的事件名为event_flag的事件
uint8 osal_set_event( uint8 task_id, uint16 event_flag )
//系统延迟响应事件:timeout_value毫秒之后触发任务名为taskID下的事件名为event_id的事件
uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value )
② 注意:
  • 每个任务只允许定义16个事件,并且事件名为0x8000 的是系统事件,不允许自定义事件的名字相同。
  • 在自定义的事件中,如果要进行点亮LED灯的操作,或者其他相关的操作的时候。在进行功能实现之前,一些寄存器在协议栈会被默认使用,寄存器已经不是原来的初始化的样子,在使用某个寄存器之前,需要重新配置。
③ 自定义事件
  • 声明自定义事件

在这里插入图片描述

  • 定义事件处理内容

在这里插入图片描述

10)Z-stack协议栈消息:

① 消息

在ZSTACK里,任务事件定义的特点决定了每一个任务最多只能处理16种不同的事件,而系统在运行时候有许多事务需要处理,如果每一个事物处理都定义成1个事件,那么16种事件肯定是不够用,所以引入了消息的概念。

② 消息处理事务的原理:

当需要应用层任务来处理某个事务的时候,首先给应用层任务会发送一个消息:调用osal_set_event(SDApp_TaskID,SYS_EVENT_MSG);函数。

然后,应用层就会进入SYS_EVENT_MSG中事件中进行处理。在这个事件中,判断到底刚刚引发我们产生SYS_EVENT_MSG事件的是哪一种类型的消息,然后根据消息的类型做相应的处理。

而消息的类型可以自己定义,这样一来消息的种类可以很多,那么应用层任务处理的事物种类就很多了。

//事件为0x8000为该任务的系统事件
#define SYS_EVENT_MSG    0x8000  // A message is waiting event
③ 消息触发系统事件

在这里插入图片描述

10)生成.hex文件

① 在原来生成.hex的基础上,做如下步骤

在这里插入图片描述


资源链接:https://pan.baidu.com/s/1TURQuWAPN0rzHzGD9phy-w

提取码:d9v7


希望本篇文章对大家有所帮助,后续会继续分享Zigbee相关学习知识…

如果文章内容有错误的地方,请在留言处留下你的见解,方便大家共同学习。谢谢!

如有侵权或其他任何问题请联系:QQ1370922071,本文主要用于学习交流,转载请声明!

作者:皮皮猫吖



http://chatgpt.dhexx.cn/article/Dj2GN3sE.shtml

相关文章

ZigBee协议栈TI Z-Stack分析

ZigBee协议栈TI Z-Stack分析 2010-11-05 11:26 转载自 slcfhr 最终编辑 slcfhr 标签(TAG): ZigBee 协议栈 Z-Stack 2007年4月,德州仪器推出业界领先的ZigBee协议栈(Z-Stack)。Z-Stack符合ZigBee 2006规范,支持…

lesson7-1 Zigbee协议栈的使用

目录 协议栈的使用 协议栈的安装和协议栈工程创建 协议栈工程配置 选项卡选择 用户代码编写注意 信道选择及PANID分配 协议栈的使用 协议栈的安装和协议栈工程创建 首先进行协议栈的安装 如何创建自己的协议栈工程: (1)先把整个协议…

物联网--Zigbee协议(一):Zigbee初识

物联网--Zigbee协议 前言一、Zigbee初识什么是物联网?什么是Zigbee? 二、Zigbee协议的基础知识Zigbee三种设备类型Zigbee三种网络拓扑结构Zigbee工作频段 三、Zigbee协议架构总结 前言 最近在学习Zigbee的相关知识,发现网上、论坛找到的知识…

ZigBee 快速入门(协议栈,协调器,路由器,终端设备,加入网络,安全,路由功能,频段)

文章目录 1、ZigBee 是什么2、ZigBee 目标3、ZigBee 协议栈4、设备类型5、Mesh网络 拓扑结构6、加入一个 ZigBee 网络7、ZigBee 安全8、频段和速率9、ZigBee相关特性和名词9.1 CSMA/CD,CSMA/CA9.2 信道访问机制9.3 dB、dBm、dBi9.4 传播损耗9.5 RSSI、LQI9.6 接收灵…

ZigBee协议介绍

简介 ZigBee是一种无线通信标准,是由ZigBee Alliance于 2001 年基于IEEE802.15.4标准定制的,这一标准界定了低功耗、低传输速率、近距离无线通信技术所需的所有相关通信协议。基于ZigBee协议的无线通信网络的工作频段主要有2.4GHz、915MHz、868MHz三个频…

zigbee协议栈工作流程 From zigbee菜鸟笔记(十 一)

一.ZigBee 协议栈简介 有问题发送邮件至468078841qq.com 什么是ZigBee 协议栈呢?它和ZigBee 协议有什么关系呢?协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗点来理解就…

ZigBee协议

ZigBee协议 简介 这个zigbee教程描述了您想要了解的有关Zigbee协议栈的所有内容。现在,一天的zigbee在低数据速率无线应用中变得非常流行。 Zigbee设备用于智能能源,医疗和家庭自动化。在智能能源应用中,zigbee产品用于监控和控制能源和水…

物联网--Zigbee协议(二):Zigbee协议架构以及数据帧结构

上一篇整理了关于Zigbee协议的一些基础知识,接下来主要讨论Zigbee协议的架构,希望通过这篇文章能够帮助小伙伴们更好地理解Zigbee协议,废话不多说,进入正题吧。 文章目录 一、Zigbee协议架构二、Zigbee协议的数据帧结构总结 一、Z…

Zigbee协议栈中文说明

1.概述 1.1解析ZigBee堆栈架构 ZigBee堆栈是在IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层,以及ZigBee堆栈层:网络层(NWK)、应用层和…

Zigbee 协议栈

介绍完ZigBee的物理特性,现在该转入逻辑层面,分析下协议栈的软件部分了。先看个协议栈的架构图吧: ZigBee协议栈由一组子层构成,每层为其上层提供一组特定的服务:一个数据实体提供数据传输服务;一个管理实体…

ZigBee协议栈(一)--协议栈介绍

1、Zigbee协议栈简介 协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数…

zigbee之Zstack协议栈使用

zigbee之Zstack协议栈使用 前言基于zstack协议栈开发的步骤一、OSAL操作系统1、操作系统工作流程2、OSAL初始化函数3、系统启动函数(1)任务(2)事件 4.OSAL任务与事件的关系 二、组网通信1、初始化PANID和信道2、端点和簇3、无线数…

Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子

1、Zigbee协议栈简介 协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数…

学习记录 | ZigBee协议栈工作流程

第一次来CSDN记录一下学习过程,其实就是笔记啦 之前用Typora 的 但前几天电脑出问题重装系统后打开笔记文件发现照片都打不开了,索性想换一种记笔记方式 好啦 以下是正文!!! 对了 笔记来源是深圳安联德公司提供的学…

ZigBee协议栈Zstack介绍

文中所讲述的协议栈是基于ZigBee2006\Zstack-1.4.3-1.2.1 1.ZSTACK协议栈的架构 ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供一些API,工用户调用。协议栈体系分层结构与协议栈代码文件夹对应表如下&…

ZigBee Zstack协议栈

一、Zstack协议栈概述 什么是Zstack协议栈 为了使Zigbee的开发更加简单高效,TI公司推出了基于cc2530芯片的协议栈Z-STACK.协议栈的实质就是能实现各个功能的实例框架代码,我们想要实现自己的功能程序,只需要在协议栈的基础上修改或添加即可…

快速了解ZigBee的协议栈

带大家来一起快速的看懂ZigBee的协议栈的运行流程。 1.读任何程序都需要从main函数入手,那我们先来看Zmain.c中的main函数。 问题:在main中我们会看到很多的函数,我们究竟要看哪个函数呢? 回答:这么多的函数中其实我们只需要关注…

Zigbee协议栈————广播组网

目录 1.基础概念 2.Zigbee协议栈工作流程 3。代码讲解 1.基础概念 在Zigbee网络中存在3中逻辑设备:协调器、路由器、终端。 (这个实验当中我们只用到协调器以及终端)。 协调器:协调器负责启动网络,当启动和配置好网络后,协调…

zibgee协议

1.概述 1.1解析ZigBee堆栈架构 ZigBee堆栈是在IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层,以及ZigBee堆栈层:网络层(NWK)、应用层和安…

[ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)...

1、Zigbee协议栈简介 协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数据收发。 如图1所示:Zigbee协议分为两部分…