基于嵌入式技术的多协议转换系统研究

2020-03-26 08:50刘亚秋胡铁楠吕云蕾
仪表技术与传感器 2020年2期
关键词:缓冲区总线芯片

刘亚秋,胡铁楠,吕云蕾

(东北林业大学信息与计算机工程学院,黑龙江哈尔滨 150040)

0 引言

现场总线技术在工业控制领域起着重要的作用,多种通信协议和总线并存,在市场均有自己的产品,各种总线标准和协议差异较大,给不同厂商产品互连互通带来困难,使得通信网络的开放性受到影响。由于每种标准和协议均有各自的优点和应用领域,已经应用某种标准和协议的产品用户在将来升级改造中为了降低投资费用和维护成本,希望选择同类产品,而不愿采用其他协议和标准产品,由于这些因素的存在,很难使通信标准和协议统一[1]。因而多协议转换成为解决该问题的有效方法,国内外对于多协议转换的研究也已经有了不少的成果,文献[2]基于S3C2440处理器实现了MQTT 与UART、CAN、RS485和RS232等协议间的相互转换。文献[3]设计了一个基于ARM加交换芯片的协议转换器来完成同步串行协议到网络通信协议的转换,经过交换芯片的端口转发到达客户端完成SPI到TCP协议的转换。文献[4]基于ARM Cortex-A8内核的主控模块、CC2530的ZigBee模块和无线通信模块等设计一个能够将异构的智能家居设备进行无缝集成的智能型网关。文献[5]提出了一种基于低功耗无线通信的多协议网关系统,通过有线和无线网络实现对现场情况的实时监测和控制。

本文针对多种标准通讯困难的情况,对常用的LIN总线协议和CAN总线协议,以及接口简单且支持广泛的RS485总线协议之间转换的总体方案、不同总线协议的标识问题和转换系统的实现进行了分析和研究,开发了一种LIN总线协议和CAN总线协议与RS485总线之间双向转换的多协议转换系统。

1 多协议转换系统模型

目前国际上有繁多的现场总线标准,不同厂商生产开发的加工设备支持不同标准的协议接口,对不同加工设备之间的互联带来极大的不便。该问题解决方案可有以下两种:使管理系统支持多种不同的总线接口以挂接不同的加工设备;实现协议转换,管理系统提供单一总线协议接口,通过协议转换系统将多种不同总线协议转换成管理系统所支持总线协议,整个加工车间的参数数据通过该总线协议统一传输。第一种方案会加大管理系统的开发难度,增加资源管理系与各类加工设备之间的耦合性,不利于系统维护;因而本文实现第二种方案,通过协议转换将管理系统与加工设备彻底隔离,利于各个加工设备的添加、移除或者更换,解决不同协议通信困难问题。多协议转换系统网络通信总体构图如图1所示。

图1 网络通信总体构图

用户数据以某种总线协议传输,即是在用户数据前后加上该协议的帧头和帧尾,然后装载到特定的物理层上以一定的比特流进行发送,各种总线协议的不同之处在于帧格式以及在物理总线上的比特流。因而不同总线协议之间的转换,首先需要具备物理层的支持,以实现比特流的传输,在链路层,得到一帧数据后,需要对帧格式进行转换,去掉该总线协议的帧头和帧尾,提取出用户数据,再加上另一种总线的帧头和帧尾,装载到物理层上进行传输;多协议转换系统则是支持多种总线协议帧头和帧尾的拆分以及重组,即可实现多种异构协议之间的相互转换。本文设计的多协议转换系统一端仅支持RS485总线协议接口,RS485总线接口简单,一般计算机设备均支持,另一端支持CAN总线协议接口以及LIN协议接口,实现一对多协议转换,多协议转换系统总体模型如图2所示。

图2 多协议转换系统总体模型

