基于自动位速率检测的CAN协议网关.pdf
第 27 卷第 1 期武 汉 理工 大学学 报 信息与 管理 工程 版Vol.27No.12005 年 2 月JOURNAL OF WUT(INFORMATION&MANAGEMENT ENGINEERING)Feb.2005文章编号:1007-144X(2005)01-0088-04基于自动位速率检测的 CAN 协议网关张成才,曾春年(武汉理工大学 自动化学院,湖北 武汉430070)摘要:针对使用不同协议的 CAN 网络,采用功能强大的 8 位微控制器 P87C591 设计出一种具有 2 个独立CAN 控制器的网关,从而实现了CAN1.2 与CAN2.0 网络的互连。给出了该网关在软硬件上的实现方法,并阐述了如何实现网关的自动位速率检测功能。关键词:自动位速率检测;CAN;网关;P87C591中图法分类号:U 469.72文献标识码:A1引言CAN(Controller Area Network)总线是现今流行的一种较为先进的、性能出色的现场总线技术。1991 年9 月 CAN 协议技术规范由标准的1.2版本修订为新的 2.0 版本。在技术规范 2.0B 中给出了标准的和扩展的2 种帧格式,其间区别在于标识符场的长度具有 11 位标识符的帧称之为标准帧;相应地,包括 29 位标识符的帧称之为扩展帧 1。但现存的 CAN1.2 版本只支持标准帧格式,不能识别扩展帧格式,所以在实施过程中会响应错误信息。为了保证采用不同版本的技术规范的CAN 网络能够正常通信,必须采用 CAN 协议网关使网络互连。CAN 协议网关实质上就是一个连接异型网络的接口装置,它综合了桥接器和路由器的功能,能在 OSI 参考模型的物理层、数据链路层和应用层上对双方不同的协议进行翻译和解释。笔者在参与研制的混合动力电动汽车光纤CAN 网中,美国 Solectria 公司的电机控制器DMOC445 和 DC-DC 变换模块 DC345 均使用标准帧的标识符,而整车控制系统的 ECU 采用了扩展帧的标识符。为了确保DMOC445和 DC345同各个 ECU 能正常进行 CAN 通信,笔者设计出了具有 2 个独立 CAN 控制器的网关,从而达到了 2 个不同版本的 CAN 协议网络通过该网关进行互连的目的。2网关的硬件实现2.1硬件结构框图网关的硬件结构框图如图 1 所示。该网关的核心是 2 个独立的 CAN 控制器。其中一个为Philips 公司的单片 8 位微控制器P87C591 片内的图 1网关的硬件结构框图收稿日期:2004-09-01.作者简介:张成才(1979-),男,河南南阳人,武汉理工大学自动化学院硕士研究生.基金项目:湖北省重大科技攻关项目(2003AA103B).CAN 控制器,另一个为外扩的独立 CAN 控制器SJA1000。网关上CAN 控制器和物理总线之间的接口有 2 种,即采用双绞线作为传输介质的 CAN总线接口和采用塑料光纤作为传输介质的光纤CAN 总线接口。为了调试方便,微控制器还外扩了程序存储器。2.2P87C591 及 2 个 CAN 控制器P87C591 是 Philips 公司的一款内部具有CAN 控制器的 8 位微控制器,该芯片以先进的CMOS 工艺制造,设计用于汽车和通用工业应用。P87C591 采用强大的 80C51 指令集,并采用了改进的 1:1 内部时钟预分频器,在 12 MHz 外部时钟速率时实现 500 ns 指令周期,在 8 MHz时钟可实现 1 Mb/s CAN 总线速率。P87C591 片内的 CAN 控制器具有取自于SJA1000 的增强型 PeliCAN 内核,所以它包含了SJA1000 所具有的相同功能,这一定程度上降低了软件设计的复杂性。片内 CAN 控制器不需附加任何外围电路,P87C59仅通过 5个特殊功能寄存器 CANADR、CANDAT、CANMOD、CANS-T A 和 CANCON 就可完成对它的所有访问。因此对片内CAN 控制器的操作非常简单。另一个 CAN 控制器 SJA1000 和 P87C591 的接口电路如图 2 所示,CPU 通过中断方式完成对SJA1000 的访问。SJA1000 的片选信号通过 P2 口的 P2.7 进行控制,这样 CPU 对 SJA1000 的访问相当于访问片外数据存贮器,即P2.7 为 0 的CPU片外存贮器地址就可选中 SJA1000。CPU 再通过这些地址对 SJA1000 执行相应的读写操作。图 2P87C591 与SJA1000 的接口电路原理图图 3传输介质为双绞线的接口电路原理图2.3网关的通信接口2.3.1传输介质为双绞线的接口电路如图 3 所示,82C250 是 CAN 控制器和物理总线间的接口,该器件可以提供对总线的差动发送能力和对 CAN 控制器的差动接收能力 1。82C250 和CAN 控制器之间采用高速光隔6N137以提高系统的抗干扰能力,同时实现了总线上各CAN 节点间的电气隔离。2.3.2传输介质为光纤的接口电路该接口电路中光电模块用于实现光纤 CAN总线中光电信号之间的转换,为了实现这种转换,必须设计合适的模块驱动电路。如图4 所示,笔者选用 Agilent 公司的光发送器 HFBR-1528 以及光接收器 HFBR-2528。接收器配以适当的外围阻容元件便可实现光到电的转换,发送器则还要相图 4传输介质为光纤的接口电路原理图89第 27卷第 1期张成才等:基于自动位速率检测的CAN协议网关应的驱动芯片 SN75451 以及阻容元件才可实现电到光的转换和传送。需要说明的是,如果该网关采用光纤作为传输介质进行通信还需要加光纤CAN 耦合器。3网关的软件设计在软件的设计中,CAN 协议的网关主要处理下面 3 个部分内容,即从一个网络读取所接收的信息;翻译信息(对于采用不同协议的 CAN 网络,翻译信息主要是指帧格式的转换);向第二个网络发送信息。为了使网关在未知的位速率下也可以正常的从一个 CAN 网络上读取信息,笔者利用 P87C591 片内 CAN 控制器的只听模式,在软件中实现了网关的自动位速率检测功能。3.1软件主程序流程针对网关所要处理的 3 个部分内容,软件设计中应该包括 CAN 控制器的初始化、读写操作,CAN 总线上数据的接收、发送以及不同帧格式的转换。如图 5 所示为软件的主程序流程图,其中 2个 CAN 控制器的初始化及读写程序请参考有关资料。接收中断包括 P87C591 片内 CAN 控制器的 接 收 中 断 和 SJA1000 的 接 收 中 断,其 中SJA1000 的接收中断为外部中断。图 5软件主流程图3.2自动位速率检测自动位速率检测实际上是要求网关在未知的CAN 总线位速率下能够自动地检测出 CAN 总线的位速率,同时还不影响总线上其他节点的所有活动。要做到位速率的自动检测,就要确保CAN 控制器在错误的位速率下不产生错误帧。P87C591 的 CAN 控制器使用独特的“只听模式”特性支持自动位速率检测,在该模式下 CAN 控制器不产生错误帧,只可接收信息(真正的监控功能)。检查位速率所需要的信息数取决于几个因素,例如初始化测试位速率和 CAN 总线的负载。对于自动位速率检测,笔者在软件中预定义一个位速率表,该表包含了所有可能的位速率以及对应的位定时参数 BT R0、BT R1 的值。位定时参数设置主要包括波特率预设值 BRP、采样模式SAM、同步跳转宽度 SJW、位定时段 1T SEG1 和位定时段 2TSEG2。参数的具体确定方法请参阅P87C591 的数据手册,笔者在这里不再赘述。P87C591 的 CAN 控制器首先进入复位模式,接着设置使用最高位速率接收 CAN 信息,最后使能接收中断和总线错误中断并进入只听模式。在启动接收程序后,P87C591 一旦检测到总线错误中断,就选择下一个较低的位速率。直到产生接收中断,表示检测到了正确的位速率,器件切换到操作模式。为了达到确认该位速率的目的,再次使用该位速率接收一个 CAN 信息。之后 CAN控制器就可以参与网络中的通信,图 6 为自动位速率检测的软件流程图。图 6自动位速率检测软件流程图90武汉理工大学学报信息与管理工程版2005 年 2 月下面给出了 CAN 位速率表的子程序,该子程序应当包含所有可能的位速率值 2。void changebitrate(unsigned int try1)/*CAN 位速率表:*/CANMOD=0 x01;/*CAN 控制器进入复位模式*/switch(try1)/*下面用于 8xC591 的总线定时参数都是基于 12 MHz 晶振*/case 1:CANADR=BTR0;/*CAN 位速率为 1000 kb/s*/CANDAT=0 x40;/*SJW=2,BRP=1*/CANADR=BTR1;CANDAT=0 x18;/*SAM=0,T SEG1=9,TSEG2=2*/break;case 2:CANADR=BTR0;/*CAN 位速率为 800 kb/s*/CANDAT=0 x40;/*SJW=2,BRP=1*/CANADR=BTR1;CANDAT=0 x1B;/*SAM=0,T SEG1=12,T SEG2=2*/break;/*限于篇幅,笔者在此省略了部分位速率表,在实际应用中应包含所有可能的位速率*/default:break;4结束语经实际应用表明,此网关很好地实现了 2 个不同协议 CAN 网的互连,完成了 DMOC445 和DC345 同各个 ECU 之间的帧格式转换和数据转发任务,工作稳定,达到了预期的效果。同时它还适用于 CAN 主网与 CAN 子网的连接,或者 2 个平行 CAN 网络之间的互连。由于此网关具有 2个独立的电气隔离的 CAN 接口,实现 2 路 CAN通道的数据“透明”转发,因而只需在软件上稍加改变就可把其作为 CAN 总线中继器来使用,这样可以成倍地提高 CAN 通信距离、增加 CAN 节点数目。所以,笔者所设计的 CAN 协议网关不失为一种有效的 CAN 接口工具,可广泛应用于各个控制领域。参考文献:1 邬宽明.CAN总线原理和应用系统设计M.北京:北京航空航天大学出版社,1996.2马忠梅.单片机的 C 语言应用程序设计 M.北京:北京航空航天大学出版,1998.A CAN-Protocol Gateway Based on Automatic Bit-rate DetectionZhang Chengcai,Zeng ChunnianAbstract:Aiming at the CAN bus system running with various CAN protocols,a gateway of CAN-Protocol which hastwo full-CAN controllers is designed by using the powerful8-bit microcontroller P87C591.As a result the connectionbetween CAN Specification 1.2 and CAN Specification 2.0 network is realized.T he realization of this gateway in thesoftware and hardware is given and the way to realize the function of automatic bit-rate detection of the gateway isexplained.Key words:automatic bit-rate detection;CAN;gateway;P87C591Zhang Chengcai:Postgraduate;School of Automotive Engineering,WUT,Wuhan 430070,China.编辑:王志全91第 27卷第 1期张成才等:基于自动位速率检测的CAN协议网关