第三章zigbee网络原理与开发_第1页
第三章zigbee网络原理与开发_第2页
第三章zigbee网络原理与开发_第3页
第三章zigbee网络原理与开发_第4页
第三章zigbee网络原理与开发_第5页
已阅读5页,还剩284页未读 继续免费阅读

下载本文档

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

文档简介

物联网通信技术第三章Zigbee网络原理及开发赵建立山东科技大学主要内容3.1Zigbee简介3.2Zigbee开发环境及调试3.3Zigbee硬件简介3.4Zigbee无线传感器网络开发基础3.5Zigbee无线传感器网络高级开发3.6Zigbee无线传感器网络管理3.7Zigbee无线传感器网络开发实例主要内容3.1Zigbee简介3.2Zigbee开发环境及调试3.3Zigbee硬件简介3.4Zigbee无线传感器网络开发基础3.5Zigbee无线传感器网络高级开发3.6Zigbee无线传感器网络管理3.7Zigbee无线传感器网络开发实例ZigBee是IEEE802.15.4协议的代名词。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。ZigBee简介ZigBee简介ZigBee技术发展历程1.ZigBee的前身是1998年由INTEL、IBM等产业巨头发起的“HomeRFLite”技术。2.2000年12月成立了工作小组起草IEEE802.15.4标准3.Zigbee联盟成立于2001年8月。2002年下半年,英国Invensys公司、日本三菱电气公司、美国摩托罗拉公司以及荷兰飞利浦半导体公司四大巨头共同宣布加盟“Zigbee联盟”,以研发名为“Zigbee”的下一代无线通信标准,这一事件成为该项技术发展过程中的里程碑。4.2004年12月ZigBee1.0标准(又称为ZigBee2004)敲定,这使得ZigBee有了自己的发展基本标准。5.2005年9月公布ZigBee1.0标准并提供下载。在这一年里,华为技术有限公司和IBM公司加入了ZigBee联盟。但是基于该版本的应用很少,与后面的版本也不兼容。6.2006年12月进行标准修订,推出ZigBee1.1版(又称为ZigBee2006)。该协议虽然命名为ZigBee1.1,但是与ZigBee1.0版是不兼容的。ZigBee简介7.2007年10月完成再次修订(称为ZigBee2007/PRO)。能够兼容之前的ZigBee2006版本,并且加入了ZibgeePRO部分,此时ZigBee联盟更加专注于以下三个方面:

1)、家庭自动化(HomeAutomation;HA);2)、建筑/商业大楼自动化(BuildingAutomation;BA);3)、先进抄表基础建设(AdvancedMeterInfrastructure;AMI);ZigBee简介1.1无线网络数据传输协议对比

1.1无线网络数据传输协议对比Zigbee与现有标准传输协议的比较:1.1无线网络数据传输协议对比因此:Zigbee数据速率较低,不适用于传输大数据量的应用领域。1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.2短距离无线网络的分类1.3zigbee版本介绍2001年8月,ZigBeeAlliance成立。该联盟致力于促进在全球的消费电子、能源、住宅、商业和工业领域广泛采用ZigBee作为领先的无线网络、传感和控制标准。2004年,ZigBeeV1.0诞生。它是Zigbee规范的第一个版本。由于推出仓促,存在一些错误。2006年,推出ZigBee2006,比较完善。2007年底,ZigBeePRO推出。目前已经吸引了一些最具创新性和在世界知名的组织,如华为、罗格朗、施耐德、飞利浦、霍尼韦尔等知名企业,一个由400多家企业和其他组织构成的非营利性开放联合体,1.4zigbee无线网络通信信道分析注:2.4GHZ是全球通用的ISM频段,915MHZ是北美的ISM频段,896MHZ是欧洲认可的ISM频段。ISM:Industrial,ScientificandMedical信道编号中心频率/MHz信道间隔/MHz频率上限/MHz频率下限/MHzk=0868.3--868.6868.0k=1,2,…,10906+2(k-1)2928.0902.0k=11,12,…,262401+5(k-11)52483.52400.01.5zigbee无线网络拓扑结构网络拓扑结构:星状、网状、簇状节点类型:协调器、路由器、终端节点ZigBee协调器(Coordinator)它包含所有的网络信息,是3种设备中最复杂的,存储容量大、计算能力最强。它主要用于发送网络信标、建立一个网络、管理网络节点、存储网络节点信息、寻找一对节点间的路由信息并且不断的接收信息。一旦网络建立完成,这个协调器的作用就像路由器节点。1.5zigbee无线网络拓扑结构ZigBee路由器(Router)

它执行的功能包括允许其它设备加入这个网络,中继路由,辅助子树下终端设备的通信。通常,路由器全时间处在活动状态,因此为主供电。但是在树状拓扑中,允许路由器操作周期运行,因此这个情况下允许路由器电池供电.1.5zigbee无线网络拓扑结构ZigBee终端设备(End-device)一个终端设备对于维护这个网络设备没有具体的责任,所以它可以睡眠和唤配,看它自己的选择。因此它能作为电池供电节点。1.5zigbee无线网络拓扑结构设备类型拓扑类型是否成为协调器通话对象全功能设备(FFD)星型、树状、网状可以与任何ZigBee设备通话简化功能设备(RFD)星型不可以与协调器、路由器通话,不能与终端设备通话1.5zigbee无线网络拓扑结构1.6zigbee技术的应用领域ZigBee应用场合低速无线设备·

TV·

VCR·

DVD·

CD

·

鼠标·

键盘·

操作杆

·

保安·

HVAC·

照明·

门禁

·

玩具·

游戏器具

·

监视·

诊断·

传感器·

监视·

传感器·

