当前位置:首页 >> 能源/化工 >>

TI Z-stack开发和工作流程


TI Z-stack 开发和工作流程

系统软件设计是在硬件设计的基础上进行的, 良好的软件设计是实现系统功能的 重要环节, 也是提高系统性能的关键所在。节点设计基于通用性及便于开发的考 虑, 移植了 TI 公司的 Z-Stack 协议栈, 其主要特点就是其兼容性, 完全支持 IEEE 802. 15. 4/ZigBee 的 CC2430 片上系统解决方案。

Z-Stack 还支持丰富的新特性, 如无线下载,可通过 ZigBee 网状网络(Mesh Network)下载节点更新。

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

整个 Z-stack 的主要工作流程,大致分为系统启动,驱动初始化,OSAL 初 始化和启动,进入任务轮循几个阶段,下面将逐一详细分析。

n

系统初始化

系统上电后,通过执行 ZMain 文件夹中 ZMain.c 的 ZSEG int main( )函数实现硬 件的初始化,其中包括关总中断 osal_int_disable( INTS_ALL )、初始化板上硬件 设置 HAL_BOARD_INIT( )、初始化 I/O 口 InitBoard( OB_COLD )、初始化 HAL 层驱动 HalDriverInit( )、 初始化非易失性存储器 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 口配置略有不同,其中状 态指示 LED2 的需要重新设置 LED2 控制引脚口、通用 I/O 口方向和控制函数定 义等。 当顺利完成上述初始化时, 执行 osal_start_system( )函数开始运行 OSAL 系统。 该任务调度函数按照优先级检测各个任务是否就绪。 如果存在就绪的任务则调用 tasksArr[ ]中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任 务。 如果任务列表中没有就绪的任务, 则可以使处理器进入睡眠状态实现低功耗。 程序流程如图 3-13 所示。osal_start_system( )一旦执行,则不再返回 Main( ) 函数。

n

OSAL 任务

OSAL 是协议栈的核心,Z-stack 的任何一个子系统都作为 OSAL 的一个任务, 因此在开发应用层的时候,必须通过创建 OSAL 任务来运行应用程序。通过

osalInitTasks( )函数创建 OSAL 任务,其中 TaskID 为每个任务的唯一标识号。任 何 OSAL 任务必须分为两步:一是进行任务初始化;二是处理任务事件。 任务初始化主要步骤如下: (1) 初始化应用服务变量。

const pTaskEventHandlerFn tasksArr[ ]数组定义系统提供的应用服务和用户服务 变量,如 MAC 层服务 macEventLoop、用户服务 SampleApp_ProcessEvent 等 (2) 分配任务 ID 和分配堆栈内存

void osalInitTasks( void )主要功能是通过调用 osal_mem_alloc( )函数给各个任务 分配内存空间,和给各个已定义任务指定唯一的标识号。 (3) 在 AF 层注册应用对象

通过填入 endPointDesc_t 数据格式的 EndPoint 变量,调用 afRegister( )在 AF 层注册 EndPoint 应用对象。 通过在 AF 层注册应用对象的信息, 告知系统 afAddrType_t 地址类型数据包的路 由端点,例如用于发送周期信息的 SampleApp_Periodic_DstAddr 和发送 LED 闪 烁指令的 SampleApp_Flash_DstAddr。 (4)注册相应的 OSAL 或则 HAL 系统服务 在协议栈中,Z-stack 提供键盘响应和串口活动响应两种系统服务,但是任何 Z-Stask 任务均不自行注册系统服务,两者均需要由用户应用程序注册。值得注 意的是,有且仅有一个 OSAL Task 可以注册服务。例如注册键盘活动响应可调 用 RegisterForKeys( )函数。 (5)处理任务事件 处理任务事件通过创建“ApplicationName”_ProcessEvent( )函数处理。一个 OSAL 任务除了强制事件(Mandatory Events)之外还可以定义 15 个事件。

SYS_EVENT_MSG(0x8000)是强制事件。该事件主要用来发送全局的系统信 息,包括以下信息: AF_DATA_CONFIRM_CMD:该信息用来指示通过唤醒 AF DataRequest( )函数 发送的数据请求信息的情况。 ZSuccess 确认数据请求成功的发送。 如果数据请求

是通过 AF_ACK_REQUEST 置位实现的,那么 ZSussess 可以确认数据正确的到 达目的地。否则,ZSucess 仅仅能确认数据成功的传输到了下一个路由。 AF_INCOMING_MSG_CMD:用来指示接收到的 AF 信息。 KEY_ CHANGE:用来确认按键动作。 ZDO_ NEW_ DSTADDR:用来指示自动匹配请求。 ZDO_STATE_CHANGE:用来指示网络状态的变化。 n 网络层信息

