基于PIC单片机的CAN-以太网协议转换器的设计
2009-02-23
作者:苏义鑫1, 王 军1, 何 力2
摘 要: 为了通过以太网远程监控基于CAN总线的工业控制系统,设计了一个CAN-以太网协议转换器。TCP/IP传输层的协议选择UDP协议,用单片机实现CAN与UDP协议之间的转换。
关键词: CAN; UDP; 协议转换; 单片机
随着计算机技术、现场总线技术及信息技术的发展,CAN(Controller Area Network)总线在工业控制中的应用越来越普遍。CAN总线能实现现场各类仪表相互间的通信,但其远程通信能力较弱。而以太网作为当今的主流网络,具有很强的远程通信能力。为了融合这两类网络的技术优势,实现CAN总线网络与以太网的数据互联,必须设计CAN-以太网协议转换器。
本文提出一种设计CAN-以太网协议转换器的方法,用16位PIC单片机设计一种CAN总线协议与TCP/IP协议的转换网关。由于所针对的传输层协议是UDP(User Datagram Protocol),因此,实际上设计的是CAN总线协议与UDP协议的转换网关。
1 CAN-以太网协议转换器的系统结构
系统主要由CAN通信模块、以太网通信模块和协议转换模块三部分构成,通过一个16位的PIC单片机相连。CAN通信模块主要用于采集现场仪表的数据和与协议转换模块之间的数据传递;以太网通信模块主要负责协议转换模块与以太网之间的数据传输;协议转换模块是将CAN协议数据包与UDP协议数据包进行转换。
当现场仪表有数据要传送到以太网上的工控机时,CAN通信模块会采集CAN节点的数据,放入数据缓冲区;协议的转换由PIC单片机完成,它将数据缓冲区CAN协议数据包转换成UDP协议数据包,最后由以太网通信模块发送给以太网。当控制命令或数据要从以太网传送给现场仪表时,以太网通信模块将接收以太网上的数据包,并放入数据缓冲区;然后协议转换模块把从以太网上接收到的UDP协议数据包转换成CAN协议数据包;最后通过CAN通信模块,将数据包发送给相应的现场仪表,从而实现对现场仪表的远程控制。
2 硬件设计
CAN-以太网协议转换器的硬件主要由两部分组成:CAN通信模块接口电路和以太网通信接口电路。协议转换主要通过单片机进行编程实现。
2.1 CAN通信模块接口电路设计
CAN通信接口电路主要由主控芯片PIC24FJ64GA008、CAN总线控制器SJA1000、CAN总线收发器82C250和高速光耦6N137组成,其接口电路如图1所示。PIC24FJ64GA008单片机初始化CAN总线控制器SJA1000,并通过读写SJA1000的数据缓冲区实现CAN帧信息的接收和发送。CAN总线控制器SJA1000实现CAN总线数据链路层协议。总线收发器82C250将CAN协议控制器与物理通信线路连接在一起。高速光耦6N137用于隔离,起到保护SJA1000型CAN总线控制器的作用。接口电路主要用到了单片机的并行主控端口模块,它能够很方便地实现与并行外设的连接。通过对并行端口控制寄存器(PMCON)和并行端口模式寄存器(PMMODE)进行适当的配置,使并行主控端口模块的8位地址线与数据线复用,并提供锁存信号PMALL、片选信号、读信号、写信号PMWR[1]。连接时将SJA1000的AD7~AD0脚与单片机的PMD[7..0]相连,用于传送地址和数据。单片机通过引脚PMALL、、控制SJA1000的ALE、引脚,实现对SJA1000的读写控制。若片选信号与SJA1000的片选引脚相连,使SJA1000的基地址为0X8000,则SJA1000内部的32个寄存器的地址为:0X8000~0X801F。单片机的引脚与SJA1000的引脚INT相连,由于SJA1000的引脚是集电极开路输出,因此需要加上拉电阻,这样单片机就可以通过中断方式读写SJA1000中的数据缓冲区[2]。
2.2 以太网接口电路设计
以太网接口电路用到的主要芯片有单片机PIC24FJ64GA008、以太网控制器RTL8019AS、锁存器74LS373、存储器93LC46、隔离滤波器20F001N。RTL8019AS是台湾Realtek公司生产的以太网控制器,符合Ethernet II和IEEE802.3标准,收发速率可同时达到10Mb/s,内部有16K BRAM。接收数据和发送数据需通过DMA(Direct Memory Access)读写RTL8019AS的内部RAM来实现,单片机读写RAM时使用的是远程DMA,RTL8019AS读写RAM时使用的是本地DMA。其接口电路如图2所示[3],图中,RTL8019AS的数据线SD[7..0]与单片机的PMD[7..0]相连,地址线SA9、SA8与PMCS1相连,低五位地址SA4~SA0与74LS373的Q[4..0]相连。93LC46是三线SPI串行接口EEPROM,主要保存RTL8019AS的配置信息,其00H~03H地址空间用于存储RTL8019AS的配置寄存器CONFIG1~4的初始化值;04H~11H地址空间存储网络节点的地址;12H~7FH地址空间存储即插即用的配置信息。若00H单元的值为0X00,RTL8019AS在复位后会自动读取93LC46,这样配置寄存器CONFIG1的值为00H,低四位IOS3~0的值为0,而当IOS[3..0]=0时,RTL8019AS的I/O端口的基地址为300H。因为RTL8019AS的地址为20位,所以其I/O口的地址空间为00300H~0031FH。据此,在接线时将SA19~SA10直接接地,SA9~SA8与PMCS1相连,SA7~SA5接地,当PMCS1=1时就可以选中芯片RTL8019AS。PMCS1是单片机的ADDR14,因此,RTL8019AS的内部地址空间00300H~0031FH的外部映射地址是4000H~401FH。RTL8019AS的IOCS16B引脚通过27k?赘的电阻下拉接地,将数据总线定义为8位[2,4]。
RTL8019AS内置了10BASE-T收发器,可以通过双绞线进行以太网通信。TPIN±为接收线,TPOUT±为发送线,经隔离滤波器20F001N后分别与RJ-45的RX±、TX±相连接。
LED0和LED1各接一个发光二极管以反映通信状态,LED0被点亮表示通信冲突,LED1被点亮表示收到了网上的数据包。
3 软件设计
软件主要分为三部分:CAN通信程序、以太网通信程序和CAN-UDP协议转换程序。软件设计的整体思路为:当现场仪表有数据要发送到以太网时,首先由CAN通信程序采集现场仪表的CAN协议数据包,并存放在缓冲区Buffer1中,然后调用CAN-UDP协议转换程序将CAN协议数据包封装成UDP数据包,最后由以太网通信程序发送到以太网的应用层。反之,当以太网上的数据要发送给某个CAN节点时,以太网通信程序首先将以太网传输层的UDP数据包放入缓冲区Buffer2,然后调用协议转换程序将UDP数据包转换成CAN协议数据包,最后调用CAN通信程序将缓冲区Buffer2中的数据发送到CAN总线上的指定节点。
3.1 CAN通信程序
CAN通信网络是根据CAN协议2.0A构建的,SJA1000工作在BasicCAN模式。CAN通信程序主要由以下几部分构成:SJA1000初始化程序Config_SJA1000( )、读写SJA1000内部寄存器程序Read_SJA1000( )和Write_SJA1000( )、CAN发送程序BCAN_DATA_SEND( )、CAN接收程序BCAN_DATA_RECEIVE( )。
Config_SJA1000( )程序主要完成波特率的设置、CAN节点地址的设定、验收屏蔽寄存器AMR的设置、中断寄存器IR的设置以及命令寄存器CMR的设置。为了确保CAN通信正常,CAN总线所有节点的波特率必须相同。当发送CAN协议数据包给CAN节点时,执行BCAN_DATA_SEND( )函数,该函数通过调用Write_SJA1000( )子程序,将待发送的数据写入CAN的数据发送寄存器,从而实现发送。当SJA1000接收到CAN节点的数据时,通过单片机的外部中断INT2向单片机申请中断,单片机在INT2的中断服务程序中会调用CAN接收程序,由CAN接收程序调用Read_SJA1000( ),将SJA1000数据接收缓冲区中的数据读到单片机的数据缓冲区Buffer1中。
3.2 CAN-UDP协议转换程序
CAN-UDP协议转换程序主要负责将数据缓冲区Buffer1中的CAN协议数据包封装成UDP数据包;同时也会从以太网的传输层上接收UDP数据包,然后封装成CAN协议数据包,存入数据缓冲区Buffer2。UDP协议的帧格式如图3所示。
源端口号(2B):发送进程的端口,即假定在没有其他信息的情况下,返回信息应该向什么地方发送。
目标端口号(2B):UDP数据包的接收端号。
数据报长度(2B):包括报头和数据报在内的总字节数。
校验值(2B):对IP头、UDP头和数据中信息包头的数位取反之和再取反。源端口号、目标端口号、数据报长度和校验值构成UDP报头。
UDP数据:是实际的传输信息,数据的最大长度可达到65 527 字节。在传输过程中数据字节设为8B,且第一个数据字节为CAN节点的地址。CAN数据包帧格式如图4所示。
地址(1B):8位标识符,表示发送数据或接收数据的节点地址。字节数(1B):数据报和校验和的字节数之和,固定值设为8。数据报(8B):前7个字节为传送的实际信息,第8个字节为校验和。
将UDP协议数据包转换成CAN协议数据包时,单片机将UDP数据包的报头去掉,将第1个数据字节作为CAN协议包的第1个字节,UDP的第3个数据字节~第10个数据字节作为CAN协议包的第3字节~第10字节,UDP的第2个数据字节作为CAN协议包的第2个字节,固定值设为8,最后将转换好的数据包发送出去。将CAN协议数据包转换成UDP协议数据包时,单片机要给UDP协议数据包加上报头。数据报的转换过程与上述过程类似,不再赘述。
3.3 以太网通信程序
以太网通信程序主要由RTL8019AS的初始化程序、数据接收函数和数据发送函数组成。系统上电后,先执行RTL8019AS的初始化程序,该子程序主要是对RTL8019AS中第0页和第1页的相关寄存器进行设置;然后程序对RTL8019AS数据发送寄存器、接收寄存器进行检测,当数据缓冲区Buffer1有数据向以太网发送时,单片机通过远程DMA通道将数据送到RTL8019AS的RAM中,然后发出传送命令;之后RTL8019AS启动本地DMA,将数据发送到以太网上。 反之,当以太网上有数据要传给CAN节点时,先启动本地DMA,将网上的数据读到RTL8019AS的RAM中,然后单片机通过远程DMA通道将RAM中的数据读到缓冲区Buffer2。
本文设计了一款价格低廉、性能可靠的CAN—以太网协议转换器,为部分工业控制系统的远程监控设计提供了一种新的选择方案。
参考文献
[1] Microchip Technology Inc.PIC24FJ128GA系列数据手册.2006.
[2] Philips Semiconductors. SJA1000 datasheet.2000.
[3] 曹宇,魏丰,胡士毅.用51单片机控制RTL8019AS实现以太网通讯[J]. 电子技术应用,2003,29(1):21-23.
[4] REALTEK. Realtek RTL8019AS datasheet.2005.