自动化·控制工业、农业和商业消费电子PC机的外围设备玩具和游戏个人健康监护ZigBee应用实例结合ZigBee和GPRS的无线数据传输网络1.6zigbee技术的应用领域ZigBee应用实例ZigBee技术在石油石化行业的应用液化天然气罐远程监控汽油管线的腐蚀监测润滑油供应链汽油管线侵入者监测液化天然气容器跟踪1.6zigbee技术的应用领域ZigBee应用实例基于ZigBee技术的管道监测无线数据传输网络1.6zigbee技术的应用领域ZigBee应用实例ZigBee智能交通控制系统无线通信方案ZIGBEE无线通信的交通信号控制系统-交通路口控制通信1.6zigbee技术的应用领域ZigBee应用实例ZIGBEE无线通信的交通信号控制系统-交通路口控制通信ZigBee智能交通控制系统无线通信方案1.6zigbee技术的应用领域ZigBee应用实例基于ZigBee技术的无线三表远程抄表系统采用MESH网状网络结构,保证数据传输的可靠性。每幢单元楼设置一个ZigBee远端节点一个小区设置一个ZigBee中心节点ZigBee中心节点数据通过GPRS/CDMA或ADSL上传到集抄中心1.6zigbee技术的应用领域主要内容3.1Zigbee简介3.2Zigbee开发环境及调试3.3Zigbee硬件简介3.4Zigbee无线传感器网络开发基础3.5Zigbee无线传感器网络高级开发3.6Zigbee无线传感器网络管理3.7Zigbee无线传感器网络开发实例1.1IAR集成开发环境介绍ZigBee无线网络节点开发平台软件开发平台IAREmbeddedWorkbench(简称EW)的C/C++交叉编译器和调试器是今天世界最完整的和最容易使用专业嵌入式应用开发工具。

EW今天已经支持35种以上的8位/16位32位ARM的微处理器结构。EW包括:嵌入式C/C++优化编译器,汇编器,连接定位器,库管理员,编辑器,项目管理器和C-SPY调试器。使用IAR的编译器最优化最紧凑的代码,节省硬件资源,最大限度地降低产品成本,提高产品竞争力。IARSystem是嵌入式领域唯一能够提供这种解决方案的公司。

IAREmbeddedWorkbench是一套完整的集成开发工具集合,包括从代码编辑器、工程建立到C/C++编译器、连接器和调试器的各类开发工具。它和各种仿真器、调试器紧密结合,使用户在开发和调试过程中,仅仅使用一种开发环境界面,就可以完成多种微控制器的开发工作。1.1IAR集成开发环境介绍IAR的安装、工程的编辑和修改参见实验手册1.1IAR集成开发环境介绍1.1IAR集成开发环境介绍1.2仿真与调试CC2530仿真器具有在线下载、调试、仿真等功能。仿真器外形非常简洁,只有1个USB接口、1个复位按键和一根仿真线。1.2仿真与调试USB接口:通过USB接口可以把仿真器与计算机有机地连接起来。仿真器通过此接口与计算机进行通信,要在CC2430/CC2530的ZigBee模块上实现下载、调试(Debug)、仿真等功能都通过此接口来实现。

复位按键:此按键用来实现仿真器的复位,当需要重新下载、调试、仿真时,可通过此按键来实现硬复位。仿真线:这是一根10芯的下载、调试(DEBUG)、仿真线,通过它与CC2430/CC2530的ZigBee模块进行连接。1.2仿真与调试仿真器具有以下特点:USB接口,使开发与计算机连接更加简单快捷2)高速代码下载,提供高达150KBit/s下载速度,把程序下载到CC2430/2530的ZigBee模块只需要几秒就完成3)在线下载、调试、仿真4)硬件断点调试,类似JTAG的硬件断点调试,可实现单步、变量观察等全部C51源代码水平的在线调试DEBUG功能5)支持IAR的C51编译/调试图形IDE开发平台6)专业设计,系统稳定可靠,噪声干扰小1.2仿真与调试连接好仿真器和zigbee节点,复位一下仿真器,然后点击Project中的DownloadandDebug,就实现了下载程序,当程序下载完后,软件进入在线仿真模式。1.3一个例程这个代码的意思是将P1口设置为输出,将P1口置0,中软国际教育集团开发的模块和开发板中有小灯在P1口上,当执行这个代码的时候,小灯会点亮1.3一个例程在上面的介绍中,大家对IAR的使用方法已经有了一定的认识,但是在一个项目中,尤其是无线项目中,涉及到的设备不会仅仅只有一个,如在ZigBee设备中的协调器、路由器和终端设备,虽然设备不相同但它们的功能和协议栈底层却基本相同,所以在里面只需要定义些条件编译就可以设定好,如果将每一个设备都重新建立一个工程的话,这样寄浪费空间,代码也很混乱,所以我们就需要使用IAR的模块设备功能。1.3一个例程

我们通过上面的点亮LED例子来说明这个功能的使用方法。

