没志青年
发布于 2026-01-03 / 28 阅读
0

[1] zigbee 与 zstack 协议栈

Z-Stack 3.0.1 已知问题和建议的解决方案_cc2530堆栈溢出-CSDN博客

学习资料:课程简介 - ZigBee 3.0 开发指南

开发环境准备

(1)z-stack 3 协议栈安装

最新的是 3.0.2,下载地址:Z-STACK Driver or library | TI.com

双击安装就行了。

(2)开发 IDE

IAR 下载:IAR Embedded Workbench for ARM v9.60.3 安装包分享 – 吴川斌的博客

不对,这个是 ARM 的,要 8051 的。

分为 DB 和ZNP 两种开发方式

DB 就是作为主控。

ZNP 就是只跑 Zigbee,受 MCU 的控制。

Zigbee 简介

Zigbee 特点:

  • 数据传输速率低,专用于“监测/控制”场景,延迟低(15~30ms)

  • 低功耗,待机时间长

  • 组网能力强,网络容量大,支持很多设备

  • 安全:数据完整性检查、鉴权功能

Zigbee 是建立在 IEEE 802.15.4 上的协议。

网络设备类型

有 3 种:

  1. 协调器 Coordinator。

  2. 路由器 Router

  3. 终端设备:EndDevice

(4)EndDeviceEB-OTAClient:支持OTA(Over The Air)空中升级的ZigBee终端设备。

(5)RouterEB-OTAClient:支持OTA(Over The Air)空中升级的ZigBee路由器。

Z-Stack 3.0 是 TI 针对 ZigBee 3.0 协议而开发的技术方案,也称为TI ZigBee 3.0 协议栈。

通俗地讲,Z-Stack 3.0 就是TI根据 ZigBee 3.0 协议规范而编写的程序库,开发者可以方便地调用库中的API来进行基于ZigBee协议的数据通信。

┌───────────────┐
│  你的应用代码  │   ← 主要改这里
├───────────────┤
│ ZCL / ZDO API │   ← 调接口
├───────────────┤
│   Z-Stack     │   ← Zigbee 实现
├───────────────┤
│ MAC / PHY     │   ← 802.15.4
├───────────────┤
│ 硬件 (TI 芯片) │
└───────────────┘

所以学习 Zigbee,没必要深入了解 802.15.4,会调用 z-stack 库提供的 API 就行了。

ZStack目录结构

在安装路径下,工程结构:

目录

说明

Accessories

测试工具

Components

Z-Stack核心源代码和链接库

Documents

各种说明文档

Projects

ZigBee应用示例程序

Accessories

  • OtaServer:OTA(Over The Air,空中升级)测试工具

  • SerialBootTool:串口升级测试工具

Components

目录

说明

bsp

板级支持包,用于适配TI官方开发板的硬件资源。

driverlib

驱动程序链接库,存放TI官方未开源驱动程序的链接库。

hal

硬件抽象层,存放各种驱动程序。

mac

媒体介质访问控制,实现物理层通信及IEEE 802.15.4协议。

mt

监视层,为监视协议栈各层的运行状态提供支持。

osal

操作系统抽象层,是Z-Stack 3.0的操作系统。

services

提供一些公共的、常用的功能。

stack

ZigBee协议的实现。

usblib

USB链接库,芯片支持USB(比如CC2538)时需要用到的功能。

zmac

属于mac层的内容。

Documents

目录Documents中的文件夹及文件描述如下: (1)API:存放Z-Stack 3.0 相关API的说明文档。 (2)CC2530:存放适用于CC2530型号MCU的相关文档。 (3)CC2538:存放适用于CC2538型号MCU的相关文档。 (4)Z-Stack 3.0 Developer's Guide.pdf:Z-Stack 3.0 开发指导。 (5)Z-Stack 3.0 Sample Application User's Guide.pdf:Z-Stack 3.0 应用例程指导。 (6)Z-Stack OTA Upgrade User's Guide.pdf:OTA(Over The Air)空中升级说明指导。

Projects

目录Projects中的文件夹描述如下: (1)tools:存放与ZigBee例程应用相关的工具。 (2)zstack:存放ZigBee相关例程

目录zstack中的文件夹描述如下: (1)HomeAutomation:面向家庭自动化领域的相关例程。 (2)Libraries:存放链接库文件,TI不开放的源代码会被编译为链接库的形式提供给开发者使用。 (3)OTA:OTA(Over The Air)空中升级例程。 (4)Tools:存放工程配置相关的文件。 (5)Utilities:公共文件夹。 (6)ZMain:存放主函数所在的源代码文件及系统硬件启动相关的源代码文件。 (7)ZNP:ZNP(ZigBee And Processor)例程。

目录HomeAutomation中的文件夹描述如下: (1)GenericApp:通用的应用场景例程。 (2)SampleDoorLock:ZigBee 3.0门锁例程。 (3)SampleDoorLockController:ZigBee 3.0门锁控制器例程。 (4)SampleLight:ZigBee 3.0灯例程。 (5)SampleSwitch:ZigBee 3.0插座例程。 (6)SampleTemperatureSensor:ZigBee 3.0温湿度传感器例程。 (7)SampleThermostat:ZigBee 3.0温度控制器例程。 (8)Source:存放公共代码的文件夹。

其他目录或文件

