张一娇
【摘 要】作为现场总线一员的CAN总线的架构使用了OSI七层参考模型,其主要使用了七层参考模型中的物理层、数据链路层和应用层,本文对这三层进行了介绍。本文使用TC1728芯片的CAN模块来实现一个传送J1939协议报文的CAN节点。该ECU的CAN节点与CANoe仿真工具模拟的一个CAN节点之间使用J1939协议相互通信。用户即可在CAN卡的图形化界面中观察ECU的CAN节点的报文帧是否正确。
【关键词】CAN总线;OSI七层参考模型;CANoe
J1939 Protocol in ECU communication based on CANoe
ZHANG Yi-jiao
(Chengdu College of University of Electronic Science & Technology, Chengdu Sichuan 611731, China)
【Abstract】CAN bus architecture as a field bus uses the OSI reference model, which is mainly used seven layer reference model physical layer, data link layer and application layer, these three are described herein. As used herein, TC1728 chip CAN module to implement a packet transmission protocol J1939 CAN node. The communication between the CAN node of the ECU and CANoe simulation tool simulation is using J1939 protocol. The user can observe the ECU CAN node in the graphical interface of CAN card and they can judge whether the message frame is correct.
【Key words】CAN bus; OSI seven layer reference model; CANoe
0 引言
在当今社会,汽车技术快速发展,汽车性能不断提高,各类电子设备在汽车上应用得越来越广泛。传统的布线技术难以满足现代汽车技术的需求,因此汽车总线技术得到越来越多汽车厂商的青睐。在汽车总线发展历程中,K线等总线正在被淘汰,CAN线等总线已经发展成熟,MOST等总线则正处于研究阶段。
1 CAN总线通信原理
CAN总线是现场总线家族中极其重要的一员,而现场总线的定义为:应用于工业现场,采用总线方式连接多个设备,用于传输工业现场各种数据的一类通信系统[1]。
在国际标准化组织(ISO)提出的“开放系统互联(OSI)”的参考模式中,网络系统结构划分为7层。从上到下依次是应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。
下表为各层的定义。
CAN协议也是建立在国际标准化组织的开放系统互联模型基础上的。不过,其模型结构只有3层,即只取OSI底层的物理层,数据链路层和上层的应用层。由于CAN的数据结构简单,又是范围较小的局域网,因此不需要其他中间层,应用层数据直接取自数据链路层或直接向链路层写数据,而物理层主要完成设备间的信号传送,把各种信息转换为可以传输的物理信号(通常为电信号或光信号),并将这些信号传输到其他目标设备。结构层次少,有利于系统中实时控制信号的传送。
2 CAN总线与J1939协议
CAN总线其本质是一种串行数据通信协议,其通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等工作[2]。CAN总线通信是通过5种类型的帧进行的,它们分别是数据帧、远程帧、错误帧、过载帧和帧间隔。为了使数据能够在总线上可靠传输,CAN总线对各类帧的格式、用途及发送时机都进行了详细的规定。数据帧用于发送节点向接收节点传送数据,是使用最多的帧类型,远程帧用于接收节点向某个发送节点请求数据,错误帧用于在检测出通信错误(如校验错误)时向其他节点发出通知,过载帧用于接收节点通知,用于将数据帧和远程帧与前面的帧分离开来。
根据应用场合的不同,国际上出现了多种CAN应用层协议,如CANopen、DeviceNet、J1939等。J1939协议基于CAN2.0B协议,即数据帧为扩展数据帧,数据标识符(ID)由29位构成,包括优先级P、保留位R、数据页DP、PDU格式PF、特定PDU(目标地址PS)、源地址(SA)。J1939报文标识符的具体结构如图1所示。
3 总线测试系统的实现
CANoe是德国VECTOR公司开发的功能强大的仿真及测试软件,使用时需要借助其他硬件测试工具配合使用,常使用的硬件包括CANcaseXL,CANScope,CANStress等[3]。本系统使用的硬件是CANcaseXL。
3.1 需要用到的硬件
在本文所搭建的测试系统中,我们选择了以英飞凌Tricore架构的32位微控制器TC1728为核心芯片的ECU作为一个节点。TC1728芯片实现的CAN模块属于全CAN设备,即,用硬件实现全部的总线协议,包括接收滤波和报文管理。CAN模块的报文对象被组织为双链列表,在该列表结构中,每个报文对象都有两个指针,一个指向列表中的前一个报文对象,另一个指向列表中的后一个报文对象。CAN模块提供8个列表,每个报文对象分配给其中之一。
图2是TC1728芯片与PC机的一个通信示例。PC机通过CAN卡发送报文,然后TC1728芯片中的CAN节点0的报文对象10接收到报文后,在中断函数中处理报文,最后使用报文对象12,通过CAN卡发送报文到PC机上。我们根据下图编写代码,实现TC1728芯片发送CAN报文,然后根据CAN总线应用层的J1939协议,可以发送满足J1939协议的报文。
3.2 具体测试方法
运行在CAN总线应用层上的是SAEJ1939协议,在CAN网络中有2个节点,一个是真实节点ECU,另一个节点是CANoe仿真工具。该CAN网络是用来测试ECU的CAN模块实现的SAEJ1939协议功能是否正确。
在本测试系统中,我们用到了CANoe在ECU开发过程中的半物理仿真。即将CANcaseXL硬件工具当作一个节点,与ECU共同处于一个CAN网络中。CANoe软件工具运行在CANcaseXL硬件工具之上,使用了CANoe仿真功能中的总线数据库以及建模(包含CAPL编程以及面板)两项功能。
CANoe仿真功能中的总线数据库工具是CANdb++,它包含整个系统的各个节点、环境变量、消息的设定以及信号在消息中的相对位置,即数据帧中数据场的位置关系[4]。本测试系统使用CANdb++工具定义了报文DM4、DM5等的ID类型及ID号等信息。
CAPL是CAN总线访问编程语言,是一种类C语言。CAPL程序能够检测事件,并执行和事件相关的程序。检测的事件类型包括:程序开始执行事件、程序停止执行事件、键盘输入事件、CAN消息的接收事件、定时器超时事件、图形面板输入事件。CAPL程序是基于事件程序的组合。
面板是CAN网络节点的外部设备,用户可以通过面板上面的信号观察节点当前状态,也可以通过点击按钮发送CAN报文。
根据图3所示,用户可以通过点击面板上面的按钮输出报文给ECU节点。CANoe软件可发送的报文有DM4、DM5、DM6、DM12、DM21、DM23、DM26、DM28、DM29.
在实现了ECU的CAN模块编程以及CANoe仿真工具的报文输出功能后,就可以通过PC机上的CAN卡来观察CAN网络中的报文传输情况。
在CAN网络中,ECU节点的地址是0x00,CANcaseXL节点的地址是0x2B,CANcaseXL节点利用面板点击按钮发送报文,ECU接收报文。发送和接收的报文格式符合SAEJ1939协议的应用层规范,如图4所示。
在图4中,我们还可以看到,ECU节点的CAN模块会发送DM1报文,DM1报文是不需要接收请求报文的,它会按照1s的周期定时发送。
4 结束语
本文使用CANoe仿真工具配合ECU进行CAN通信,来测试ECU中CAN通信模块功能是否正常。CANoe仿真工具使用面板实现了人机交互功能,使界面更加友好。在未来的研究中,可以尝试加入更多的报文,并更精确报文发送的间隔时间。
【参考文献】
[1]周立功.项目驱动-CAN-bus现场总线基础教程[M].北京:航空航天大学出版社,2012.
[2]胡艳峰.基于CANoe的汽车CAN总线通信及诊断设计[J].汽车电器,2015(6):10-13,20.
[3]张军.基于CANoe软件的电动汽车CAN总线测试系统的研究[J].传动技术,2012,26(3):10-13,42.
[4]李志涛.基于CANoe的汽车网络功能配置系统的开发[J].汽车电器,2015(4):51-53.
[责任编辑:杨玉洁]