首先修改工程的代码,在这里我们要实现两个设备在一个工程中实现不同的功能,两个模块的名称分别定义为:Blink_LED和Open_LED。实现的功能是闪烁小灯和打开小灯。voidmain(void){P1DIR=0xFF;while(1){#ifndefBlink_LED

P1=0;#elseP1=~P1;for(inti=0;i<1000;i++)for(intj=0;j<1000;j++);#endif}}注:关于寄存器管脚的定义可以参见〈CC2530-ZigbeePRO接口编程实验手册〉1.3一个例程1.3一个例程从代码中可以看出,根据条件的不同得到的结果也不相同,在这里实现的是一个闪灯的和一个打开小灯的程序,根据下面的图片进行配置,首先是打开小灯,打开小灯的是在没有定义Blink_LED的情况下实现的,所以我们只需要直接选择Open_LED模块,不需要任何修改就可以完成该功能。主要内容3.1Zigbee简介3.2Zigbee开发环境及调试3.3Zigbee硬件简介3.4Zigbee无线传感器网络开发基础3.5Zigbee无线传感器网络高级开发3.6Zigbee无线传感器网络管理3.7Zigbee无线传感器网络开发实例1.1CC2430与CC2530的比较项目cc2430cc2530引脚4840大小7*7mm6*6mmFlash32/64/128KB32/64/128/256KB软件平台IARIAR定时/计数器4个4个中断源18个18个I/O21个21个微控制器增强型c8051增强型c8051抗干扰CSMA/CACSMA/CA功耗RX27mATX25mARX24mATX29mACC2530是TI09年推出的,在CC2430的基础上根据CC2430实际应用的一些问题做了一些改进,缓存加大了,存储容量最大支持到256K,CC2530的通信距离可以达到400m,不用再用CC2430外加功放来扩展距离CC2530的主要特点:◆高性能和低功耗的8051微控制器核。◆集成符合IEEE802.15.4标准的2.4GHz的RF无线电收发机。◆优良的无线接收灵敏度和强大的抗干扰性。◆在休眠模式时仅1μA的流耗,外部的中断或RTC能唤醒系统在待机模式时少于0.4μA的流耗,外部的中断能唤醒系统◆硬件支持CSMA/CA功能。◆较宽的电压范围(2.0~3.6V)。◆数字化的RSSI/LQI支持和强大的DMA功能。◆具有电池监测和温度感测功能。◆集成了14位模数转换的ADC。◆集成AES安全协处理器。◆带有2个强大的支持几组协议的USART,以及2个常规的16位计时器和2个8位计时器。◆强大和灵活的开发工具Zigbee芯片CC2530主要内容3.1Zigbee简介3.2Zigbee开发环境及调试3.3Zigbee硬件简介3.4Zigbee无线传感器网络开发基础3.5Zigbee无线传感器网络高级开发3.6Zigbee无线传感器网络管理3.7Zigbee无线传感器网络开发实例1.1Zigbee协议栈什么是协议什么是协议栈两者有什么联系1.2怎样使用Zigbee协议栈SOCKET编程,利用TCP/IP协议栈1.3Zigbee协议栈的安装ZigBee协议栈具有很多版本,不同厂商提供的ZigBee协议栈有一定的区别,本课程选用的是TI推出的ZigBee2007协议栈进行讲解。ZigBee2007协议栈ZStack-CC2530-2.5.1a要安装以后才能使用,下面讲解安装步骤。1、可以直接到TI官方网站下载zigbee2007协议栈2、打开光盘目录:ETC-WSN物联网光盘资料\ZigBee网络\tools,双击ZStack-CC2530-2.5.1a.exe即可进行协议栈的安装,默认是安装到c盘。然后在路径C:\TexasInstruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\GenericApp\CC2530DB下找到GenericApp.eww,打开该工程。打开该工程后,可以看到GenericApp工程文件布局,如图所示。在图中所示的文件布局中,左侧有很多文件夹,如App,HAL,MAC等;这些文件夹对应了ZigBee协议中不同的层,使用ZigBee协议栈进行应用程序的开发,一般只需要修改App目录下的文件即可。1.3Zigbee协议栈的安装APP:对应开发的应用模块;HAL模块直接操作外设寄存器,完成外设的驱动程序。向上层提供外设驱动的接口函数MT(MonitorTest,监控测试)模块为上位机提供通过串口监测节点运行情况的方式。可以通过串口请求AF、ZDO、NWK和MAC模块进行特定操作;MAC模块实现IEEE802.15.4标准的MAC层服务;NWK(Network,网络)模块实现ZigBee规范中的网络层服务,包括网络的配置、节点的加入/离开网络、地址分配、路由发现、网络层协议数据单元的传输等。1.3Zigbee协议栈的安装1.3zigbee协议栈安装ZDO(ZigBeeDeviceObject,ZigBee设备对象)模块实现ZigBee规范中的ZDO定义的功能,包括应用支持子层和网络层的初始化,并通过向用户定义的应用对象收集相关信息来实现设备和服务发现、安全管理、网络管理、绑定管理等。OSAL(OperatingSystemAbstractionLayer,操作系统抽象层)模块定义了其它模块中的事件的处理机制。它将每一模块内的所有事件放在一个任务中进行处理,任务间的通信通过传递系统消息来完成,这使得协议栈中的事件处理更类似于一个操作系统;同时它还定义了堆内存管理、NV(non-volatile,非可变)存储系统的管理、电源管理、时钟管理等。1.3zigbee协议栈安装

TOOLS文件夹里面f8w2530.xcl,f8wConfig.cfg,f8wCoord.cfg三个文件包含了节点的配置信息,具体功能如下:(1)f8w2530.xcl----包含了CC2530单片机的链接控制指令(如定义堆栈大小、内存分配等),一般不需要改动。(2)f8wConfig.cfg----包含了信道选择,网络号等有关的链接命令。例如:下列代码定义了建立网络的信道默认为11,即从11信道上建立ZigBee无线网络,第59行定义了ZigBee无线网络的网络号。1.3zigbee协议栈安装(3)f8wCoord.cfg----定义了设备类型前文讲到zigbee无线网络中的设备类型有协调器,路由器和终端节点。下述代码就定义了该设备具有协调器和路由器的功能。第一个zigbee实验两个ZigBee节点进行点对点通信,ZigBee节点2每隔5s向节点1发送一次“ChinaSofti”字符,同时LED绿灯闪烁两下表示成功发送。ZigBee节点1收到节点2发送过来的数据后,对接收到的数据进行判断,如果收到的数据是“ChinaSofti”,则使开发板上的LED红灯闪烁两下表示成功接收。第一个zigbee实验ZigBee节点1配置为1个协调器,负责ZigBee网路的组建,ZigBee节点2配置为一个终端节点。创建协调器的程序(Coordinator.c)创建终端节点的程序(Enddevice.c)实验室环境下,一定不要忘记修改PID!!如何创建,参见手册P58.第一个zigbee实验第一个zigbee实验每个节点上的所有端口共用一个发射/接收天线,不同节点上的端口之间可以进行通信,如节点1的端口1可以给节点2的端口1发送控制命令来点亮LED,节点1的端口1也可以给节点2的端口2发送命令进行数据采集操作,但是节点2上端口1和端口2的网络地址是相同的,所以仅仅通过网络地址无法区分,所以,在发送数据时不但要指定网络地址,还要指定端口号。第一个zigbee实验-Coordinator.c第一个zigbee实验-Coordinator.c第一个zigbee实验-Coordinator.c:包含的头文件是从删除的GenericApp.c文件复制得到的。GENERICAPP_MAX_CLUSTERS是在GenericApp.h文件中定义的宏,这主要是为了跟协议栈里面数据的定义格式保持一致,代码中的常量都是以宏定义的形式实现的。第一个zigbee实验-

Coordinator.c

第一个zigbee实验-Coordinator.c上述代码定义了三个变量,一个是节点描述符GGenericApp_epDesc,一个是任务优先级GenencApp_TaskID,最后一个是数据发送序列号GenericApp_TransID。第一个zigbee实验-Coordinator.c上述代码声明了一个消息处理函数GenericApp_MessageMSGCB。第一个zigbee实验-Coordinator.c第36行,初始化了任务优先级(任务优先级由协议栈的操作系统OSAL分配)。第37行,将发送数据包的序号初始化为0,在ZigBee协议栈中,每发送一个数据包,该发送序号自动加1(协议栈里面的数据发送函数会自动完成该功能),因此,在接收端可以查看接收数据包的序号来计算丢包率。第39—43行,对节点描述符进行的初始化,上述初始化格式较为固定,一般不需要修改。第44行,使用afRegister函数将节点描述符进行注册,只有注册以后,才可以使用OSAL提供的系统服务。第一个zigbee实验-Coordinator.c需要修改的代码是第58行,读者可以修改该函数的实现形式,但是其功能基本都是完成对接收数据的处理。第一个zigbee实验-Coordinator.c第79行,将收到的数据拷贝到缓冲区buf中。第80行,判断接收到的数据是不是“ChinaSofti”,这里是选择性判断了4个字符。如果是则执行第82行,使LED红灯闪烁2次。第一个zigbee实验-Coordinator.c到此为止,协调器的编程已经基本结束,下面回忆一下上述代码所做的基本工作。(1)删除了协议栈中的GenericApp.c文件,然后添加了两个文件:Coordinator.c和Enddevice.c。(2)给出了Coordinator.c的代码,并给出了部分注释,其中Coordinator.c文件中很多代码格式是固定的,读者只需要熟悉这些代码格式即可。第一个zigbee实验-Coordinator.c节点描述符GenericApp_epDesc,任务优先级GenericApp_TaskID,保存节点状态的变量GenericApp_NwkState,数据发送序列号GenericApp_TransID,最后一个是数据发送目的地址的变量GenericApp_DstAddr。第一个zigbee实验-Enddevice.c声明了数据发送函数GenericApp_SendTheMessage。第39行,将设备状态初始化为DEV_INIT,表示该节点没有连接到网络。第42行,将发送地址模式设置为单播(Addr16Bit表示单播)。第44行,协调器的网络地址为0x0000;第51行,使用afRegister函数将节点描述符进行注册。第一个zigbee实验-Enddevice.c第一个zigbee实验-Enddevice.c第64行,读取节点的设备类型。第65行,对节点设备类型进行判断,如果是终端节点(设备类型码为DEVE_END_DEVICE),再执行第67行代码,定时5s后启动GENERICAPP_SEND_MSG_EVT事件以发送数据。第83行,无线数据发送函数。第一个zigbee实验-Enddevice.c第93行,定义了一个数组theMessageData用于存放要发送的数据。第95行,调用数据发送函数AF_DataRequest进行无线数据的发送。第一个zigbee实验-Enddevice.c此时分别编译、下载程序到Zigbee节点,实现预定功能!!但编译的时候注意:第一个zigbee实验协调器上电后,会按照编译时给定的参数,选择合适的信道、合适的网络号,建立ZigBee无线网络,这部分内容读者不需要写代码实现,ZigBee协议栈已经实现了。终端节点则是加入网络后定期发送数据。流程图与协调器类似。终端节点上电后,会进行硬件电路的初始化,然后搜索是否有ZigBee无线网络,如果有ZigBee无线网络再自动加入(这是最简单的情况,当然可以控制节点加入网络时要符合编译时确定的网络号等),然后发送数据到协调器,最后使LED闪烁。Zigbee数据通讯实验原理

在zigbee协议栈中进行数据发送可以调用AF_Dataquest函数实现,该函数会调用协议栈里面与硬件相关的函数最终将数据通过天线发送出去,这里面涉及对射频模块的操作,例如:打开发射机,调整发射机的发送功率等内容,这些部分协议栈已经实现了,用户不需自己写代码去实现,只需要掌握AF_DataRequest函数的使用方法即可。下面简要讲解一下AF_DataRequest数据发送函数中各个参数的具体含义。Zigbee数据通讯实验原理—数据发送在TI提供的Zstack协议栈中,数据发送函数定义如下:

afStatus_tAF_DataRequest( afAddrType_t*dstAddr, endPointDesc_t*srcEP,

uint16cID,uint16len, uint8*buf, uint8*transID, uint8options, uint8radius)最核心的两个参数:·uint16len-----发送数据的长度;·uint8*buf-----指向存放发送数据的缓冲区的指针。Zigbee数据通讯实验原理—数据发送①afAddrType_t*dstAddr----该参数包含了目的节点的网络地址以及发送数据的格式,如广播、单播或多播等。②endPointDesc_t*srcEP----在ZigBee无线网络中,通过网络地址可以找到某个具体的节点,如协调器的网络地址是0x0000,但是具体到某一个节点,还有不同的端口(endpoint),每个节点上最多支持240个端口(endpoint)。Zigbee数据通讯实验原理—数据发送③uint16cID----这个参数描述的是命令号,在ZigBee协议里的命令主要用来标识不同的控制操作,不问的命令号代表了不同的控制命令,如终端节点在发送数据时使用的命令ID是GENERICAPP_CLUSTERID,它的值为1。④uint16len----该参数标志了发送数据的长度。⑤uint8*buf----该参数是指向发送数据缓冲区的指针。发送数据函数会从该指针指向的地址按照指定的长度取得发送数据进行发送。⑥uint8*transID----该参数是一个指向发送序号的指针,每次发送数据时,发送序号会自动加1(协议栈里面实现的该功能),在接收端可以通过发送序号来判断是否丢包,同时可以计算出丢包率。⑦uint8options和uint8radius----这两个参数取默认值即可Zigbee数据通讯实验原理—数据发送当协调器接收到数据后,操作系统会将该数据封装成一个消息,然后放入消息队列中,每个消息都有自己的消息ID,标志接收到新数据的消息的ID是AF_INCOMING_MSG_CMD,其中AF_INCOMING_MSG的值是0x1a,用户不可更改,ZigBee协议栈中AF_INCOMlNG_MSG_CMD宏的定义如下(在Zcomdef.h文件中定义的):#defineAF_INCOMING_MSG_CMD0x1AZDO_STATE_CHANGE当网络状态发生变化时,会产生该事件,如节点加入网络时,就可以通过判断该事件来决定何时向协调器发送数据包。Zigbee数据通讯实验原理—数据接收首先使用osal_msg_receive函数从消息队列中接收一个消息,然后使用switch-case语句对消息类型进行判断(判断消息ID),如果消息ID是AF_INCOMlNG_MSG_CMD则进行相应的数据处理。Zigbee数据通讯实验原理—数据接收1.4Zigbee组网过程1个是64位的IEEE地址,通常也叫作MAC地址或者扩展地址(Extendedaddress),另一个是16位的网络地址,也叫做逻辑地址(Logicaladdress)或者短地址64位长地址是全球唯一的地址,并且终身分配给设备。这个地址可由制造商设定或者在安装的时候设置,是由IEEE来提供当设备加入ZigBee网络被分配一个短地址,在其所在的网络中是唯一的。这个地址主要用来在网络中辨识设备,数据传输和数据包路由等一个节点是一个设备,有一个射频端,一个64位IEEE地址,一个16位网络地址IEEE802.15.4网络的建立过程首先,每个设备的协议栈必须要对其PHY和MAC层初始化每个网络必须有一个也只能有一个PANCo-ordinatorPANID作为网络标识,可以被人为的预定义除64位IEEEMAC地址外,还须分配一个16位的短地址例如Zigbee技术选择2.4GHz设备以Co-ordinator的模式启动,然后就开放请求应答有可以利用的Co-ordinator,设备就可以申请加入网络设备被Co-ordinator接受,将获得短地址作为标识,便可传输数据

组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。

1.4Zigbee组网过程协调器初始化网络1、

检测协调器建立一个新的网络是通过原语NLME_NETWORK_FORMATION.request发起的,但发起NLME_NETWORK_FORMATION.request原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的NLME_NETWORK_FORMATION.confirm的原语来通知上层这是一个非法请求。协调器初始化网络2、

信道扫描协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。信道扫描包括能量扫描和主动扫描两个过程。首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内的信道等待进一步处理。接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数值为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。协调器初始化网络3、配置网络参数如果扫描到一个合适的信道,网络层管理实体将为新网络选择一个PAN描述符,该PAN描述符可以是由设备随机选择的,也可以是在NLME_NETWORK_FORMATION.request里指定的,但必须满足PAN描述符小于或等于0x3fff,不等于0xffff,并且在所选信道内是唯一的PAN描述符,没有任何其它PAN描述符与之是重复的。如果没有符合条件的PAN描述符可选择,进程将被终止,网络层管理实体通过参数值为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。确定好PAN描述符后,网络层管理实体为协调器选择16位网络地址0x0000,MAC子层的macPANID参数将被设置为PAN描述符的值,macShortAddressPIB参数设置为协调器的网络地址。协调器初始化网络4、运行新网络网络参数配置好后,网络层管理实体通过MLME_START.request原语通知MAC层启动并运行新网络,启动状态通过MLME_START.confirm原语通知网络层,网络层管理实体再通过NLME_NETWORK_FORMATION.confirm原语通知上层协调器初始化的状态。协调器初始化网络5、允许设备加入网络只有ZigBee协调器或路由器才能通过NLME_PERMIT_JOINING.request原语来设置节点处于允许设备加入网络的状态。当发起这个进程时,如果PermitDuration参数值为0x00,网络层管理实体将通过MLME_SET.request原语把MAC层的macAssociationPermitPIB属性设置为FALSE,禁止节点处于允许设备加入网络的状态;如果PermitDuration参数值介于0x01和0xfe之间,网络层管理实体将通过MLME_SET.request原语把macAssociationPermitPIB属性设置为TRUE,并开启一个定时器,定时时间为PermitDuration,在这段时间内节点处于允许设备加入网络的状态,定时时间结束,网络层管理实体把MAC层的macAssociationPermitPIB属性设置为FALSE;协调器初始化网络5、允许设备加入网络如果PermitDuration参数的值为0xff,网络层管理实体将通过MLME_SET.request原语把macAssociationPermitPIB属性设置为TRUE,表示节点无限期处于允许设备加入网络的状态,除非有另外一个NLME_PERMIT_JOINING.request原语被发出。

节点加入网络一个节点加入网络有两种方法,一种是通过使用MAC层关联进程加入网络,另一种是通过与先前指定父节点连接而加入网络。1、

子节点发起信道扫描子节点通过NLME_NETWORK_DISCOVERY.request原语发起加入网络的进程,网络层接收到这个原语后通过发起MLME_SCAN.request原语请求MAC层执行一个主动扫描或被动扫描以接收包含了PAN标志符的信标帧,扫描的信道以及每个信道的扫描时间分别由NLME_NETWORK_DISCOVERY.request原语的参数ScanChannels和ScanDuration决定。

1)通过MAC层关联加入网络2、

子节点存储各PAN信息MAC层通过MLME_BEACONNOTIFY.indication原语将扫描中接收到的信标帧信息发送到网络层管理实体,信标帧信息包括信标设备的地址、是否允许连接以及信标净载荷。如果信标净载荷域里的协议ID域与自己的协议ID相同,子设备就将每个匹配的信标帧相关信息保存在邻居表中。信道扫描完成后,MAC层通过MLME_SCAN.confirm原语通知网络层管理实体,网络层再通过NLME_NETWORK_DISCOVERY.confirm原语通知上层,该原语包含了每个扫描到的网络的描述符,以便上层选择一个网络加入。

1)通过MAC层关联加入网络3、