(1) Tools:存放开发调试相关的工具。 (2) EULA.pdf:版权声明文件。 (3)Getting Started Guide - CC2530.pdf:针对CC2530型号MCU的开始向导文件。 (4)Getting Started Guide - CC2538.pdf:针对CC2538型号MCU的开始向导文件。 (5)Z-Stack 3.0 Release Notes.txt:Z-Stack 3.0 发布描述文件。 (6)Z-Stack 3.0 Software Development Kit Resource Guide.html:Z-Stack 3.0 开发资源向导链接文件。 (7) Z-Stack Core Release Notes.txt:Z-Stack Core发布描述文件。 (8)Z-Stack_3.0.1_Manifest.html:Z-Stack 3.0 关键信息描述清单。 (9)_iss:此文件夹为隐藏文件夹,存放用于卸载Z-Stack 3.0 的相关文件。

基于ZStack的工程框架

随便打开一个示例程序 C:\Texas Instruments\Z-Stack 3.0.2\Projects\zstack\HomeAutomation\SampleSwitch\CC2530DB\SampleSwitch.eww

工程中的的各个组的说明如下: (1)App:存放应用程序相关源代码文件。 (2)BDB:实现ZigBee BDB(Base Device Behavior,设备基础行为)功能。 (3)GP:实现ZigBee GP(Green Power,绿色能源)功能。 (4)HAL:硬件抽象层,存放各种驱动程序。 (5)MAC:媒体介质访问控制,实现物理层通信及IEEE 802.15.4协议。 (6)MT:监视层,为监视协议栈各层的运行状态提供支持。 (7)NWK:ZigBee网络层。 (8)OSAL:操作系统抽象层。 (9)Profile:存放ZigBee标准化定义及相关功能实现的源代码文件。 (10)Security:实现安全相关服务。 (11)Services:提供一些公共的、常用的功能。 (12)Tools:存放工程配置相关的文件。 (13)ZDO:存放ZDO(ZigBee Device Object,ZigBee设备对象)相关源代码文件。 (14)ZMac:属于mac层的内容。 (15)ZMain:存放主函数所在的源代码文件及系统硬件启动相关的源代码文件。 (16)Output:存放工程编译/链接时输出的文件。

任务调度

对于任务调度,可以按操作系统中的进程调度。

任务调度会有以下几个概念:

  • 任务(Task):需要处理器处理的具体任务,例如“在1秒后开灯”或者“关灯”等等。

  • 任务池:是一个可以存储多个任务的缓冲区。系统会在指定的时间去执行任务池中的各个任务。

  • 优先级:在同一个时刻执行多个任务时,根据优先级的高低来决定先执行哪个任务;在处理一个任务时,若有优先级比它高的任务要执行,则会暂停当前任务,转而去处理优先级较高的任务。

  • 轮询:系统会每隔一段时间在任务池中检查有没有现在需要处理的任务,这个过程称为轮询。

  • 操作系统调度周期:调度周期是指轮询概念中“每隔一段时间”的具体时间长度。系统调度周期也是任务的最小时间周期,例如系统调度周期是1秒钟,但是存在一个任务是“0.1秒后关灯”,该任务虽然要求0.1秒后关灯,但由于0.1秒小于系统调度周期,所以这个任务在1秒后才会被执行。

操作系统抽象层 OSAL

OSAL(Operating System Abstraction Layer,系统抽象层),可以通俗地理解为一个简化版的操作系统,为Z-Stack的正确运行提供了内存管理、中断管理和任务调度等基本功能。

在 ZMain.c 文件中,

int main( void )
{
  // 关中断
  osal_int_disable( INTS_ALL );
​
  // 初始化板载资源,比如时钟源、LED等
  HAL_BOARD_INIT();
 
  // 检测供电电压是否可以支撑芯片正常运行
  zmain_vdd_check();
​
  // 初始化GPIO
  InitBoard( OB_COLD );
​
  // 初始化硬件适配层,比如串口、显示器等
  HalDriverInit();
​
  // 初始化文件系统
  osal_nv_init( NULL );
​
  // 初始化MAC数据链路层
  ZMacInit();
​
  // 确定芯片的物理地址
  zmain_ext_addr();
​
#if defined ZCL_KEY_ESTABLISH
  // Initialize the Certicom certificate information.
  zmain_cert_init();
#endif
​
  // 初始化文件系统中的数据
  zgInit();
​
#ifndef NONWK
  // Since the AF isn't a task, call it's initialization routine
  afInit();
#endif
​
  // 初始化操作系统
  osal_init_system();
​
  // 开中断
  osal_int_enable( INTS_ALL );
​
  // 初始化板载硬件资源
  InitBoard( OB_READY );
​
  // Display information about this device
  zmain_dev_info();
​
#ifdef LCD_SUPPORTED
  // 在显示器上显示设备信息
  zmain_lcd_init();
#endif
​
#ifdef WDT_IN_PM1
  // 打开看门狗
  WatchDogEnable( WDTIMX );
#endif
​
  // 系统开始工作,进行任务调度
  osal_start_system();
​
  return 0;
}

一大堆的内容,先不研究了。

任务池初始化

任务调度

事件处理

动态内存


Zigbee 3.0 网络编程

Zigbee 协议

集群组网

设备基本行为

基于AF数据通信

基于ZCL数据通信