Z-Stack协议栈代码介绍_第1页
Z-Stack协议栈代码介绍_第2页
Z-Stack协议栈代码介绍_第3页
Z-Stack协议栈代码介绍_第4页
Z-Stack协议栈代码介绍_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业8.1 TI Z-Stack协议栈代码介绍TI公司在提供Zigbee无线单片机CC2530的同时,也提供了Z-Stack协议栈源代码,以方便设计人员将Z-Stack直接移植到CC2530上使用,使其支持IEEE 802. 15. 4/ZigBee协议。TI也提供比较多的工具软件,如CC2530的FLASH编程软件,包监视分析软件,以及一些在协议之上的应用案例,简单点对点通信软件、智能家居应用软件等。为了使我们自己的系统稳定可靠运行,必须保证硬件的设计稳定可靠,满足需要的

2、功能要求外,软件的设计也是同样重要的。为了使整个系统能很好的正常工作,必须让软硬件协同操作,在TI的Z-Stack协议栈之上开发我们自己的软件系统,不愧为一种很好的、省力的方式。自己去写Z-Stack协议栈代码并让其稳定运行是不现实的,不是投入太大就是时间太长。这样,对TI的Z-Stack协议栈代码进行必要的了解是非常必要的。通过IAR软件打开TI的Z-Stack协议栈,如下图所示:第一次打开工程印象最深刻的就是左边一排文件夹,非常多,很庞杂,感觉无从下手。 我们先不深入目录之下,先了解每个目录放的是什么内容,那么知道各个文件夹大概是什么功能,分布在 ZIGBEE 的哪一层,那么在以后的工作中

3、无论是查询某些功能函数还是修改某些功能函数,甚至是添加或删除某些功能函数就能顺利的找到在什么地方了,方便对Z-Stack协议栈软件的更深入的学习了解。 下面对Z-Stack协议栈的文件夹进行介绍:APP(ApplicationProgramming):应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。APP:用户应用程序及接口,包括串口数据处理、无线接收数据处理、用户LCD显示处理、传感器数据读取和发送等。HAL(Hardware (H/W) Abstraction Layer):硬件层目录,包含有与硬件相

4、关的配置和驱动及操作函数。MAC:MAC 层目录,包含了 MAC 层的参数配置文件及其 MAC 的 LIB 库的函数接口文件。MT(Monitor Test):实现通过串口可控各层,于各层进行直接交互。 NWK(ZigBee Network Layer):网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS 层库的函数接口OSAL(Operating System (OS) Abstraction Layer):协议栈的操作系统。Profile:AF(Application work) 层目录,包含 AF 层处理函数文件。Security:安全层目录,安全层处理函数,比如加密函数等

5、。Services:地址处理函数目录,包括着地址模式的定义及地址处理函数。Tools:工程配置目录,包括空间划分及 ZStack 相关配置信息。ZDO(ZigBee Device Objects):ZDO 目录。ZMac: MAC 层目录,包括 MAC 层参数配置及 MAC 层 LIB 库函数回调处理函数。ZMain:主函数目录,包括入口函数及硬件配置文件。Output:输出文件目录,这个是EW8051 IDE 自动生成的。Z-Stack 协议栈用操作系统的思想来构建,采用事件轮询机制。当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式

6、。如果同时有几个事件发生,则判断优先级,逐个处理事件。这种软件构架可以极大地降级系统的功耗。整个Z-Stack 的主要工作流程,大致分为系统启动,驱动初始化,OSAL 初始化和启动,进入任务轮循几个阶段,下面将逐一详细分析。1、TI的Z-Stack协议栈启动流程可打开ZMain文件夹中的ZMain.c文件,查看int main(void)函数,协议栈即从此函数开始运行。其启动流程如下所示:2、 系统初始化系统上电后,通过执行ZMain文件夹中ZMain.c的ZSEG int main( )函数实现硬件的初始化。硬件初始化需要根据HAL文件夹中的hal_board_cfg.h文件配置8051的寄

7、存器。TI 官方发布Z-stack的配置针对的是TI 官方的开发板CC2530DB、CC2530EMK等,如采用其它开发板,则需根据原理图设计改变hal_board_cfg.h 文件配置。如按键多少及其对应的I/O口,LED指示灯的多少及其对应的I/O口,串口的波特率及中断还是DMA操作方式,是否有LCD等。也可以通过宏定义的方式,将硬件的功能模块的操作放开或屏蔽掉。 下面列出main函数,并在其掉用的函数处对其进行注释说明:int main( void ) /关全局中断 osal_int_disable( INTS_ALL ); /板相关的硬件初始化,如时钟、LED等 HAL_BOARD_I

8、NIT(); /确保电源电压比正常运行的电压高 zmain_vdd_check(); /参数堆栈及返回地址堆栈清0 zmain_ram_init(); /判别是上电复位,复位键复位还是看门狗复位 InitBoard( OB_COLD ); /初始话硬件抽象层驱动,如Timers、Adc,Dma,Flash,Aes,Leds,Uart,Key,Spi,and Lcd等 HalDriverInit(); /初始化FLASH存储器系统 osal_nv_init( NULL ); /初始化基本的非易失性存储器的项目,初始话Z-Stack全局变量。如果一个项目在非易失性/存储器中没有,则将缺省值写入其中

9、。 zgInit(); /初始化MAC层 ZMacInit(); /决定起始的扩展IEEE地址 zmain_ext_addr(); /如果无网络层,则调用afInit()对无线射频部分进行初始化#ifndef NONWK afInit();#endif /初始化操作系统,初始化存储器系统、消息队列、定时器、电源管理系统、系统任务等 osal_init_system(); /开全局中断 osal_int_enable( INTS_ALL ); /进行板硬件的最后初始化,如键盘,摇杆等初始化 InitBoard( OB_READY ); /如果使用LCD,则调用用于LCD硬件的初始化 #ifdef

10、 LCD_SUPPORTED zmain_lcd_init();#endif /显示如IEEE地址等设备信息, zmain_dev_info(); /如果使用了看门狗,则将看门狗使能#ifdef WDT_IN_PM1 WatchDogEnable( WDTIMX );#endif/启动操作系统,将不会从此函数返回 osal_start_system(); / No Return from her /不会到达这里 return ( 0 ); 当顺利完成上述初始化时,执行osal_start_system( )函数开始运行OSAL 系统。该任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的

11、任务则调用tasksArr 中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务。如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗。程序流程如下图所示。osal_start_system( )一旦执行,则不再返回Main( )函数。3、OSAL 任务OSAL是协议栈的核心,Z-Stack 的任何一个子系统都作为OSAL 的一个任务,因此在开发应用层的时候,必须通过创建OSAL任务来运行应用程序。通过osalInitTasks( )函数创建OSAL 任务,其中TaskID 为每个任务的唯一标识号。任何OSAL任务必须分为两步:一是进行任务初始化;二是处理任务事件。任务初

12、始化主要步骤如下:1) 初始化应用服务变量const pTaskEventHandlerFn tasksArr 数组定义系统提供的应用服务和用户服务变量,如MAC 层服务macEventLoop、用户服务controlEpProcess,functionEpProcess, 等2)分配任务ID 和分配堆栈内存void osalInitTasks( void )主要功能是通过调用osal_mem_alloc( )函数给各个任务分配内存空间,和给各个已定义任务指定唯一的标识号。3)在AF 层注册应用对象通过填入endPointDesc_t 数据格式的EndPoint 变量,调用afRegister