子节点选择PAN如果上层需要发现更多网络,则可以重新执行网络发现,如果不需要,则通过NLME_JOIN.request原语从被扫描到的网络中选择一个网络加入。参数PANID设置为被选择网络的PAN标识符。

1)通过MAC层关联加入网络4、

子节点选择父节点一个合适的父节点需要满足三个条件:匹配的PAN标志符、链路成本最大为3、允许连接,为了寻找合适的父节点,NLME_JOIN.request原语请求网络层搜索它的邻居表,如果邻居表中不存在这样的父节点则通知上层,如果存在多个合适的父节点则选择具有最小深度的父节点,如果存在多个具有最小深度的合适的父节点则随机选择一个父节点。

1)通过MAC层关联加入网络5、

子节点请求MAC关联确定好合适的父节点后,网络层管理实体发送一个MLME_ASSOCIATE.request原语到MAC层,地址参数设置为已选择的父节点的地址,尝试通过父节点加入网络。

1)通过MAC层关联加入网络6、

父节点响应MAC关联父节点通过MLME_ASSOCIATE.indication原语通知网络层管理实体一个节点正尝试加入网络,网络层管理实体将搜索它的邻居表查看是否有一个与尝试加入节点相匹配的64位扩展地址,以便确定该节点是否已经存在于它的网络中了。如果有匹配的扩展地址,网络层管理实体获取相应的16位网络地址并发送一个连接响应到MAC层。如果没有匹配的扩展地址,在父节点的地址分配空间还没耗尽的条件下网络层管理实体将为尝试加入的节点分配一个16位网络地址。如果父节点地址分配空间耗尽,将拒绝节点加入请求。当同意节点加入网络的请求后,父节点网络层管理实体将使用加入节点的信息在邻居表中产生一个新的项,并通过MLME_ASSOCIATE.request原语通知MAC层连接成功。

