摘要
通过分析ZigBee和WiFi协议,结合嵌入式技术,提出了一种实现双模无线网关的方案。借助于ZigBee2007,自定义通信传输协议帧,设计 Linux和CC2530F256串口传输协议。其次,建立通信模型,进行协议解析,实现协议转换。最后设计系统软件,验证双模无线网关可行性。
近年来,随着通信技术的发展,无线信息的传递越来越稳定可靠,其纠错能力和抗干扰能力也越来越强。尤其随着物联网的蓬勃发展,无线通信技术凭借其自身的便捷性,也越来越受人们的青睐与重视[1]。
基于IEEE802.15.4标准的ZigBee协议具有自组织、稳定性好、抗干扰性强、功耗低等优点,主要应用于农业、工业检测、军事和医疗等方面。但其控制中心多是PC,不能适应野外等特殊环境。WiFi作为一种越来越普及的无线通信技术,凭借覆盖范围广、无需布线等优点,广泛存在于人们的生产生活中。以此提出一种适应于复杂环境的双模无线网关设计方案,具有良好的应用性和前瞻性[2]。
1 系统总体结构
系统由ZigBee模块、开发板模块和WiFi模块组成。ZigBee模块中,Coordinator作为ZigBee网络的中心节点,负责控制和监测ZigBee路由节点,每一个路由节点携带一个传感器,负责把传感器采集的数据发送给Coordinator。开发板模块作为协议转换的枢纽,用于解析 Coordinator传输的数据。WiFi模块,将开发板解析的数据封装成WiFi帧。这样就实现双模无线网关的转换,系统结构如图1所示。
图1 系统总体结构
2 无线网关的设计
2.1 ZigBee数据流分析
ZB253002模块是基于TI公司CC2530F256芯片,执行ZigBee2007/PRO协议的 ZigBee模块,它具有ZigBee协议的全部特点。其主要的特点:
①自动组网。所有的模块通电即自动组网,协调器(Coordinator)自动给所有的节点分配地址,不需要用户手动分配地址,网络加入、应答等专业ZigBee组网流程[3]。
②简单数据传输。ZB253002模块可以理解为“无线的 RS232 连接”,通过串行端口即可在任意节点间进行数据传输。ZigBee模块有两种数据的传输方式:数据透明传输,只要传送的第一个字节不是0xFE、0xFD 或0xFC,则自动进入数据透明传输方式;点对点的数据传输方式,数据传输的格式为0xFD(数据传输命令)+ 0x0A(数据长度)+(目标地址)+(数据)。由协调节点传输给开发板的数据添加以0xFE开头的15字节的节点信息,用来提供给 TI Sensor Monitor,观察网络结构。
Zigbee模块设置命令表如表1所列。
表1 Zigbee模块设置命令表
2.2 通信协调器的设计
Coordinator是整个网关转换和无线传感器网络建立的中心,是数据传输的中心枢纽。因此,Coordinator的设计关系到整个系统的稳定性和可靠性。Coordinator CC2530采用ZigBee2007协议栈。ZStack是TI公司提供的一种轮询式操作系统,借助于Z-Stack,Coordinator上电后,首先进行硬件和网络初始化,然后创建3个任务:①ZigBee网络任务,该任务通过Coordinator与其子节点的“绑定”完成。其绑定的过程,协调器建立网络,创建绑定表,并设定允许绑定模式,子节点发送绑定请求,Coordinator更新绑定表并响应子节点。②串口协议解析任务,该任务用于解析来自开发板和子节点的数据,并将解析后的数据传输给子节点任务或发送给开发板[4]。③子节点任务,该任务主要用于接收子节点返回的数据,并将数据传输给串口协议解析任务。这样ZigBee协议帧的解析就转到开发板端,由Linux操作系统完成,Linux解析完成后,将有效的数据放入指定的共享内存。当 BOA收到外部Web请求,调用相应的CGI获取共享内存中的数据,并经由无线网卡以WiFi的形式传送给用户。
2.3 传输协议的实现
本设计经由Linux操作系统完成ZigBee协议的解析和WiFi协议帧的形成,主要的重点在于Coordinator与Linux串口传输协议的设计。串口传输协议自定义帧格式如下:
自定义帧的格式由帧头、功能号、有效数据长度、有效数据和FCS校验5部分组成。帧头定义为0x02;功能号因获取的数据类型不同而异,有关帧格式功能码定义如表2所列;有效数据长度用于标识读取有效数据的长度范围,最大值为255;有效数据存放ZigBee协议帧;FCS校验用于数据段的校验。
表2 协议帧功能码
根据设计中的自定义帧格式,报文中的有效数据被封装成固定格式,通过串口进行传送。开发板和Coordinator通过监听串口数据分别对收到得数据包进行解析。解析流程(以Coordinator为例)如图2所示,具体解析过程如下。
Step1:Coordinator监听串口(以中断的方式),直到串口有数据。
Step2:读取一个字节,判定是否为自定义帧头。若不是,丢弃数据,回到Step1。
Step3:读取两个字节,匹配功能码。匹配失败,置错误标志位,丢弃数据,回到Step1。
Step4:读取一个字节,若该字节数据为0,则直接跳到Step6。
Step5:若读到的数据值为N(0 Step6:读取两个自己数据,对Step1~5读到得数据FCS校验,若无差错,发送N个字节的有效数据给Z-Stack协议栈,由ZStack协议栈发送给子节点。回到Step1。
Step7:若FCS校验错误,置错误标志位,丢弃已读数据,回到Step1。
图2 串口协议解析流程图