蒋佳君浅谈zigbee技术contents•网络协议及网络拓扑结构•IEEE802.15.4及Zigbee•zigbee芯片及模块网络协议一个网络协议至少包括三要素:语法用来规定信息格式;数据及控制信息的格式、编码及信号电平等语义用来说明通信双方应当怎么做;用于协调与差错处理的控制信息定时(时序)定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是异步传输定义网络协议是指为了实现计算机间的通信而设计的一组规则,它规定了通信时信息必须采用的格式和这些格式的意义网络协议TCP/IP协议:IP协议、TCP协议名称的组合通过局域网访问互联网,就要详细设置IP地址,网关,子网掩码,DNS服务器等参数NetBEUI:是一种短小精悍、通信效率高的广播型协议,不需要进行设置,适合于在“网络邻居”传送数据IPX/SPX协议:联机的游戏都支持IPX/SPX协议,这些游戏通过IPX/SPX协议更省事,因为根本不需要任何设置(比TCP/IP省事)常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议网络协议网络协议的层次结构如下:{此为ISO(国际标准化组织)制定的OSI网络协议七层模型}物理层物理连接,电缆,网卡,串口并口数据链路层以帧为单位传输数据,主要任务是建立数据封装及链接网络层网络网络之间的通信问题,提供路由,即最佳路径传输层解决传输数据质量问题,提供可靠的端到端的数据传输会话层会话连接到传输连接的映射,数据传送,会画连接的恢复和释放,会画管理,令牌管理和活动管理表示层数据语法转换,语法表示,数据压缩和数据加密应用层直接面对用户的具体应用,包含用户应用程序执行通信任务所需要的协议和功能网络协议:TCP/IPOSI应用层应用层表示层会话层主机到主机层(TCP)传输层网络层(IP)网络层网络接口层数据链路层物理层TCP/IP结构对应OSI结构网络拓扑结构网络拓扑结构分为3种:总线型,星型,环型总线型星型环型定义在计算机网络中指设备和线路的安排或布局在地理网络中指网络要素之间的连接(即计算机是以何种方式连接在一起的)网络拓扑结构总线型拓扑结构:所有计算机连接在一根总线上每个节点网络接口板硬件均具有收、发功能接收器接收总线上串行信息并转换成并行信息送到PC工作站发送器是将并行信息转换成串行信息后广播发送到总线上总线上发送的目的地址与某节点的接口地址相符时,该节点的接收器便接收信息只要一段线路发生故障,整个网络会瘫痪(现在不怎么用了)网络拓扑结构星型拓扑结构(现在最流行的):网络有中央节点,其他节点(工作站、服务器)都与中央节点直接相连中央节点(中央节点相当复杂,负担比各节点重)执行集中式通信控制策略,在星型网中任何两个节点要进行通信都必须经过中央节点控制中央节点的主要功能有三项:1检查是否有空闲的通路,从而建立双方的物理连接2能维持通信通道3能拆除通信通道中心系统一旦损坏,整个系统便趋于瘫痪网络拓扑结构环型拓扑结构(这种结构消除了端用户通信时对中心系统的依赖性):abcde五个节点组成的环型结构,数据由a到d时路径为a-b-c-d-e-ad接收到数据后,在数据上做一个标记,传给e,再传给a,a则知道d接收到了数据可靠性低,一个节点故障,将会造成全网瘫痪IEEE802.15.4两个名词:个人区域网络(personalareanetwork,PAN)无线个人区域网络(wirelesspersonalareanetwork,WPAN)IEEE802.15.4标准定义的LR-WPAN网络具有如下特点:(1)不同的载波频率下实现了20、40、250kbps三种不同的传输速率(2)支持星型和点对点两种网络拓扑结构(3)有16位和64位两种地址格式(4)支持冲突避免的载波多路侦听技术(CSMA-CA)(5)支持确认(ACK)机制,保证传输可靠性定义IEEE802.15.4描述了低速率无线个人局域网的物理层和媒体接入控制协议IEEE802.15.4点对点网络的形成任意两设备只要能彼此收到对方的无线信号,就可以进行直接通信,不需要其他设备的转发但点对点网络中仍然需要一个网络协调器,不过该协调器的功能不再是为其他设备转发数据,而是完成设备注册和访问控制等基本的网络管理功能。由点对点传输方式构成了网状网拓扑结构设备发送数据给协调器、协调器发送数据给设备、对等设备之间的数据传输(星型拓扑网络中只存在前两种数据传输方式,因为数据只在协调器和设备之间交换;而在点对点拓扑网络中,三种数据传输方式都存在)前面提到IEEE802.15.4支持星型和点对点两种网络拓扑结构IEEE802.15.4IEEE802.15.4标准只定义了PHY层和数据链路层的MAC子层(数据链路层进一步划分为MAC和LLC两个子层,MAC子层使用物理层提供的服务实现设备之间的数据帧传输)PHY层由射频收发器以及底层的控制模块构成MAC子层为高层访问物理信道提供点到点通信的服务接口MAC层帧结构的设计目标是用最低复杂度实现数据可靠传输每个MAC子层的帧都由帧头、负载和帧尾三部分组成#帧头由帧控制信息、帧序列号和地址信息组成#负载(数据)具有可变长度,具体内容由帧类型决定#帧尾是帧头和负载数据的16位CRC校验序列MAC子层以帧为单位传输数据IEEE802.15.4IEEE802.15.4网络共定义了四种类型的帧:信标帧,数据帧,确认帧和MAC命令帧1)信标帧信标帧的负载数据单元由四部分组成:超帧描述字段、GTS分配字段、待转发数据目标地址字段和信标帧负载数据2)数据帧数据帧用来传输上层发到MAC子层的数据,它的负载字段包含了上层需要传送的数据3)确认帧如果设备收到请求位被置1,设备需要回应一个确认帧,确认帧的序列号应该与被确认帧的序列号相同,并且负载长度应该为零4)命令帧MAC命令帧用于组建PAN网络,传输同步数据等,主要完成三方面的功能:把设备关联到PAN网络,与协调器交换数据,分配GTSIEEE802.15.4IEEE802.15.4的协议栈架构应用程序通过它和协议层进行交互来实现MCPS/MLME的请求和确认,消息的标识和回应协议层和更底层的硬件以及寄存器进行交互应用程序通过API和芯片上集成的外围设备(如AD,DA,Timers...)进行交互应用程序通过板卡API和传感器板或者控制器板访问板卡上的设备硬件层产生各种中断通过中断句柄将其转发给各个软件模块IEEE802.15.4IEEE802.15.4网络的建立过程首先,每个设备的协议栈必须要对其PHY和MAC层初始化每个网络必须有一个也只能有一个PANCo-ordinatorPANID作为网络标识,可以被人为的预定义除64位IEEEMAC地址外,还须分配一个16位的短地址例如Zigbee技术选择2.4GHz设备以Co-ordinator的模式启动,然后就开放请求应答有可以利用的Co-ordinator,设备就可以申请加入网络设备被Co-ordinator接受,将获得短地址作为标识,便可传输数据zigbeeZ-Stack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式如果同时有几个事件发生,判断优先级,逐次处理事件这种软件构架可以极大地降级系统的功耗Zigbee协议栈TI公司开发的Z-Stack是ZigBee协议栈,并且经过了ZigBee联盟的认可而为全球众多开发商所广泛采用(下面我们重点讨论Z-Stack,我们没必要弄懂zigbee协议栈所有源代码,所谓开发或应用主要是对主函数及操作系统的修改应用,许多库函数据项目要求而做修改即可)TI公司的Z-Stack协议栈装载在一个基于IAR开发环境的工程里定义Zigbee是IEEE802.15.4协议的代名词,根据这个协议规定的一种短距离、低功耗的无线通信技术zigbee整个Z-stack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段Z-Stack实际上是帮助程序员方便开发ZigBee的一套系统整个Z-Stack采用分层的软件结构硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现术语API:实现应用程序与操作系统之间通信,告诉操作系统要执行的任务的接口。API之主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码(个人理解为类似于子函数)zigbeeZ-stack流程图zigbeeintmain()主函数实现硬件的初始化其中包括关总中断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的寄存器(比如说哪些I/O口与什么硬件相连)协议栈已经放在了库文件当中,是通用文件main函数存在于Zmain函数当中,先是从main函数开始运行的,main函数实现的功能是,初始化硬件、初始化网络(加入/创建网络)、初始化任务列表、进入任务处理循环主函数zigbee顺利完成上述初始化后,开中断执行osal_start_system()函数开始运行OSAL系统该任务调度函数按照优先级检测各个任务是否就绪,如果存在就绪的任务则调用tasksArr[]中相对应的任务处理函数去处理该事件,直到执行完所有就绪的任务如果任务列表中没有就绪的任务,则可以使处理器进入睡眠状态实现低功耗osal_start_system()一旦执行,则不再返回Main()函数OSAL系统zigbeeOSAL是协议栈的核心Z-stack的任何一个子系统都作为OSAL的一个任务,因此在开发应用层的时候,必须通过创建OSAL任务来运行应用程序通过osalInitTasks()函数创建OSAL任务,其中TaskID为每个任务的唯一标识号任何OSAL任务必须分为两步:一是进行任务初始化二是处理任务事件OSAL程序流程图zigbee一、任务初始化主要步骤如下:(1)初始化应用服务变量。constpTaskEventHandlerFntasksArr[]数组定义系统提供的应用服务和用户服务变量(2)分配任务ID和分配堆栈内存voidosalInitTasks(void)主要功能是通过调用osal_mem_alloc()函数给各个任务分配内存空间,和给各个已定义任务指定唯一的标识号(3)在AF层注册应用对象通过填入endPointDesc_t数据格式的EndPoint变量,调用afRegister()在AF层注册EndPoint应用对象。通过在AF层注册应用对象的信息,告知系统afAddrType_t地址类型数据包的路由端点zigbee(4)注册相应的OSAL或者HAL系统服务在协议栈中,Z-stack提供键盘响应和串口活动响应两种系统服务,但是任何Z-Stask任务均不自行注册系统服务,两者均需要由用户应用程序注册二、处理任务事件:处理任务事件通过创建“ApplicationName”_ProcessEvent()函数处理。一个OSAL任务除了强制事件(MandatoryEvents)之外还可以定义15个事件。SYS_EVENT_MSG(0x8000)是强制事件。该事件主要用来发送全局的系统信息,包括以下信息: