您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 物联网系列专业课程:ZStack无线协议栈
Internet+EducationSolutionsZStack无线协议栈中智讯(武汉)科技有限公司EducationSolutions目录ContentsInternet+ZStack无线协议栈ZStacksapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验00:47/3ZStack协议栈概述TI公司开发的ZStack是ZigBee协议栈,并且经过了ZigBee联盟的认可而为全球众多开发商所广泛采用;TI公司的ZStack协议栈装载在一个基于IAR开发环境的工程里;ZStack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式,如果同时有几个事件发生,判断优先级,逐次处理事件,这种软件构架可以极大地降级系统的功耗。定义Zigbee是IEEE802.15.4协议的代名词,根据这个协议规定的一种短距离、低功耗的无线通信技术00:47/4ZStack协议栈ZStack实际上是帮助程序员方便开发ZigBee的一套系统整个ZStack采用分层的软件结构硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现00:47/5ZStack源码工程架构APP(ApplicationProgramming):应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。HAL(Hardware(H/W)AbstractionLayer):硬件层目录,包含有与硬件相关的配置和驱动及操作函数。MAC:MAC层目录,包含了MAC层的参数配置文件及其MAC的LIB库的函数接口文件。MT(MonitorTest):实现通过串口可控各层,与各层进行直接交互。NWK(ZigBeeNetworkLayer):网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS层库的函数接口。OSAL(OperatingSystem(OS)AbstractionLayer):协议栈的操作系统。00:47/6ZStack源码工程架构Profile:AF(Applicationwork)层目录,包含AF层处理函数文件。Security:安全层目录,安全层处理函数,比如加密函数等。Services:地址处理函数目录,包括着地址模式的定义及地址处理函数。Tools:工程配置目录,包括空间划分及ZStack相关配置信息。ZDO(ZigBeeDeviceObjects):ZDO目录。ZMac:MAC层目录,包括MAC层参数配置及MAC层LIB库函数回调处理函数。ZMain:主函数目录,包括入口函数及硬件配置文件。Output:输出文件目录,这个EW8051IDE自动生成的。00:47/7ZStack网络路由ZStack采用无线自组网按需平面距离矢量路由协议AODV,建立一个ad-hoc网络,支持节点的移动,链接失败和数据丢失,能够自组织和自修复;当一个Router接受到一个信息包之后,NMK层将会进行以下的工作:首先确认目的地,如果目的地就是这个Router的邻居,信息包将会直接传输给目的设备;否则,Router将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个hop地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息;ZigBeeEndDevice(终端设备)不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。因此,如果EndDevice想发送信息给另外一个EndDevice,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。00:47/8ZStack软件流程整个ZStack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段:否是否是开始关中断初始化存储器初始化IO初始化HAL层驱动初始化NVFlash初始化MAC层分配64位长地址读取NV初始化OSAL开中断设置Timer在LCD显示设备信息OSAL任务轮询主循环调用事件处理函数有事件发生比较优先级是否结束高低00:47/9ZStack事件轮询机制事件标志位轮询多级任务调度机制00:47/10主函数main()main函数存在于Zmain文件当中,先是从main函数开始运行的,main函数实现的功能是,初始化硬件、初始化网络(加入/创建网络)、初始化任务列表、进入任务处理循环intmain()主函数实现硬件的初始化其中包括关总中断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()等00:47/11OSAL系统完成上述初始化后,开中断执行osal_start_system()函数开始运行OSAL系统任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的任务,则调用tasksArr[]中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗osal_start_system()一旦执行,则不再返回main()函数开始任务调度判断下一个任务状态调用任务事件处理程序任务激活否是00:47/12ZStack工程配置文件ZStack源码工程内提供了一些配置文件:00:47/13ZStack工程配置文件f8w2530.xcl-cc2530处理器的链接脚本文件f8wConfig.cfg-ZStack通用配置文件-DZIGBEEPRO#启用ZigBeePro协议栈-DREFLECTOR#允许绑定-DDEFAULT_CHANLIST#选择默认频道,通过在f8wConfig.cfg里面解除注释对应行来选择频道-DZDAPP_CONFIG_PAN_ID#通过改变PAN_ID来识别同一个频道里的不同ZigBee网络。-DRFD_RCVC_ALWAYS_ON=FALSE#当该选项为FALSE时,允许终端节点睡眠,否则,不允许。......f8wCoord.cfg-协调器的基本配置文件f8wRouter.cfg-路由器的基本配置文件f8wEndev.cfg-终端的基本配置文件CPU32MHZ#cc2530的系统时钟频率设为32MHzZDO_COORDINATOR#含协调器功能RTR_NWK#含路由功能......00:47/14ZStack工程配置宏ZStack工程options里面的常用自定义配置宏定义前加“x”表示为false00:47/15ZStack工程配置宏HOLD_AUTO_START#如果使用HOLD_AUTO_START选项,那么就会禁止自动初始化网络。BUILD_ALL_DEVICES#将协调器和路由器一起编译到一个hex文件里,然后启动时自动检测跳线是否设置为协调器,如果是,这设备为协调器,否,则为路由器REFLECTOR#允许绑定NV_INIT#保存网络或者节点的配置参数到nv(非易失性flash)里面,在节点运行中这些参数很少变化或者几乎不会有变化。NV_INIT选项保存的所有参数可以在结构体zgItemTable中查看到。NV_RESTORE#节点在掉电或者复位之后通过NV不需要无线电通讯就可以恢复到之前的网络连接状态。NV_RESTORE保存的内容主要有网络层数据库NIB、设备关联表、绑定表、路由表等。ZTOOL_Px#允许串口Px收发ZTOOL信息(x=1,2)MT_TASK#开启MT(MonitorandTest)任务,MT是TI为开发者提供的PC与协议栈运行状况进行通信的接口,利用TI提供的工具Z-tool,通过串口的方式与运行协议栈的设备进行信息的交互,下达指令、反馈信息MT_SYS_FUNC#允许MT处理系统命令MT_SAPI_FUNC#允许MT处理SAPI命令MT_SAPI_CB_FUNC#允许MT处理SAPI返回信息EducationSolutions目录ContentsInternet+ZStack无线协议栈ZStacksapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验00:47/17ZStack例程ZStack官方提供了一些组网的示例工程:C:\TexasInstruments\ZStack-CC2530-2.4.0-1.4.0\Projects\zstack\Samples按照程序框架,可以分为两大类:第一类是GenericApp和SampleApp,第二类是SimpleApp,从下面两张图可以看出来。00:47/18ZStack例程GenericApp例程提供了一个几乎最简单的例子,来说明程序是怎么启动和发送信息的。SampleApp采用按键来控制工作组内节点的LED灯闪烁,当这个节点跟别的节点在同一个工作组内时,别的节点可以控制此模块的LED灯闪烁。SimpleApp跟GenericApp不同,它使用了ZStack提供的sapi接口,sapi就是systemapplicationProgramminginterface。这是TI把一般系统要用到的通用的代码整合到sapi.c里面,而留下一些接口出来,只要我们完成了这些接口的实现,那么我们就可以快速实现我们的应用,十分方便。00:47/19sapi接口-zb_HandleOsalEvent函数zb_HandleOsalEvent函数作用当一个任务事件发生了之后,调用这个函数参数event:产生的时间返回无示例通过自己自定义一个事件来增加自己想要增加的功能voidzb_HandleOsalEvent(uint16event){if(event&MY_REPORT_EVT){myReportData();osal_start_timerEx(sapi_TaskID,MY_REPORT_EVT,REPORT_DELAY);}}00:47/20sapi接口-zb_HandleKeys函数zb_HandleKeys函数作用处理设备产生的按键事件参数shift:转移标志;keys:按下的按键返回无示例如果按下按键1,闪烁LED1.voidzb_HandleKeys(uint8shift,uint8keys){if(shift){if(keys&HAL_KEY_SW_1){HalLedSet(HAL_LED_1,HAL_LED_MODE_BLINK);}......}00:47/21sapi接口-zb_StartConfirm函数zb_StartConfirm函数作用当zstack启动完成后,执行这个函数参数status:启动完成后的状态返回无示例如果ZB成功启动,更改myAppState状态为APP_START,否则重新启动voidzb_StartConfirm(uint8status){if(status==ZB_SUCCESS){myAppState=APP_START;}else{osal_start_timerEx(sapi_TaskID,MY_START_EVT,myStartRetryD
本文标题:物联网系列专业课程:ZStack无线协议栈
链接地址:https://www.777doc.com/doc-42707 .html