通过专用的协议处理芯片来去掉和添加协议的帧头和帧尾,RS485总线协议数据帧进入多协议转换系统后,RS485总线协议处理芯片去掉RS485总线协议的帧头和帧尾,得到带有“标识头”的用户数据并写入RS485总线协议输入缓冲区,标识头标志着该数据接下来要以哪种协议发送出去,中央处理模块以LIN协议和CAN总线协议标识头为依据,去掉标识头将数据写入LIN总线协议和CAN总线协议的输出缓冲区,由其各自的协议处理芯片加上各自协议的帧头和帧尾,发送到远端;反向传输中,LIN总线协议和CAN总线协议数据帧进入多协议转换系统,去掉帧头和帧尾得到用户数据写入各自的输入缓冲区,中央处理模块将其加上各自的标识头写入RS485总线协议输出缓冲区,由RS485总线协议处理芯片加上其帧头和帧尾发送至管理系统。

2 多协议转换系统设计

本文研究的多协议转换系统通过嵌入式技术来实现。以嵌入式处理器作为多协议转换系统的中央处理模块,在其外围挂载CAN总线协议以及LIN协议的协议处理芯片;软件以Linux系统为平台,编写协议转换驱动程序。

2.1 多协议转换统硬件设计

多协议转换器要求能够实现LIN总线协议、CAN 总线协议和RS485总线协议之间的转换,在硬件上必须有各协议的硬件接口电路,并通过程序控制硬件实现多协议的解析,采用Exynos4412四核心微处理器作为整个多协议转换系统的主控器件,其外围扩展多种协议的接口电路。硬件总体方案如图3所示,多协议转换系统由CAN 总线接口电路、RS485总线协议接口电路及LIN接口电路、电源电路4部分构成,电源电路为Exynos4412微处理器基本单元电路及各接口电路供电,3种总线接口电路在Exynos4412微处理器统一协调下相互配合、有序运行,从而实现3种协议之间的转换。

图3 硬件总体方案

LIN总线协议接口采用高性能RS232线路驱动器/接收器SP232EEN芯片与LIN总线协议收发器TJA1020芯片组合构成,TJA1020收发器是LIN主从协议控制器与本地互连网络(LIN)中的物理总线之间的接口,主要用于使用2.4至20 Kbaud波特率的车载子网,其TXD输入端的协议控制器的发送数据流由LIN收发器转换为具有受控转换速率和波形整形的总线信号,以最小化EME。LIN总线输出引脚通过其内部终端电阻拉高[6-7]。由SP232EEN和TJA1020构成的LIN总线协议接口电路如图4所示,SP232EEN的T2IN和R2OUT引脚分别与TJA1020的TXD和RXD引脚相连。

图4 LIN总线接口电路

CAN总线协议接口采用GPIO扩展,选用MCP2515型号CAN总线控制器芯片,并选用与之配套的TJA1050型收发器,MCP2515是一个独立的控制器局域网控制器,可实现2.0规范的CAN规范,它能够发送和接收标准和扩展数据以及远程帧。MCP2515具有2个接受掩码和6个接收滤波器,用于滤除不需要的消息,从而减少主机MCU的开销。MCP2515通过工业标准串行外设接口SPI与微控制器连接[8-10]。由MCP2515 和TJA1050构成 CAN 总线接口电路如图5所示,MCP2515通过SPI接口与微控制器相连,TXCAN和RXCAN与TJA1050的TXD和RXD相连。

图5 CAN总线接口电路

RS485协议总线选用 MAX3485 芯片作为协议的收发器, MAX3485是一款RS-485收发芯片,工作电压为3.3 V,通信速率高达10 Mbps,符合RS-485、RS-422串行通信协议规定的电气特性,采用半双工串行通信工作模式,驱动器输出采用差分信号形式并且具有短路保护功能,同一总线上最多可以接 32个收发器,具有低功耗、高速率、可靠性高的特点[10-11]。RS485电路接口电路如图6所示。MAX3485 的 RO、DI 引脚分别与微控制器的RXD、TXD引脚相连,输出引脚 A、B 通过总线接线端子与总线相连。