1)通过MAC层关联加入网络7、

子节点响应连接成功如果子节点接收到父节点发送的连接成功信息,发送一个传输成功响应信息以确认接收,然后子节点MAC层将通过MLME_ASSOCIATE.confirm原语通知网络层,原语包含了父节点为子节点分配的网内唯一的16位网络地址,然后网络层管理实体设置邻居表相应邻居设备为它的父设备,并通过NLME_JOIN.confirm原语通知上层节点成功加入网络。8、

父节点响应连接成功父节点接收到子节点的传输成功响应信息后,将通过MLME_COMM_STATUS.indication原语将传输成功的响应状态发送给网络层,网络层管理实体通过NLME_JOIN.indication原语通知上层一个节点已经加入了网络。

1)通过MAC层关联加入网络1、

父节点处理子设备直接加入网络父节点通过NLME_DIRECT_JOIN.request原语开始处理一个设备直接加入网络的进程。父节点网络层管理实体将首先搜索它的邻居表查看是否存在一个与子节点相匹配的64位扩展地址,以便确定该节点是否已经存在于它的网络中了。如果存在匹配的扩展地址,网络层管理实体将终止这个进程并告诉上层该设备已经存在于设备列表中了。如果不存在匹配的扩展地址,在父节点的地址分配空间还没耗尽的条件下网络层管理实体将为子节点分配一个16位网络地址,并使用子节点的信息在邻居表中产生一个新的项。然后通过NLME_DIRECT_JOIN.confirm原语上层设备已经加入网络。

