目前工业设备之间的通信很多采用RS-232接口,但由于RS-232通信距离短、接口易损,而且只能进行点到点通信,不能直接组成多点通信网络。而CAN通信速率高、容易实现、且性价比高等诸多特点,本文介绍一种可以实现RS-232与CAN总线通信的方法,以更好地适应现代工业发展的需要。
控制器局域网CAN(Controller Area Network)是德国Bosch公司为解决现代汽车中众多的控制与测试仪器之间的数据交换而应用开发的一种通信协议。在国外,尤其是欧洲,CAN网络已被广泛地应用在汽车上,如BENZ、BMW、PORSCHE、ROLLS、ROYCE、JAGUAR等车。
它是一种串行通信网络,支持分布式实时控制,最大传输速度可达1 Mbids,最大传输距离为10 km。CAN规范已被ISO国际标准组织制订为国际标准,即CAN标准,现在最常用的是2.0标准,分为2.0A和2.0B。其区别仅在通信数据位数,前者是11位的标准帧,后者是29位的扩展帧。CAN协议建立在国际标准组织的开放系统互连参考模型基础上的,主要工作在数据链路层和物理层,用户可在其基础上开发适合系统实际需要的应用层通信协议。而串口RS-232作为标准计算机串行接口,与CAN网的结构、通信协议、传输特性等方面都不相同,所以不同设备间无法进行直接通信。因此实现二者之间的信息数据交互成为问题的关键。
本设计完成了CAN总线与RS-232软件设计。本设计的创新点是:CAN总线与RS-232接口数据通信速率以及通信帧格式都不同,解决了这两点不同,从而实现了数据在CAN总线与RS-232接口之间的交互传输。本文完成了基于C8051F040单片机控制的CAN与RS-232转换的研究与设计,设计了C8051F040单片机对RS-232串口和CAN总线的控制,解决了CAN总线与RS-232接口数据通信速率以及通信帧格式不同的技术问题,实现了RS-232接口数据与CAN总线数据的相互传输。
1 概述
1. 1 CAN总线
Silicon Labs CAN的工作位速率可达1M位/秒,实际速率可能受CAN总线上所选择的传输数据的物理层的限制。CAN处理器有32个消息对象,可以被配置为发送或接收数据。输入数据、消息对象及其标识掩码存储在CAN消息RAM中。
标准CAN的标志符长度是11位,而扩展格式CAN的标志符长度可达29位。CAN协议2.0A版本规定CAN控制器必须有一个11位的标识符。而2.0B版本中规定,CAN控制器的标志符长度可以是11位或者29位。遵循CAN2.0B协议的CAN控制器可以发送和接收11位标识符的标准格式报
文或29位标识符的标准格式报文。如果禁止CAN2.0B,则CAN控制器只能发送和接收11位标识符的标准格式报文,而忽略扩展格式的报文结构,但不会出现错误。C8051F040所集成的CAN控制器为2.0B。
数据帧是携带数据由发送器至接收器的帧,是CAN的4种帧格式之一,这4种帧格式分别是数据帧、远程帧、出错帧和超载帧,其中数据帧结构如图1所示。
CAN总线数据帧由7个不同的位场组成:帧起始(stsrt of frame)、仲裁场(arbitration frame)、控制场(control frame)、数据场(data frame)、CRC场(CRC frame)、应答场(ACK frame)和帧结尾(end of frame)。数据场的长度可以为0。
1)帧起始:标志数据帧的起始,仅由一个“显性”位组成,只在总线空闲时才允许节点开始发送信号;2)仲裁场:标准格式帧与扩展格式帧的仲裁场格式不同。标准格式里,仲裁场由11位识别符和远程发送请求位组成,识别符位为ID-28~ID-18。扩展格式里,仲裁场包括29位识别符、替代远程请求位、识别符扩展位和远程发送请求位。其识别符为ID-28~ID-0;3)控制场:由6个位构成,前2位为保留位,为显性,后4位为数据长度码,表示数据场中数据的字节数,必须在0~8范围内变化;4)数据场:由被发送数据组成,数目为控制场中决定的0~8个字节,第一个字节的最高位首先被发送;5)CRC场:包括CRC序列和CRC界定符;6)ACK场:长度为2位,包含应答间隙和应答界定符;7)帧结尾:由7个位“隐形”位组成,此期间无位填充。
1. 2 RS-232
RS-232是PC机与通信工业中应用最广泛的一种串行接口,具有连线简单、通讯距离长等优点。同样也有一些缺点,接口的信号电平值较高,易损坏接口电路的芯片,传输速率较低,传输距离有限等。RS-232被定义为在低速率串行通讯中增加通讯距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通讯。UART通信可用查询TI和RI或通过中断来控制通信。UART有两种中断源:数据发送完毕时,TI置1;数据完整接受到时,RI置1。TI和RI中任何一个标志位置1,均能引发UART中断。TI和RI中断标志位需软件清0。
2 系统硬件描述
Cygnal公司的51系列单片机C8051F040是集成在一块芯片上的混合信号系统级单片机,在一个芯片内集成了构成一个单片机数据采集或控制的智能节点所需要的几乎所有模拟和数字外设以及其他功能部件,代表了目前8位单片机控制系统的发展方向。芯片上有1个12位多通道ADC,2个12位DAC,2个电压比较器,1个电压基准,1个32kB的FLASH存储器,与MCS-51指令集完全兼容的高速CIP-51内核,峰值速度可达25 MIPS,并且还有硬件实现的UART串行接口和完全支持CAN2.0A和CAN2.0B的CAN控制器。
控制器局域网(CAN2.0B)控制器,具有32个消息对象,每个消息对象有其自己的标识全速、非侵入式的在系统调试接口 (片内)。C8051 F040器件内部有一个控制器局域网(CAN)控制器,使用CAN协议实现串行通信。该CAN控制器符合Bosch规范2.0A(基本CAN)和2.0B(全功能CAN),方便了CAN网络通信设计。CAN控制器包含一个CAN核、消息RAM(独立于C8051的RAM)、一个消息处理状态机以及控制寄存器。CAN控制器可以工作在高达1M位/秒的位速率。Silicon Labs的CAN有32个消息对象,每个消息对象有其自己的标识掩码,该标识掩码用于对接收到的消息进行过滤。输入数据、消息对象和标识掩码存储在CAN消息RAM中。与数据发送和接收过滤有关的所有协议处理均由CAN控制器完成,不需C8051 MCU干预。这就使得用于CAN通信的CPU带宽最小。C8051通过特殊功能控制器(SFR)配置CAN控制器,读取接收的数据,写入要发送的数据。
C8051F040的MCU内部有两个增强型全双工UART、一个增强型SPI总线和SMBus/I2C。每种串行总线都完全用硬件实现,都能向CIP-51产生中断,因此需要很少的CPU干预。这些串行总线不“共享”定时器、中断或端口I/O等资源,所以可以使用任何一个或同时使用多个。
CAN总线数据和RS-232串口数据的速率、数据格式都不同,为实现相互传输的功能需求,就需要RAM缓存。硬件结构图如图2所示。
3 软件设计
系统采用Keil uVision4软件编程,Keil uVision4是ARM公司推出软件开发平台,其编译器、调试工具实现与ARM器件的完美匹配。程序由初始化和死循环两部分构成。初始化完成对器件数据设置,循环完成数据在RS-232和CAN总线之间的双向通信。
3. 1 初始化
初始化就是通过单片机向其片内的各个寄存器写入控制字的过程。void RS232_INI()函数设置UART为模式1,8位可变波特率通信。void CAN_INI()函数用来初始化CAN,总线接收、发送信道,并设置波特率。
3.2 RS-232转CAN总线
RS-232传输1字节,而CAN总线传输的是8字节,这要求在通信过程中实现数据匹陪、格式匹配。该模块采用,在串口接收中断中,直接把接收到的串口数据存到8字节的缓存中,计数满八位。则标志位置1,主函数中调用函数send_can1(),将数据发送到CAN总线。从而实现将数据从RS-232传输到CAN总线的功能。流程图如图3所示。
3.3 CAN总线转RS-232
CAN总线数据发送到串口,原理相同,过程相反。CAN总线的数据接收也是在中断中实现,这样实时性好。CAN总线的接收缓存中有数据,则这8个字节的数据依次调用RS-232功能函数void RS232_PUTCHAR(),发送到串口。从而实现将数据从CAN总线传输到RS-232串口的功能。流程图如图4所示。
4 实验检测
为了验证设计的正确性,文中使用Kvaser CanKing和SecureCRT软件来测试。Kvaser CanKing用来接收、发送CAN总线数据,SecureCRT用来接收、发送串口数据,二者都有显示功能。实验结果如图5所示,其证实了设计的正确性。
5 结束语
数据通信在嵌入式系统的功能中占据重要地位,串口通信与CAN总线相互通信都具有各自的重要作用,而两者的交互通信也越来越重要,本文的设计功能明确、结构简单、具有很强的通用性和实用性,并通过了测试验证。