图6 RS485总线接口电路

2.2 多协议转换系统软件设计

Exynos4412是四核心处理器,内部包含4个独立运行的CPU,为了充分利用Exynos4412的CPU资源,在硬件层上移植Linux操作系统,最多可以满足4个进程微观上同时运行,CAN总线协议、LIN总线协议以及RS485总线协议通过Linux驱动实现,建立设备节点文件,应用程序通过读写设备节点文件进行数据的传输[12-13]。

2.2.1 驱动程序设计

Linux驱动程序分为字符设备驱动、块设备驱动以及网络设备驱动,RS485总线协议、CAN总线协议和LIN协议属于字符驱动类,调用Linux系统字符驱动框架编写程序,以CAN总线协议为例,具体步骤如下:

(1) 构建CAN总线协议结构体Can_dev,其中包含字符设备对象cedv和缓冲区数组;

(2) 创建file_operations结构体对象Can_fops;

(3) 编写Can_init函数,创建Can_dev对象,并申请主设备号,绑定Can_fops对象;

(4) 编写Can_exit函数,删除Can_dev对象,并释放主设备号;

(5) 编写Can_open、Can_read、Can_write并将其赋值给Can_fops对象中的open、read、write函数指针;

(6) 编译代码,生成Can_driver.ko文件。

Can_read函数部分代码如下:

static ssize_t can_read()

{

struct can_dev *dev = filp->private_data;

flag = *GPK1DAT & (0x1);

if(flag == 0){

len= CAN_Receive_Buffer(dev->CAN_RX_Buf);

if(len <= 0)

{

if (filp->f_flags & O_NONBLOCK)

return -EAGAIN;

}

copy_to_user(buf,dev->CAN_RX_Buf,len);

return len;

}

else return -EAGAIN;

}

Linux设备驱动一般包含阻塞以及互斥机制,使得进程在竞争资源失败或者竞争资源成功但资源不可用时放弃CPU使用权进入睡眠状态,当其可获得资源时被唤醒;但从睡眠到唤醒需要消耗时间,影响信息传递的及时性,因此设计CAN总线协议驱动、LIN协议驱动以及RS485总线协议三者独立,不存在资源竞争问题,不需要互斥机制,因而为总线协议建立进程,采用非阻塞方式读写,提高信息传递的及时性。

2.2.2 应用程序设计

应用程序读取RS485总线协议缓冲区数组数据,识别出是哪种总线数据,并写入CAN总线协议或LIN协议输出缓冲区,调用设备驱动完成数据的发送,反之读取CAN总线协议或LIN协议缓冲区数组数据,添加相应标识头,写入RS485总线协议输入缓冲区,完成数据的接收。应用程序为三者数据的收发建立进程,无进程休眠、抢占,克服Linux系统实时性较差的问题。CAN总线协议数据收发程序流程图如图7所示。

图7 CAN总线协议程序流程图

进程调用open函数打开RS_driver和Can_drvier设备文件,获取文件标识符并分别保存在fd0和fd1变量中,然后通过两个文件标识符不停以非阻塞方式调用write和read函数,该函数会调用CAN总线协议设备驱动中的Can_write和Can_read函数将数据写入或读入相应的缓冲区;期间调用Rem_ident ()和Add_ident()函数去掉和添加相应的标识头,保证能够识别是哪种协议数据,CAN总线协议部分代码如下:

int main(void)

{

fd0=open("/dev/RS_drvier",O_RDWR|O_NONBLOCK);

fd1=open("/dev/Can_drvier",O_RDWR|O_NONBLOCK);

while(1)

{

len = read(fd0,Buff_rs_in,sizeof(Buff_rs_in));

if(len !=0){

Buff_can_out = Rem_ident(Buff_rs_in);

write(fd1,Buff_can_out,sizeof(Buff_can_out));

}

len = read(fd1,Buff_can_in,sizeof(Buff_rs_in));

if(len != 0){

Buff_rs_out = Add_ident(“can”,Buff_can_in);

write(fd0,Buff_net_out,sizeof(Buff_can_out));

}

}

}