2)通过与先前指定父节点连接加入网络子节点通过与指定的父节点直接连接加入网络,这个时候父节点预先配置了

子节点的64位扩展地址。2、

子节点连接父节点确认父子关系子节点通过NLME_JOIN.request原语发起孤立扫描来建立它与父节点之间的关系。这时网络层管理实体将通过MLME_SCAN.request请求MAC层对物理层所默认的所有信道进行孤立扫描,如果扫描到父设备,MAC层通过MLME_SCAN.confirm原语通知网络层,网络层管理实体再通过NLME_JOIN.confirm原语通知上层节点请求加入成功,即与父节点建立了父子关系,可以互相通信。

2)通过与先前指定父节点连接加入网络子节点通过与指定的父节点直接连接加入网络,这个时候父节点预先配置了

子节点的64位扩展地址。主要内容3.1Zigbee简介3.2Zigbee开发环境及调试3.3Zigbee硬件简介3.4Zigbee无线传感器网络开发基础3.5Zigbee无线传感器网络高级开发3.6Zigbee无线传感器网络管理3.7Zigbee无线传感器网络开发实例应用层应用汇聚层网络层数据链路层LLCMAC物理层应用层定义了各种类型的应用业务,是协议栈的最上层用户。应用汇聚层负责把不同的应用映射到ZigBee网络层上,主要有安全与鉴权、多个业务数据流的汇聚、设备发现和业务发现。网络层的功能包括拓扑管理、MAC管理、路由管理和安全管理。1.1物理服务规范IEEE802.15.4定义了2.4GHz和868/915三个物理层标准,均采用了DSSS(DirectSequenceSpreadSpectrum,直接序列扩频,DSSS)技术,采用相同的数据包格式,但他们的工作频率、调制技术、扩频码片长度和传输速率有所不同。物理层提供了MAC和物理信道之间的接口,物理层的管理实体提供了用于调用物理层管理功能的管理服务接口,物理层的参考模型如图5.4所示。PLME(PhysicalLayerManagementEntity,PLME)为管理实体;PD-SAP(PhysicalDataServiceAccessPoint,PD-SAP)为物理层数据服务接入点;PIB(PANInformationBase)为物理层的个域网信息库。物理层提供了物理层数据服务和物理层管理服务。物理层数据服务是由PD-SAP(物理层数据服务接入点)提供的,物理层管理服务是由PLME中的PD-SAP提供的。物理层数据服务从无线信道上收发数据,通过PD-SAP实现对等MAC层实体间的MPDU(MACProtocolDataUnit,MPDU)传输。

物理层管理服务维护物理层相关数据组成的数据库,通过PLME-SAP在MLME(MACLayerManagementEntity,MLME)和管理实体PLME之间的传输管理命令。1.2物理层帧结构IEEE802.15.4物理层的帧结构如图5.5所示,由4个字段组成。第一个字段由4个字节组成前导码,前导码由32个“0”组成,用于收发器的通信同步。第二个字段为帧的起始分割字段,由1个字节组成,其固定为0xA7,作为帧开始的标志。第三个字段为帧长度字段,由1个字节组成,字节的低7位表示帧的长度,其余1为保留,帧的长度表示帧的负载长度,一般不超过127个字节。第四个字段为数据字段,它的长度可变,主要用来承载MAC帧。帧起始分割符SFD由8bit组成,表示同步结束,数据包开始传输。SFD(Start-of-FrameDelimiter,SFD)与前导码构成同步头。帧长度由7bit组成,表示物理数据单元PSDU(PHYServiceDataUnit)的字节数。PSDU域是可变长度的,它携带了PHY数据包的数据。4字节1字节1字节可变长度前导码SFD帧长7bit保留1bitPSDU同步头物理帧头PHY负载1.3MAC层的功能IEEE802.15.4MAC层提供了MAC层数据服务和MAC层数据管理两种服务。这两种服务为网络层和物理层提供了一个接口。MAC层数据服务提供了数据通信功能,MPDU的接收和发送可通过物理层来进行。MAC层数据管理服务提供了向高层访问的功能,通过MLME的SAP来访问高层。IEEE802.15.4主要完成联合、分离、确认帧传送、信道访问机制、帧确认、时隙管理和信令管理等功能。MAC层在处理物理层进行访问时,主要完成以下功能:协调器的网络结点产生网络信标功能;完成信标同步功能;支持个域网关联和去关联功能;支持结点安全规范功能;执行信道接入的CSMA-CA机制;处理和维护时隙(GTS)机制;提供等MAC实体间的可靠连接。

无线传感器网络的信标管理、信道接入机制、保证时隙(GTS)管理、帧确认、确认帧传输、节点接入和分离、信道接人控制、广播信息管理的功能均在IEEE802.15.4的MAC层完成。1.4MAC层的服务规范可通过MAC层的两个SAP分别访问IEEE802.15.4MAC层提供的MAC层数据服务和MAC层管理服务。

