Z-Stack 3.0.1 已知问题和建议的解决方案_cc2530堆栈溢出-CSDN博客
开发环境准备
(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 种:
协调器 Coordinator。
路由器 Router
终端设备: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
OtaServer:OTA(Over The Air,空中升级)测试工具
SerialBootTool:串口升级测试工具
Components
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;
}一大堆的内容,先不研究了。