物联网系列专业课程之ZStack无线协议栈培训课件_第1页
物联网系列专业课程之ZStack无线协议栈培训课件_第2页
物联网系列专业课程之ZStack无线协议栈培训课件_第3页
物联网系列专业课程之ZStack无线协议栈培训课件_第4页
物联网系列专业课程之ZStack无线协议栈培训课件_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

ZStack无线协议栈,中智讯(武汉)科技有限公司,ZStack无线协议栈ZStacksapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验,ZStack协议栈概述,TI公司开发的ZStack是ZigBee协议栈,并且经过了ZigBee联盟的认可而为全球众多开发商所广泛采用;TI公司的ZStack协议栈装载在一个基于IAR开发环境的工程里;ZStack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式,如果同时有几个事件发生,判断优先级,逐次处理事件,这种软件构架可以极大地降级系统的功耗。,ZStack协议栈,ZStack实际上是帮助程序员方便开发ZigBee的一套系统整个ZStack采用分层的软件结构硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现,ZStack源码工程架构,APP(ApplicationProgramming):应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。HAL(Hardware(H/W)AbstractionLayer):硬件层目录,包含有与硬件相关的配置和驱动及操作函数。MAC:MAC层目录,包含了MAC层的参数配置文件及其MAC的LIB库的函数接口文件。MT(MonitorTest):实现通过串口可控各层,与各层进行直接交互。NWK(ZigBeeNetworkLayer):网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS层库的函数接口。OSAL(OperatingSystem(OS)AbstractionLayer):协议栈的操作系统。,ZStack源码工程架构,Profile:AF(Applicationwork)层目录,包含AF层处理函数文件。Security:安全层目录,安全层处理函数,比如加密函数等。Services:地址处理函数目录,包括着地址模式的定义及地址处理函数。Tools:工程配置目录,包括空间划分及ZStack相关配置信息。ZDO(ZigBeeDeviceObjects):ZDO目录。ZMac:MAC层目录,包括MAC层参数配置及MAC层LIB库函数回调处理函数。ZMain:主函数目录,包括入口函数及硬件配置文件。Output:输出文件目录,这个EW8051IDE自动生成的。,ZStack网络路由,ZStack采用无线自组网按需平面距离矢量路由协议AODV,建立一个ad-hoc网络,支持节点的移动,链接失败和数据丢失,能够自组织和自修复;当一个Router接受到一个信息包之后,NMK层将会进行以下的工作:首先确认目的地,如果目的地就是这个Router的邻居,信息包将会直接传输给目的设备;否则,Router将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个hop地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息;ZigBeeEndDevice(终端设备)不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。因此,如果EndDevice想发送信息给另外一个EndDevice,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。,ZStack软件流程,整个ZStack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段:,否,是,否,是,开始,关中断,初始化存储器,初始化IO,初始化HAL层驱动,初始化NVFlash,初始化MAC层,分配64位长地址,读取NV,初始化OSAL,开中断,设置Timer,在LCD显示设备信息,OSAL任务轮询主循环,调用事件处理函数,有事件发生,比较优先级,是否结束,高,低,ZStack事件轮询机制,事件标志位轮询多级任务调度机制,主函数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()等,OSAL系统,完成上述初始化后,开中断执行osal_start_system()函数开始运行OSAL系统任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的任务,则调用tasksArr中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗osal_start_system()一旦执行,则不再返回main()函数,开始任务调度,判断下一个任务状态,调用任务事件处理程序,任务激活,否,是,ZStack工程配置文件,ZStack源码工程内提供了一些配置文件:,ZStack工程配置文件,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#含路由功能.,ZStack工程配置宏,ZStack工程options里面的常用自定义配置宏定义前加“x”表示为false,ZStack工程配置宏,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返回信息,ZStack无线协议栈ZStacksapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验,ZStack例程,ZStack官方提供了一些组网的示例工程:C:TexasInstrumentsZStack-CC2530-2.4.0-1.4.0ProjectszstackSamples按照程序框架,可以分为两大类:第一类是GenericApp和SampleApp,第二类是SimpleApp,从下面两张图可以看出来。,ZStack例程,GenericApp例程提供了一个几乎最简单的例子,来说明程序是怎么启动和发送信息的。SampleApp采用按键来控制工作组内节点的LED灯闪烁,当这个节点跟别的节点在同一个工作组内时,别的节点可以控制此模块的LED灯闪烁。SimpleApp跟GenericApp不同,它使用了ZStack提供的sapi接口,sapi就是systemapplicationProgramminginterface。这是TI把一般系统要用到的通用的代码整合到sapi.c里面,而留下一些接口出来,只要我们完成了这些接口的实现,那么我们就可以快速实现我们的应用,十分方便。,sapi接口-zb_HandleOsalEvent函数,sapi接口-zb_HandleKeys函数,sapi接口-zb_StartConfirm函数,sapi接口-zb_SendDataConfirm函数,sapi接口-zb_ReceiveDataIndication函数,ZStack发送无线数据包,ZStack调用zb_SendDataRequest函数进行数据包的发送,#函数声明:voidzb_SendDataRequest(uint16destination,uint16commandId,uint8len,uint8*pData,uint8handle,uint8txOptions,uint8radius)#调用示例:/将节点信息进行封装dat0=0 xff;dat1=(sAddr8),ZStack用户事件,除了系统事件,用户也可以自定义事件,用户事件值只能设置为0 x00000 x00FF,大于0 xFF的是系统事件通过osal_start_timerEx(uint8taskID,uint16event_id,uint16timeout_value);函数可以产生用户事件,#defineMY_REPORT_TEMP_EVT0 x0002/5000ms后启动MY_REPORT_TEMP_EVT事件osal_start_timerEx(sapi_TaskID,MY_REPORT_TEMP_EVT,5000);,ZStack用户事件,#如果想要让节点在启动后自动产生这个事件,可以在zb_StartConfirm里添加osal_start_timerEx函数,如voidzb_StartConfirm(uint8status)if(status=ZB_SUCCESS)myAppState=APP_START;osal_start_timerEx(sapi_TaskID,MY_REPORT_TEMP_EVT,5000);#如果想要这个事件每隔一段时间自动产生一次,则需要在时间处理函数后加上osal_start_timerEx函数,如voidzb_HandleOsalEvent(uint16event).if(event,ZStack无线协议栈ZStacksapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验,多点自组网,网络的组建过程如图所示,其中发送的数据格式为:,启动协调器节点(组网),启动路由节点和终端节点(入网),周期发送自己的短地址和父节点短地址,串口查看数据,并分析网络拓扑,staticvoidmyReportData(void)bytedat6;uint16sAddr=NLME_GetShortAddr();uint16pAddr=NLME_GetCoordShortAddr();HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);HalLedSet(HAL_LED_1,HAL_LED_MODE_BLINK);dat0=0 xff;dat1=(sAddr8),多点自组网,广播/组播,协调器节点上电后进行组网操作,终端和路由节点上电和进行入网操作,网络组建成功后,协调器节点周期性的向网络中的节点广播或组播信息,终端或路由节点收到信息后在串口上打印出来。当应用层想发送一个数据包到网络中的所有设备时使用广播传输模式,目的地址被设置为下列值之一:NWK_BROADCAST_SHORTADDR_DEVALL(0 xFFFF)信息将被发送到网络中的所有设备(包括休眠的设备)NWK_BROADCAST_SHORTADDR_DEVRXON(0 xFFFD)信息将被发送到网络中有接收器并处于非休眠状态当应用层想发送一个数据包到一个设备组的时候使用组播模式,为实现组播模式,需设置地址模式为afAddrGroup。在网络中需预先定义组,并将目标设备加入已存在的组(具体参考ZStackAPI文档中的aps_AddGroup())。广播可以看作是组播的特例,因为广播相当于所有节点都在一个组内。,广播/组播,当应用层想发送一个数据包到一个设备组的时候使用组播模式,为实现组播模式,需设置地址模式为afAddrGroup。在网络中需预先定义组,并将目标设备加入已存在的组(具体参考ZStackAPI文档中的aps_AddGroup())。,Group_DstAddr.addrMode=(afAddrMode_t)afAddrGroup;Group_DstAddr.endPoint=MY_ENDPOINT_ID;Group_DstAddr.addr.shortAddr=SIMPLEAPP_GROUP;/Bydefault,alldevicesstartoutinGroup1Group1.ID=0 x0001;osal_memcpy(G,Group1,7);aps_AddGroup(MY_ENDPOINT_ID,组播实验结果:加入组的终端节点和路由节点都能收到协调器发送的“HelloWorld”。,网络拓扑,ZigBee有三种网络拓扑,即星形、树形和网状网络。星形网络中,所有节点只能与协调器进行通信,而他们相互之间的通信是禁止的;树形网络中,终端节点只能与它的父节点通信,路由节点可与它的父节点和子节点通信;网状网络中,全功能节点之间是可以相互通信的。通过设置宏定义修改HOME_CONTROLS(在nwk_globals.h中定义)的网络模式(NWK_MODE),来选择不同的网络拓扑。设定数组CskipRtrs和CskipChldrn的值进一步控制网络的形式。CskipChldrn数组的值代表每一级可以加入的子节点的最大数目,CskipRtrs数组的值代表每一级可以加入的路由节点的最大数目。,网络拓扑,星状网:NWK_MODE设置为NWK_MODE_STAR;CskipRtrsMAX_NODE_DEPTH+1=5,0,0,0,0,0,CskipChldrnMAX_NODE_DEPTH+1=10,0,0,0,0,0,代表只有协调器允许节点加入,且协调器最多允许10个子节点加入,其中最多5个路由节点,剩余的为终端节点。树状网:NWK_MODE设置为NWK_MODE_TREE;CskipRtrsMAX_NODE_DEPTH+1=1,1,1,1,1,0,CskipChldrnMAX_NODE_DEPTH+1=2,2,2,2,2,0。Mesh网:NWK_MODE设置为NWK_MODE_MESH;CskipRtrsMAX_NODE_DEPTH+1=6,6,6,6,6,0,CskipChldrnMAX_NODE_DEPTH+1=20,20,20,20,20,0,协议栈默认。,网络拓扑,星状网,树状网,绑定,通过绑定使两个节点在应用层上建立起来的一条逻辑链路。在同一个节点上可以建立多个绑定服务,分别对应不同种类的数据包。此外,绑定也允许有多个目标节点(一对多绑定)。在一个灯光网络中,有多个开关和灯光设备,每一个开关可以控制一个或以上的灯光设备。在这种情况下,需要在每个开关中建立绑定服务。这使得开关中的应用服务在不知道灯光设备确切的目标地址时,可以顺利地向灯光设备发送数据包。绑定服务只能在“互补”设备之间建立。那就是,只有分别在两个节点的简单描述结构体(simpledescriptorstructure)中,同时注册了相同的命令标识符(command_id)并且方向相反(一个属于输出指令“output”,另一个属于输入指令“input”),才能成功建立绑定。,绑定,应用例子工程有作为终端设备的简单开关配置和作为协调器或路由器设备的简单管理器配置。对于灯管理器设备,按下K4它将使该设备作为协调器启动,期间要是按下K5它将使该设备作为路由器启动。对于开关设备而言,无论是按下K4还是K5都将作为终端设备启动。(确保只能有一个管理器作为协调器,其他都作为路由器。)采用下面的控制方式来创建绑定:通过按某个管理器的K4使它进入允许绑定模式。在某个灯开关上按下K4(10秒之内)发出绑定请求。这就将使该开关设备绑定到该(处于绑定模式下的)管理器设备上。当开关绑定成功时,(开关设备上的)D7亮。之后,开关设备上的K5被按下就将发送“切换”命令。它将使对应的管理器设备上的D7状态切换。,ZStack无线协议栈ZStacksapi软件框架ZStack综合组网实验ZStack通信协议解析ZigBee设备通信实验,ZStack通信协议,ZigBee设备组网后,通过协调器汇集数据,协调器通过串口与上位机通信。ZStack协议栈定义了协调器与上位机的数据通信协议串口设置:波特率(38400bps),数据位(8bit),奇偶校验(无),停止位(1),节点一,节点二,节点三,协调器,上位机,通信数据包格式,#数据帧说明:SOP:固定为0 xFELEN:DATA的长度CMD:2900/上位机发送数据到协调器6900/协调器接收到正确指令后的响应帧6980/协调器发送数据到上位机,通信数据包格式,#数据帧说明:DATA:通信的数据1)响应帧数据:若数据为响应帧,DATA为1个字节,00表示ture,01表示false2)用户的数据:上位机发数据到协调器,DATA格式如下:02+NA+APP_CMD(2字节)+APP_DATA协调器发数据到上位机,DATA格式如下:NA+APP_CMD(2字节)+APP_DATA(其中NA为节点2字节的网络地址)APP_CMD:0000/协调器与上位机之间数据的通信命令APP_DATA:传感器数据格式为类json格式数据,比如:A0=?FCS:从LEN(包含)到DATA的字节异或和校验值,通信数据包格式,#特殊数据帧说明:1)协调器根据给定的MAC地址,查询网络地址上位机向协调

温馨提示

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

评论

0/150

提交评论