1、本栏目责任编辑:代影网络通信与安全Computer Knowledge and Technology电脑知识与技术第18卷第35期(2022年12月)第18卷第35期(2022年12月)CAN总线与Zigbee无线网络网关的设计与实现郭琪(延安大学附属医院 网络管理科,陕西 延安 716000)摘要:该文深入分析了CAN总线技术和ZigBee网络技术的技术特点,采用C8051F043和CC2430的双MCU结构设计了CAN/ZigBee网关,使得 CAN总线和ZigBee网络实现了并行交互数据的功能。CAN/ZigBee网关具有两个接口模块。CAN总线数据通讯使用C语言进行编程,完成通讯数据的
2、发送和接收功能。ZigBee网络接口模块的软件开发以ZigBee协议栈为基础。根据ZigBee的技术特点,软件编写时设计了地址映射表,以解决ZigBee节点地址动态分配给通信带来的问题并设计了缓冲区以保证在两个不同传输速率的网络之间进行数据传输。ZigBee网络接口模块的应用程序完成了ZigBee网络内数据收发、SPI接口通信以及地址映射表的建立和管理。通过验证,该文设计的网关实现了CAN总线与ZigBee无线网络之间的双向数据传输,并且数据传输不受ZigBee节点地址动态分配的影响。关键词:CAN总线;ZigBee;网关;数据传输;节点地址中图分类号:TP393文献标识码:A文章编号:100
3、9-3044(2022)35-0078-03开放科学(资源服务)标识码(OSID):1 概述CAN总线具有非常广泛的应用范围,具有效率高、可靠性强的特点。CAN总线通信采用数字信号代替了模拟信号,不仅节约了连线电缆的成本,而且可以传递更多的设备信息,如设备状态、运行参数、故障信息等。本文设计的CAN/ZigBee网关能够完成CAN总线和ZigBee网络收发通信,CAN总线实现无线通讯的设计目标。在CAN总线应用最为广泛的汽车电子领域,ZigBee技术的接入可以实现对转动机械或发动机内部的数据监测,如汽车的轮胎压力检测等1。针对工业控制领域,CAN总线也有CANopen和DeviceNet两个应
4、用层协议并有广泛的实际应用,ZigBee技术的引入同样会为其在特殊情况下的应用带来方便。一个高效可靠的CAN/ZigBee网关能够弥补CAN总线的通讯限制,增加ZigBee无线网络通讯的有效性,为我们的生产、生活带来更多的便利2。2 CAN/ZigBee网关硬件设计方案本文设计的CAN与ZigBee网关采用的是CC2430和C8051F043的双MCU结构,分别作为CAN协议和ZigBee协议的控制芯片,将两个网络的数据收发以及数据处理等操作分开进行3。CAN与ZigBee网关的数据通讯采用双向并行模式,应用两个单片机完成数据交互总体结构,网关由CAN总线和ZigBee接口模块组成。CAN与Z
5、igBee网关结构如图1所示。图1 CAN与ZigBee网关结构图CAN总线网络接口模块主要完成CAN总线数据的收发,并与ZigBee网络接口模块实现双向通信。该模块选用的片上系统单片机C8051F043内部集成了Bosch CAN2.0B控制器,构成一个CAN总线节点,实现对总线数据的收发,单片机C8051F043负责接收和发送数据,由芯片TJA1050作为接口,同时该单片机还有晶振电路、电源电路、人机接口电路、USB接口扩展电路和JTAG接口电路。USB接口的扩展选用USB转RS-232桥接芯片CP2102实现,该接口可用于与上位机进行通信,方便后期开发过程中对网关软件进行调试。JTAG接
6、口的扩展是为了后期的软件调试4。ZigBee网络接口模块的主要功能包括ZigBee网络内数据的收发以及与CAN网络接口模块之间的双向通信。ZigBee网络接口模块由单片机执行数据处理,单片机选型为CC2430。该型号是国外公司研制用来解决ZigBee芯片通信的问题。本文选择的单片机型号具有射频收发器和8051控制器,硬件方面具有CSMA/CA扩展功能。要实现无线收发功能,外围晶振收稿日期:2022-04-06作者简介:郭琪(1985),男,陕西延安人,工程师,本科,主要研究方向为计算机网络安全。E-mail:http:/Tel:+86-551-65690963 65690964ISSN 100
7、9-3044Computer Knowledge and Technology电脑知识与技术Vol.18,No.35,December202278DOI:10.14004/ki.ckt.2022.2146网络通信与安全本栏目责任编辑:代影Computer Knowledge and Technology电脑知识与技术第18卷第35期(2022年12月)第18卷第35期(2022年12月)器通过射频功能实现数据的接收和发送,并使用非平衡变压器提高接收数据的有效性。CC2430的外围电路包括晶振时钟电路、人机接口电路、复位电路、EEPROM 存 储 器 扩 展 电 路 以 及 调 试 接 口 电
8、路 等。CC2430单片机内部集成的接口可用于后期的软件开发与调试。3 CAN/ZigBee网关软件设计方案3.1 地址映射表的设计与实现依据ZigBee无线通信协议栈的规定,ZigBee网络的数据传输通过PAN网内的短地址实现,该短地址在节点加入网络的时候由协调器节点进行分配5-6。ZigBee可以采用两种地址分配技术,分别是:(1)Distributed Address Assignment Mechanism 分布式地址分配技术(2)Stochastic Address Assignment Mechanism随机地址分配技术无论采用哪一种地址分配技术,ZigBee子节点每次加入网络分配
9、到的短地址都不同。因此,在ZigBee网络中除了协调器的短地址固定为0 x0000,其他节点的地址都不固定。这就导致出现类似下面的问题:(1)ZigBee网络中,节点A的短地址为0 x1699,节点B的短地址为0 x1697,两个节点分别利用短地址在网络中进行通信。(2)ZigBee网络重建,节点A和节点B再次加入网络并被分配短地址,节点A的短地址为0 x1697,节点B的短地址为0 x1699。这样,节点A和节点B在网络中的通信就会因前后两次地址的不同而出现问题。为了使ZigBee网络中向指定节点的信息发送正确,在网关软件设计中利用节点的长地址、短地址和节点代码建立一种映射关系,以实现Zig
10、Bee节点短地址变化后网络通信的正确进行。在协议转换中所建立的地址映射关系如表1所示。作为现场总线网络中接收数据的报文,网关之后对接收到的报文进行解包、有效数据提取等操作,并将其重新打包发送至ZigBee网络。表1 地址映射关系示例网关ZigBee16位短地址0 x0000网关接收CAN消息ID0 x000164位长地址0 x00000000000A0 x00000000000C0 x00000000000BSADDR0 x16990 x169A0 x1697节点代码0 x00010 x00020 x00033.2 CAN总线接口模块软件设计CAN总线接口模块的程序设计利用C51语言编程实现,
11、编程使用Silicon Laboratories IDE集成开发环境。该软件具有良好的人机界面,可以生成高效的目标代码。3.2.1 CAN总线接口模块初始化程序初始化通过调用单片机配置子程序config()、CAN初始化子程序canini()和SPI配置子程序spi_cfg(ucharspicfg,uchar spickr,uchar spicn)完成。单片机配置子程序中完成对C8051F043内部看门狗定时器的设置、I/O口交叉配置及系统工作时钟设置。SPI配置子程序完成SPI通信的时钟相位和极性的选择、串行时钟的设置以及串行通信中使用到的INT0和SPI中断的设置。所有 CAN 消息对象初
12、始化完成后,对寄存器CAN Control Register 和 Bit TimingRegister(波特率控制寄存器)赋值,寄存器CAN Control Register用来设置CAN的工作模式,Bit TimingRegister设置CAN的工作时钟频率。3.2.2 CAN总线接口模块数据收发程序CAN接口模块的数据收发分两部分完成:CAN总线数据的接收与转发和SPI数据的接收与转发。现场总线通过中断数据的方式进行数据的接收。网关识别到CAN报文后,将其存入接收缓冲区,再从缓冲区中读出数据进行SPI转发。SPI数据的接收与转发通过外部中断INT0的中断服务程序完成。由于 C8051F04
13、3 作为 SPI 主机工作,SPI接口必须由主机启动进行数据收发。CC2430向 C8051F043 发送数据时,通过 I/O 口给 C8051F043一个中断信号,再由C8051F043启动数据传输过程。3.3 ZigBee网络接口模块软件设计ZigBee网络接口模块软件设计采用协议栈的技术,通过参考标准的OSI/ISO网络模型,设计协议栈的网络结构。OSI/ISO网络模型分为七层网络构架。通过优化OSI/ISO网络模型,修改并重新命名了网络模型,协议栈的每一层网络完成不同的任务,任意两层之间通过网络接口为上一层提供服务。3.3.1 ZigBee网络接口模块初始化程序ZigBee接口模块的初
14、始化程序主要完成对芯片寄存器、芯片硬件接口、液晶屏和协议栈的初始化操作。初始化程序段执行后,网关即完成对CC2430内外部资源及的配置,然后使用aplFormNetwork()函数搭建网络。网络搭建完成后,执行程序进入循环模式,来完成ZigBee网络通信功能。3.3.2 ZigBee网络接口模块数据收发程序ZigBee接口模块的数据收发程序可分为SPI数据收发和ZigBee数据收发两部分。SPI接口的数据接收以中断方式进行。中断服务程序每次将收到的数据79本栏目责任编辑:代影网络通信与安全Computer Knowledge and Technology电脑知识与技术第18卷第35期(2022
15、年12月)第18卷第35期(2022年12月)存入缓冲区,收到完整的SPI数据包后W_Point指向缓冲区下一数据块。SPI接口的数据发送通过I/O口来控制C8051F043单片机实现。ZigBee数据的收发通过协议栈中特定函数完成。协议栈运行过程中,程序的循环执行部分会首先选取状态机中的通讯数据,检查能否接收ZigBee数据,收到相关数据后调用ZigBee接收子程序。4 网关通信的试验验证4.1 试验方案设计本文设计的 CAN/ZigBee 网关所要实现的是在CAN网络与ZigBee网络之间的双向通信,以验证本文设计的网关方案在实现协议转换方面的可行性。根据网关的设计原理,试验中ZigBee
16、采用星形网络拓扑,同时在星形网络内有3个RFD节点作为网关的子节点。CAN总线网络设计采用2+1的模式,即两个节点和一个物理总线,网关作为总线上的一个节点,另一个设计为具有收发能力的CAN节点。验证过程采用的试验网络如图2所示。其中构成CAN节点的主要芯片为C8051F043单片机和CAN收发器TJA1050,ZigBee节点采用的芯片为无线单片机CC2430。图2 网关试验网络示意图4.2 试验结果分析进行网关通讯性能测试之前,要利用软件SmartRF04 Flash Programmer 对 ZigBee 节点写入不同的物理地址,之后按前面所述的实验步骤 1进行ZigBee星形网络的组网过程。ZigBee网络组建后,利用CAN节点和ZigBee终端节点通过网关进行相互的数据发送。CAN节点的数据检验是经过查看Silicon Laboratories IDE的 CAN相关寄存器实现,CAN节点接收到数据 0 xAA445566778899F1,与 ZigBee 节点发送的数据一致。通过查看调试软件中的数据,ZigBee节点接收到数据 0 xA10 xA20 x150 x160 x17