13、( )在AF层注册EndPoint 应用对象。通过在AF 层注册应用对象的信息,告知系统afAddrType_t 地址类型数据包的路由端点,例如用于发送周期信息的SampleApp_Periodic_DstAddr 和发送LED 闪烁指令的SampleApp_Flash_DstAddr。4) 注册相应的OSAL 或者HAL 系统服务在协议栈中,Z-Stack 提供键盘响应和串口活动响应两种系统服务,但是任何Z-Stask任务均不自行注册系统服务,两者均需要由用户应用程序注册。值得注意的是,有且仅有一个OSAL Task 可以注册服务,例如注册键盘活动响应可调用RegisterForKeys(

14、)函数。5) 处理任务事件处理任务事件通过创建“ApplicationName”_ProcessEvent( )函数处理。一个OSAL 任务除了强制事件(Mandatory Events)之外还可以定义15 个事件。下面对这些事件进行介绍:SYS_EVENT_MSG:一个强制任务事件 SYS_EVENT_MSG (0 x8000), 被保留必须通过 OSAL 任务设计。管理者应该处理如下的系统信息子集,下面只列出了部分信息,但是是最常用的几个信息处理,推荐根据例子复制到自己项目中使用。AF_DATA_CONFIRM_CMD:调用 AF_DataRequest()函数数据请求成功的指示。Zsuc

15、cess 确认数据请求传输成功,如果数据请求设置 AF_ACK_REQUEST 标志位,那么,只有最终目的地址成功接收后,Zsuccess 确认才返回。如果如果数据请求没有设置 AF_ACK_REQUEST 标志位,那么,数据请求只要成功传输到下跳节点就返回 Zsuccess 确认信息。AF_INCOMING_MSG_CMD:AF 信息输入指示KEY_CHANGE键盘动作指示ZDO_NEW_DSTADDR匹配描述符请求(Match Deor Request)响应指示。(例如:自动匹配)ZDO_STATE_CHANGE网络状态改变指示4、网络层信息ZigBee 设备有两种网络地址:1 个是64

16、位的IEEE 地址,通常也叫作MAC 地址或者扩展地址(Extended address),另一个是16 位的网络地址,也叫做逻辑地址(Logical address)或者短地址。64 位长地址是全球唯一的地址,并且终身分配给设备。这个地址可由制造商设定或者在安装的时候设置,是由IEEE 来提供。当设备加入ZigBee 网络被分配一个短地址,在其所在的网络中是唯一的,这个地址主要用来在网络中辨识设备,传递信息等。协调器(Coordinator)首先在某个频段发起一个网络,网络频段的定义放在DEFAULT_CHANLIST 配置文件里。如果ZDAPP_ CONFIG_ PANID 定义的PAN

17、ID 是0 xFFFF(代表所有的PAN ID),则协调器根据它的IEEE 地址随机确定一个PAN ID。否则,根据ZDAPP_CONFIG_ PANID 的定义建立PAN ID。当节点为Router 或者End Device 时,设备将会试图加入DEFAULT_ CHANLIST 所指定的工作频段。如果ZDAPP_ CONFIG_ PANID 没有设为0 xFFFF,则Router 或者End Device 会加入ZDAPP_ CONFIG_ PANID 所定义的PAN ID。设备上电之后会自动的形成或加入网络,如果想设备上电之后不马上加入网络或者在加入网络之前先处理其他事件,可以通过定义H

18、OLD_AUTO_START 来实现。通过调用ZDApp_StartUpFromApp( )来手动定义多久时间之后开始加入网络。设备如果成功的加入网络,会将网络信息存储在非易失性存储器(NV Flash)里,掉电后仍然保存,这样当再次上电后,设备会自动读取网络信息,这样设备对网络就有一定的记忆功能。对NV Flash 的动作,通过NV_RESTORE( )和NV_ITNT( )函数来执行。有关网络参数的设置大多保存在协议栈Tools 文件夹的f8wConfig.cfg 里。5、路由Z-Stack 采用无线自组网按平面距离矢量路由协议AODV,建立一个Hoc 网络,支持移动节点,链接失败和数据丢失,能够自组织和自修复。当一个Router 接收到一个信息包之后,NMK 层将会进行以下的工作:首先确认目的地,如果目的地就是这个Router 的邻居,信息包将会直接传输给目的设备;否则,Router 将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论