Z-stack协议栈开发指南

上传人:简****9 文档编号:110250652 上传时间:2019-10-29 格式:PDF 页数:12 大小:247.94KB
返回 下载 相关 举报
Z-stack协议栈开发指南_第1页
第1页 / 共12页
Z-stack协议栈开发指南_第2页
第2页 / 共12页
Z-stack协议栈开发指南_第3页
第3页 / 共12页
Z-stack协议栈开发指南_第4页
第4页 / 共12页
Z-stack协议栈开发指南_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《Z-stack协议栈开发指南》由会员分享,可在线阅读,更多相关《Z-stack协议栈开发指南(12页珍藏版)》请在金锄头文库上搜索。

1、TI Z-stack 协议栈开发环境和工作流程TI Z-stack 协议栈开发环境和工作流程 系统软件设计是在硬件设计的基础上进行的,良好的软件设计是实现系统 功能的重要环节,也是提高系统性能的关键所在。节点设计基于通用性及便于开 发的考虑,移植了 TI 公司的 Z-Stack 协议栈,其主要特点就是其兼容性,完全 支持 IEEE 802.15.4/ZigBee 的 CC2430 片上系统解决方案。Z-Stack 还支持丰富 的新特性,如无线下载,可通过 ZigBee 网状网络(Mesh Network)下载节点更 新。 图 ZigBee 节点开发环境 TI的Z-Stack装载在一个基于IAR

2、开发环境的工程里。 强大的IAR Embedded Workbench 除了提供编译下载功能外,还可以结合编程器进行单步跟踪调试和监 测片上寄存器、Flash 数据等。Z-Stack 根据 IEEE 802.15.4 和 ZigBee 标准分为 以下几层: API (Application Programming Interface) , HAL (Hardware Abstract Layer),MAC(Media Access Control),NWK(Zigbee Network Layer),OSAL (Operating System Abstract System) , Secur

3、ity, Service, ZDO (Zigbee Device Objects)。使用 IAR 打开工程文件 SampleApp.eww 后,即可查看到整个协议栈 从 HAL 层到 APP 层的文件夹分布。该协议栈可以实现复杂的网络链接,在协调器 节点中实现对路由表和绑定表的非易失性存储,因此网络具有一定的记忆功能。 Z-Stack 采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之 后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件, 结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理 事件。这种软件构架可以极大地降级系统的功耗。 整个 Z-s

4、tack 的主要工作流程,大致分为系统启动,驱动初始化,OSAL 初 始化和启动,进入任务轮循几个阶段,下面将逐一详细分析。 图 Z-Stack 系统运行流程图 Figure . The Flow Chart of Z-Stack 系统初始化系统初始化 系统上电后,通过执行 ZMain 文件夹中 ZMain.c 的 ZSEG int main()函数实 现硬件的初始化,其中包括关总中断 osal_int_disable(INTS_ALL)、初始化板 上硬件设置 HAL_BOARD_INIT()、 初始化 I/O 口 InitBoard(OB_COLD)、 初始化 HAL 层驱动 HalDriv

5、erInit()、初始化非易失性存储器 sal_nv_init(NULL)、初始化 MAC 层 ZMacInit()、分配 64 位地址 zmain_ext_addr()、初始化操作系统 osal_init_system()等。 硬件初始化需要根据 HAL 文件夹中的 hal_board_cfg.h 文件配置寄存器 8051的寄存器。 TI官方发布Z-stack的配置针对的是TI官方的开发板CC2430DB、 CC2430EMK 等,如采用其他开发板,则需根据原理图设计改变 hal_board_cfg.h 文件配置,例如本方案制作的实验板与 TI 官方的 I/O 口配置略有不同,其中状 态指示

6、 LED2 的需要重新设置 LED2 控制引脚口、 通用 I/O 口方向和控制函数定义 等。 当顺利完成上述初始化时,执行 osal_start_system()函数开始运行 OSAL 系统。该任务调度函数按照优先级检测各个任务是否就绪。如果存在就绪的任务 则调用 tasksArr中相对应的任务处理函数去处理该事件,直到执行完所有就 绪的任务。如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现 低功耗。程序流程如图 3-13 所示。osal_start_system()一旦执行,则不再返回 Main()函数。 OSAL 任务调度流程图 Figure . The Flow Chart

7、of OSAL Scheduler OSAL 任务OSAL 任务 OSAL 是协议栈的核心, Z-stack 的任何一个子系统都作为 OSAL 的一个任务, 因此在开发应用层的时候,必须通过创建 OSAL 任务来运行应用程序。通过 osalInitTasks()函数创建 OSAL 任务,其中 TaskID 为每个任务的唯一标识号。 任何 OSAL 任务必须分为两步:一是进行任务初始化;二是处理任务事件。任务 初始化主要步骤如下: (1)初始化应用服务变量。 const pTaskEventHandlerFn tasksArr数组定义系统提供的应用服务和 用户服务变量, 如 MAC 层服务 ma

8、cEventLoop、 用户服务 SampleApp_ProcessEvent 等 (2)分配任务 ID 和分配堆栈内存 void osalInitTasks(void)主要功能是通过调用 osal_mem_alloc()函数给 各个任务分配内存空间,和给各个已定义任务指定唯一的标识号。 (3)在 AF 层注册应用对象 通过填入 endPointDesc_t 数据格式的 EndPoint 变量,调用 afRegister( ) 在 AF 层注册 EndPoint 应用对象。 通过在 AF 层注册应用对象的信息,告知系统 afAddrType_t 地址类型数据 包的路由端点,例如用于发送周期信息