对于MAC层数据服务,可通过MCPS-SAP(MCPS数据服务接入点)进行访问。网络设备支持MCPS-DATA.Request原语,请求从本地SSCS实体向另外一个对等的SSCS实体传输数据。

对于MAC层管理服务,可通过MLME的E-SAP(管理实体服务接入点)来访问。IEEE802.15.4的MAC层支持多种LLC标准。通过SSCS(ServiceSpecificConvergenceSub-layer,SSCS,业务相关汇聚子层)协议承载IEEE802.2类型的LLC标准,可同时允许其他LLC标准直接使用IEEE802.15.4的MAC层服务。SSCS与PHY层间的接口是由PD-SAP和PLME-SAP两个接入点的接口组成的。除了这些外部接口,MLME和MCPS之间还存在一个内部接口,MLME可以通过该接口访问MAC数据服务。1.5MAC的帧结构IEEE802.15.4的帧结构是以保证在有噪声的信道中可靠传输数据的基础上尽量降低网络的复杂度为原则而设计的。IEEE802.15.4的MAC层定义了4种基本帧结构,即:信标帧,供协商者使用;数据帧,承载数据使用;响应帧,用来确认帧的可靠传输;命令帧,用来处理MAC对等实体间的数据传输控制MAC帧由帧头MHR(MACHeader)、MAC负载和帧尾MFR(MACFooter)构成。帧头由控制信息、帧序列号和地址信息组成,MAC层负载的长度可变,具体长度由帧的类型来确定。帧尾是帧头和负载数据的16位错误检测码序列。通用的MAC帧结构如图5.6所示。2字节1字节2字节2字节可变2字节帧控制序列号目标PAN标识目标地址源PAN标识源地址帧负载FCS地址域MHRMAC负载MFR帧控制域占用2字节长度,包含帧类型定义、寻址域以及其他控制标志等;序列号域长度为1字节,为每个帧提供唯一的序列标识;目标PAN标识域占2字节,内容是指定接收方的唯一PAN标识;目标地址域是指定接收方的地址;

源PAN标识域占用2字节,数据发送端地址域是发送帧的设备地址;帧负载域长度可变,根据不同的帧类型其内容各不相同;帧检验序列域有16位长,包含一个16位的CRC循环冗余校验部分。(a)信标帧信标帧也是由三部分构成。其中,负载部分是信标帧的有效信息,由超帧描述字段、同步时限分配字段、待转发数据目标地址字段和信标帧负载数据,4个部分组成。信标帧的结构如图5.7所示。2字节1字节4/102字节变长

可变可变2字节帧控制序列号寻址域超帧规范GTS域待转地址信标负载FCSMHRMAC负载MFR信标帧中超帧规范描述字段规定了这个超帧的持续时间,活跃部分持续时间以及竞争访问持续时间等信息。

同步时隙分配字段(GTS字段)将无竞争的时段划分为若干个GTS,并把每个GTS分配给网络中一个具体设备。

待转发数据目标地址列出了工作协同设备的设备地址。一个设备如果发现自己的地址出现在待转发数据目标地址字段里,即可确定协调器中存储了该设备的数据,于是就会向协调器发出请求发送数据的MAC命令帧。(b)数据帧数据帧用来传输上层发送到MAC层的数据,数据帧的负载字段包括了上层需要传送的数据。要传输的数据传送到MAC层时,成为MAC服务数据单元,在数据的起始和结尾部分分别附加了MHR头信息和MFR信息后,就构成了MAC帧。 MAC帧被传送到物理层后,成为物理帧的负载PSDU。PSDU在物理层中,首部增加了同步信息SHR和帧长度字段PHR字段后成为物理层帧。数据帧结构如图5.8所示。2字节1字节4/10变长

2字节帧控制序列号寻址域数据负载FCSMHRMAC负载MFR(c)确认帧如果结点设备收到的目的地址为自己的数据帧,并且帧的控制信息字段的确认请求被置1,此时结点设备需要回复一个确认帧。确认帧的序列号应与被确认帧的序列号相同,并且负载长度应为0。确认帧紧接着被确认的帧发送,不需要采用CSMA-CA机制竞争信道。确认帧的结构如图5.9所示。2字节1字节2字节帧控制序列号FCSMHRMFR数据接口及网络层服务