进程一旦运行就进入死循环永不终止,且进程以非阻塞方式读写不会睡眠,将不间断的对数据进行收发以保证信息传递的及时性。

3 实验测试

本实验以Exynos4412嵌入式开发板为硬件平台,外接RS485总线、CAN总线以及LIN总线接口电路;搭建Linux操作系统为软件平台,编写RS485协议、CAN总线协议以及LIN协议的驱动程序,并编写应用程序进行多协议之间数据的收发。

多协议转换系统的RS485总线协议接口连接上位机,CAN总线协议接口以及LIN总线协议接口分别连接两个单片机,并将单片机的串口连接PC机;上位机通过RS485总线协议向多协议转换系统发送数据,多协议转换系统又将数据分别通过CAN总线协议和LIN总线发送给两个单片机,反之两个单片机分别通过CAN总线协议和LIN总线协议发送数据到多协议转换系统,多协议转换系统又将数据通过RS485总线协议发送到上位机。

单片机通过CAN总线协议和LIN总线协议依次发送的数据如表1所示,上位机通过RS485总线协议分别发送给CAN总线协议和LIN总线协议的数据如表2所示。

表1 CAN总线协议和LIN总线协议发送数据

表2 RS485总线协议发送数据

CAN总线协议和LIN总线协议收发的数据以‘01’和‘02’为数据标识头,标识为各自数据,多协议转换系统通过“01”和“02”为数据标识头来识别数据。上位机通过cutecom工具显示接收到的来自CAN总线协议和LIN总线协议的数据,单片机通过串口连接PC机,在PC机上通过串口助手显示接收到的来自RS485总线协议的数据。CAN总线协议和LIN总线协议接收到的数据如图8、图9所示,RS485总线协议接收到的数据如图10所示。

图8 CAN总线协议接收数据

图9 LIN总线协议接收数据

图10 RS485总线协议接收数据

多次发送数据进行实验,图8和图9中两种总线协议接收到的数据分别与表2中RS485总线协议发送的两种标识头数据所对应,可见数据可以正确传输,且没有RS485总线协议所发送的标识头,多协议转换系统通过标识头分辨数据,并去掉标识头将数据分别通过CAN总线协议和LIN总线协议发送给单片机。图10中RS485总线协议接收到的数据与表1中 CAN总线协议和LIN总线协议发送的数据一一对应,可见数据同样可以正确传输,且多出了“01”和“02”标识头来标识两种总线协议数据,多协议转换系统将两种总线协议加上各自的标识头通过RS485总线协议发送给上位机,上位机可通过标识头识别两种总线协议,以做进一步处理。

4 结束语

本文针对工业生产中不同通信协议中间通信困难问题,研究了一种用于工业的多协议转换模型,并基于嵌入式技术设计了多协议转换系统的软硬件构成。通过Exynos4412嵌入式开发板以及RS485总线、CAN总线和LIN总线接口搭建硬件平台;移植Linux操作系统搭建软件平台并编写总线协议驱动程序和应用程序。通过连接上位机与单片机收发3种总线协议的数据,实验结果表明多协议转换系统数据传输的准确可靠性。本文所研究的多协议转换系统使得不同通信接口设备之间的通信变得简单可行,一定程度上解决通信协议异构的问题;同时可扩展为其他不同总线之间的多协议转换。

猜你喜欢
缓冲区总线芯片
芯片会议
人体微芯片
关于射频前端芯片研发与管理模式的思考
一种基于CAN总线的误码测试方法
基于ARC的闪存数据库缓冲区算法①
一类装配支线缓冲区配置的两阶段求解方法研究
CAN总线并发通信时下位机应用软件设计
基于CAN总线的水下通信系统设计
初涉缓冲区
宝马F02车总线系统