9、的 SampleApp_Periodic_DstAddr 和发送 LED 闪烁指令的 SampleApp_Flash_DstAddr。 (4)注册相应的 OSAL 或则 HAL 系统服务 在协议栈中,Z-stack 提供键盘响应和串口活动响应两种系统服务,但是任 何 Z-Stask 任务均不自行注册系统服务,两者均需要由用户应用程序注册。值得 注意的是,有且仅有一个 OSAL Task 可以注册服务。例如注册键盘活动响应可调 用 RegisterForKeys()函数。 (5)处理任务事件 处理任务事件通过创建“ApplicationName”_ProcessEvent()函数处理。 一个 O

10、SAL 任务除了强制事件(Mandatory Events)之外还可以定义 15 个事件。 SYS_EVENT_MSG(0x8000)是强制事件。该事件主要用来发送全局的系统信 息,包括以下信息: AF_DATA_CONFIRM_CMD:该信息用来指示通过唤醒 AF DataRequest()函数发 送的数据请求信息的情况。ZSuccess 确认数据请求成功的发送。如果数据请求 是通过 AF_ACK_REQUEST 置位实现的, 那么 ZSussess 可以确认数据正确的到达目 的地。否则,ZSucess 仅仅能确认数据成功的传输到了下一个路由。 AF_INCOMING_MSG_CMD:用来指

11、示接收到的 AF 信息。 KEY_CHANGE:用来确认按键动作。 ZDO_NEW_DSTADDR:用来指示自动匹配请求。 ZDO_STATE_CHANGE:用来指示网络状态的变化。 网络层信息网络层信息 Zigbee 设备有两种网络地址:1 个是 64 位的 IEEE 地址,通常也叫作 MAC 地址或者扩展地址(Extended address),另一个是 16 位的网络地址,也叫做 逻辑地址(Logical address)或者短地址。64 位长地址是全球唯一的地址,并 且终身分配给设备。 这个地址可由制造商设定或者在安装的时候设置, 是由 IEEE 来提供。当设备加入 Zigbee 网络

12、被分配一个短地址,在其所在的网络中是唯一 的。这个地址主要用来在网络中辨识设备,传递信息等。 协调器(Coordinator)首先在某个频段发起一个网络,网络频段的定义放 在 DEFAULT_CHANLIST 配置文件里。如果 ZDAPP_CONFIG_PANID 定义的 PAN ID 是 0xFFFF (代表所有的 PAN ID) , 则协调器根据它的 IEEE 地址随机确定一个 PAN ID。 否则,根据 ZDAPP_CONFIG_PANID 的定义建立 PAN ID。当节点为 Router 或者 End Device 时,设备将会试图加入 DEFAULT_ CHANLIST 所指定的工作

13、频段。如果 ZDAPP_CONFIG_PANID 没有设为 0xFFFF,则 Router 或者 End Device 会加入 ZDAPP_CONFIG_PANID 所定义的 PAN ID。 设备上电之后会自动的形成或加入网络,如果想设备上电之后不马上加入 网络或者在加入网络之前先处理其他事件, 可以通过定义 HOLD_AUTO_START 来实 现。 通过调用 ZDApp_StartUpFromApp( )来手动定义多久时间之后开始加入网络。 设备如果成功的加入网络, 会将网络信息存储在非易失性存储器 (NV Flash) 里,掉电后仍然保存,这样当再次上电后,设备会自动读取网络信息,这样设

14、备 对网络就有一定的记忆功能。 对 NV Flash 的动作, 通过 NV_RESTORE()和 NV_ITNT() 函数来执行。 有关网络参数的设置大多保存在协议栈 Tools 文件夹的 f8wConfig.cfg 里。 路由路由 Z-Stack 采用无线自组网按需平面距离矢量路由协议 AODV,建立一个 Hoc 网络, 支持移动节点, 链接失败和数据丢失, 能够自组织和自修复。 当一个 Router 接受到一个信息包之后,NMK 层将会进行以下的工作:首先确认目的地,如果目 的地就是这个 Router 的邻居,信息包将会直接传输给目的设备;否则,Router 将会确认和目的地址相应的路由表

15、条目, 如果对于目的地址能找到有效的路由表 条目,信息包将会被传递到该条目中所存储的下一个 hop 地址;如果找不到有效 的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的 路由信息。 ZigBee End Device 不会执行任何路由函数,它只是简单的将信息传送给前 面的可以执行路由功能的父设备。因此,如果 End Device 想发送信息给另外一 个 End Device,在发送信息之间将会启动路由探测功能,找到相应的父路由节 点。 TI Z-stack 协议栈学习-添加新任务TI Z-stack 协议栈学习-添加新任务 1.Zstack 中如何实现自己的任务1.Zs

16、tack 中如何实现自己的任务 在 Zstack(TI 的 Zigbee 协议栈)中,对于每个用户自己新建立的任务通常需 要两个相关的处理函数,包括: (1).用于初始化的函数,如:SampleApp_Init(),这个函数是在 osalInitTasks() 这个 osal(Zstack 中自带的小操作系统)中去调用的,其目的就是把一些用户自 己写的任务中的一些变量,网络模式,网络终端类型等进行初始化; (2).用于引起该任务状态变化的事件发生后所需要执行的事件处理函数,如: SampleApp_ProcessEvent(),这个函数是首先在 const pTaskEventHandlerFn tasksArr中进行设置(绑定),然后在 osalInitTasks()中如果发生事件进行调 用绑定的事件处理函数. 下面分 3 个部分分析. 1用户自己设计的任务代码在 Zstack 中的调用过程 (1).main()执行(在 ZMain.c 中) main()- osal_init_system() (2).osal_init_system()调用 osalInitT

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号