ZigBee网络层的各个组成部分和彼此间的接口关系如图5.13所示。图中NLDE-SAP为网络层数据实体的服务接入点,NLME-SAP是网络层管理实体的服务接入点,MCPS-SAP是媒体接入控制公共部分子层的服务接人点,MLME-SAP是MAC层管理实体的服务接入点。1.6网络层结构网络层通过两种服务接入点提供网络层数据服务和网络层管理服务。网络层数据服务通过网络层数据实体服务接入点接入,网络层管理服务通过网络层管理实体服务接人点接入。网络层数据实体提供以下服务:产生网络层协议数据单元(NPDU),网络层数据实体通过增加一个适当的协议头从应用支持层协议数据单元中生成网络层的协议数据单元;指定传输拓扑路由,网络层数据实体能够发送一个网络层的协议数据单元到一个数据传输的目标终端设备,目标终端设备也可以是通信链路中的一个中间通信设备。网络层管理实体提供如下服务:配置新的设备。为保证设备正常工作的需要,设备应具有足够的堆栈,以满足配置的需要。配置选项包括对一个ZigBee协调器和连接一个现有网络设备的初始化操作;加入或离开网络。具有连接或者断开一个网络的能力,以及为建立一个ZigBee协调器或者ZigBee路由器,具有要求设备同网络断开的能力;ZigBee协调器和ZigBee路由器具有为新加入网络的设备分配地址能力;具有发现、记录和汇报相关的一跳邻居设备信息的能力;具有发现和记录有效地传送信息的网络路由的能力;具有控制设备接收机接收状态的能力,即控制接收机什么时间接收、接收时间的长短,以保证MAC层的同步或者正常接收等。网络层帧格式ZigBee网络层帧由帧报头和可变长有效载荷组成。网络层帧报头,包含帧控制、地址和序列信息;网络层帧的可变长有效载荷,包含帧类型所指定的信息。2字节2字节2字节0/1字节0/1字节变长帧控制目的地址源地址广播半径域序列号帧负载路由帧网络层帧报头网络负荷1.7zigbee协议栈构成(1)TI公司开发的Z-Stack是ZigBee协议栈,并且经过了ZigBee联盟的认可而为全球众多开发商所广泛采用(2)我们没必要弄懂zigbee协议栈所有源代码,所谓开发或应用主要是对主函数及操作系统的修改应用,许多库函数据项目要求而做修改即可)(3)TI公司的Z-Stack协议栈装载在一个基于IAR开发环境的工程里(4)Z-Stack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式如果同时有几个事件发生,判断优先级,逐次处理事件这种软件构架可以极大地降级系统的功耗1.7zigbee协议栈构成(7)整个Z-stack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段(5)Z-Stack实际上是帮助程序员方便开发ZigBee的一套系(6)整个Z-Stack采用分层的软件结构硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展。操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现1.7zigbee协议栈构成Zigbee协议栈物理层负责将数据通过发射天线发送出去以及从天线接收数据;MAC层提供点对点通信的数据确认以及一些用于网络发现和网络形成的命令;网络层(NWK)主要是对网型网络提供支持,如在全网范围内发送广播包,为单播数据包选择路由,网络层还具有安全特性;应用程序支持子层主要是提供了一些API函数供用户调用,ZigBee设备对象ZDO是运行在端口0的应用程序,主要提供了一些网络管理方面的函数。Zigbee协议栈端口0该端口用于整个ZigBee设备的配置和管理,用户应用程序可以通过端口0与ZigBee协议栈的应用程序支持子层、网络层进行通信,从而实现对这些层的初始化工作。端口255该端口用于向所有的端口广播。在ZigBee协议栈中,各层之间进行数据传递是通过服务接入点来实现的。一般使用两种类型的服务接入点:一种用于数据传输的服务接入点,另一种用于管理的服务接入点。1.7zigbee协议栈构成整个协议栈是从哪里开始执行的呢?在Zmain文件夹下有个Zmain.c件,打开该文件可以找到main()函数,这就是整个协议栈的入口点,即从此开始执行!1.7zigbee协议栈构成Z-stack流程图1.7zigbee协议栈OSAL介绍ZigBee协议栈包含了ZigBee协议所规定的基本功能,这些功能是以函数的形式实现的,为了便于管理这些函数集,从ZigBee2006协议栈开始,ZigBee协议内加入了实时操作系统,称为OSAL(操作系统抽象层,OperatingSystemAbstractionLayer)。OSAL(OperatingSystemAbstractionLayer),即操作系统抽象层,如何理解OSAL呢?从字面意思看是跟操作系统有关,但是后面为什么又加上“抽象层”呢?在ZigBee协议栈中,OSAL有什么作用呢?下面将对上述问题进行讨论。1.7zigbee协议栈OSAL介绍1.7zigbee协议栈OSAL介绍1.7zigbee协议栈OSAL介绍1.7zigbee协议栈OSAL介绍1.7zigbee协议栈OSAL介绍那么,事件和任务的事件处理函数是如何联系起来的昵?ZigBee中采用的方法是:建立一个事件表,保存各个任务的对应的事件,建立另一个函数表,保存各个任务事件处理函数的地址,然后将这两张表建立某种对应关系,当某一事件发生时则查找函数表找到对应的事件处理函数即可。1.7zigbee协议栈OSAL介绍

现在问题转变为:用什么样的数据结构来实现事件表和函数表呢?如何将事件表和函数表建立对应关系呢?可以说,只要将上述两个问题解决,整个协议栈的开发将会变得很容易。ZigBee协议栈中,有三个变量至关重要。1.7zigbee协议栈OSAL介绍

OSAL的工作原理:通过tasksEvents指针访问事件表的每一项,如果有事件发生,则查找函数表找到事件处理函数进行处理,处理完后,继续访问事件表,查看是否有事件发生,无限循环。从这种意义上说,OSAL是一种基于事件驱动的轮询式操作系统。事件驱动是指发生事件后采取相应的事件处理方法,轮询指的是不断地查看是否有事件发生。1.7zigbee协议栈OSAL介绍前文提到,在main函数中,直到调用osal_start_system函数,整个ZigBee协议栈才算是真正地运行起来了,下面将深入osal_start_system函数的内部去探究协议栈是如何被调动起来的。1.7zigbee协议栈OSAL介绍第3行,定义了一个变量idx,用来在事件表中索引。第4、5两行,更新系统时钟,同时查看硬件方面是否有事件发生。第6--9行,使用do-while循环查看事件表是否有事件发生。第11和12行,读取该事件。第13行,将事件表中该项清零,注意有可能几个事件同时发生,这里清零暂时的,第15行会将未处理的事件存放在事件表中。

1.7zigbee协议栈OSAL介绍现在遇到的问题是;如何在事件处理函数中返回未处理的事件呢?下面结合GenericApp_ProcessEvent函数,讲解一下。1.7zigbee协议栈OSAL介绍GenericApp_ProcessEvent函数的基本实现方法是:使用osal_msg_receive函数从消息队列上接收一个消息(在该消息中包含了事件以及接收到的数据),然后使用swich-case语句判断事件类型,如果是接收到新数据事件AF_INCOMING_MSG_CMD,则调用相应的事件处理函数。注意黑体部分的return语句,使用了异或运算,通过使用异或运算可以将处理完的事件清除,仅留下未处理的事件。串口事件定义为:0b00000001温度事件定义为:0b000001001.7zigbee协议栈OSAL介绍从上述函数中可以看到SYS_EVENT_MSG,SYS_EVENT_MSG与AF_INCOMING_MSG_CMD有什么内在联系呢?前文讲到可以使用一个二进制位表示一个事件,因此在ZigBee协议栈中,用户可以自己定义事件,但是,协议栈同时也给出了几个己经定义好的事件,SYS_EVENT_MSG就是其中的一个事件,SYSEVENTMSG的定义如下:

#defineSYS_EVENT_MSG0x8000

1.7zigbee协议栈OSAL介绍由协议栈定义的事件成为系统强制事件(MandatoryEvents),SYS_EVENT_MSG是一个事件集合,主要包括以下几个事件(其中前两个较为常用):(1)AF_INCOMING_MSG_CMD表示收到了一个新的无线数据(2)ZDO_STATE_CHANGE当网络状态发生变化时,会产生该事件,如节点加入网络时,就可以通过判断该事件来决定何时向协调器发送数据包。(3)ZDO_CB_MSG指示每一个注册的ZDO响应消息。(4)AF_DATA_CONFIRM_CMD调用AF_DataRequest发送数据时,有时需要确认信息,该事件与此有关。

1.8OSAL消息对列讲解消息队列之前需要讲解一下

温馨提示

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

评论

0/150

提交评论