Zigbee 设备有两种网络地址:1 个是 64 位的 IEEE 地址,通常也叫作 MAC 地址 或者扩展地址(Extended address),另一个是 16 位的网络地址,也叫做逻辑地 址(Logical address)或者短地址。64 位长地址是全球唯一的地址,并且终身分 配给设备。 这个地址可由制造商设定或者在安装的时候设置, 是由 IEEE 来提供。 当设备加入 Zigbee 网络被分配一个短地址,在其所在的网络中是唯一的。这个 地址主要用来在网络中辨识设备,传递信息等。 协调器(Coordinator)首先在某个频段发起一个网络,网络频段的定义放在 DEFAULT_ CHANLIST 配置文件里。如果 ZDAPP_ CONFIG_ PANID 定义的 PAN ID 是 0xFFFF(代表所有的 PAN ID),则协调器根据它的 IEEE 地址随机 确定一个 PAN ID。否则,根据 ZDAPP_ CONFIG_ PANID 的定义建立 PAN ID。 当节点为 Router 或者 End Device 时, 设备将会试图加入 DEFAULT_ CHANLIST 所指定的工作频段。 如果 ZDAPP_ CONFIG_ PANID 没有设为 0xFFFF, Router 则 或者 End Device 会加入 ZDAPP_ CONFIG_ PANID 所定义的 PAN ID。 设备上电之后会自动的形成或加入网络, 如果想设备上电之后不马上加入网络或 者在加入网络之前先处理其他事件,可以通过定义 HOLD_AUTO_START 来实 现。 通过调用 ZDApp_StartUpFromApp( )来手动定义多久时间之后开始加入网络。 设备如果成功的加入网络, 会将网络信息存储在非易失性存储器 (NV Flash) 里, 掉电后仍然保存,这样当再次上电后,设备会自动读取网络信息,这样设备对网 络就有一定的记忆功能。 NV Flash 的动作, 对 通过 NV_RESTORE( )和 NV_ITNT( ) 函数来执行。 有关网络参数的设置大多保存在协议栈 Tools 文件夹的 f8wConfig.cfg 里。 n 路由

Z-Stack 采用无线自组网按需平面距离矢量路由协议 AODV, 建立一个 Hoc 网络, 支持移动节点,链接失败和数据丢失,能够自组织和自修复。当一个 Router 接 受到一个信息包之后,NMK 层将会进行以下的工作:首先确认目的地,如果目

的地就是这个 Router 的邻居,信息包将会直接传输给目的设备;否则,Router 将会确认和目的地址相应的路由表条目, 如果对于目的地址能找到有效的路由表 条目, 信息包将会被传递到该条目中所存储的下一个 hop 地址;如果找不到有效 的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的 路由信息。 ZigBee End Device 不会执行任何路由函数,它只是简单的将信息传送给前面的 可以执行路由功能的父设备。 因此, 如果 End Device 想发送信息给另外一个 End Device,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。


相关文章:
TI Z-stack开发和工作流程
TI Z-stack 开发和工作流程 系统软件设计是在硬件设计的基础上进行的, 良好的软件设计是实现系统功能的 重要环节, 也是提高系统性能的关键所在。节点设计基于通用性...
TI_Z-stack协议栈开发环境和工作流程
TI Z-stack 协议栈开发环境和工作流程 系统软件设计是在硬件设计的基础上进行的,良好的软件设计是实现系 统功能的重要环节, 也是提高系统性能的关键所在。节点设计...
实验7—TI Z-Stack2007协议栈入门实验
实验题目:实验 7—TI Z-Stack2007 协议栈入门实验 实验时间:2015.12.24 一、 实验目的:学习TI Z-Stack2007协议栈软件架构,掌握TI Z-Stack协议栈软件 开发流程...
Z-stack协议栈开发
TI Z-stack 协议栈开发环境和工作流程系统软件设计是在硬件设计的基础上进行的,良好的软件设计是实现系统 功能的重要环节, 也是提高系统性能的关键所在。 节点设计...
如何建立自己的Z-stack程序
基于IAR8.10.1 和 z-stack2.5.1.a 如何建立自己的 Z-stack 程序,程序名为:CoordinatorApp 1:把 TIZStack-CC2530-2.5.1a 文件夹下所有东西拷贝到自己...
2014-7-22 Z-Stack2007协议栈的流程
一步:Z-Stack 从 main()函数开始 main()位于 ZMain.c 文件中,工作流程如图...这是由于 Z-Stack 协议 栈是半开源的,网络层代码被 TI 屏蔽掉了,只有库函数...
z-stack软件构架分析
z-stack软件构架分析_计算机软件及应用_IT/计算机_...做好准备工作后, 就开始执行操作系统入口程序, 并...后面的 DB 和 EB 表示的是 TI 公司开发板 的...
TI Z-stack
Z-Stack ZCL API_F8W-2006-0020_.pdf:ZigBee 簇库接口函数 TI Z-stack 协议栈开发环境和工作流程系统软件设计是在硬件设计的基础上进行的, 良好的软件设计是...
实验1 协议栈工作原理
集成开发环境; (2) TI Z-STACK; (3) 仿真器驱动; 讯方通信 ZigBee 实验 ...SampleApp、 SimpleApp,在这里们选 择 SampleApp 对协议栈的工作流程进行讲解。...
Z-Stack学习笔记
4、产品安装过程 4.1、安装 Z-Stack 这个也就是...申明:由于本人很穷,所以没钱买 TI 原装开发包,...最好是能保证芯片 能正常工作的电压 zmain_vdd_...
更多相关标签:
ti zstack | zstack工作流程 | zstack开发指南 | zstack开发环境 | ti ble stack | ti stack | zstack | z stack |