刘 明
(中国航空计算技术研究所 第18研究室,陕西 西安 710119)
J1939协议在ECU通信中的应用研究
刘 明
(中国航空计算技术研究所 第18研究室,陕西 西安 710119)
J1939协议是目前在大型汽车中应用广泛的通信协议,被应用于以CAN为基础的嵌入式网络中。阐述了J1939协议和CAN的对应关系,介绍了在ECU通信中的功能应用、通信过程及数据包组织方式,以及常用参数组含含义,并给出示例说明通信过程。通过对J1939协议使用的介绍有效推进了J1939协议在汽车行业的发展和应用。
J1939;CAN;通信;数据包;参数组
相比早期SAE J1587的串行通信方法,采用SAE J1939协议的CAN总线通信具有通信速度快、传递数据量多等优势,被广泛应用于车载电子系统中。国内对J1939的研究起步较晚,虽目前已有部分芯片、产品的研发达到国际先进水平,但在J1939协议的研究方面还存在一定的差距,在自主研发和汽车电子网络开发方面还不够专业,且多项技术还存在“空心化”问题,核心技术未掌握,以上问题严重制约了CAN总线和J1939协议在我国汽车产业中的发展。本文通过J1939协议在ECU通信中的应用,详细介绍了在不同通信功能中的通信过程和数据包组织方式,对J1939协议使用关键技术进行了详细说明,有效推动了J1939协议的使用和推广。
SAE J1939是在CAN总线的基础上定义了OSI各层,在其技术文档中介绍各层相应子标准的功能,其中较为重要的是数据链路层与应用层。
1.1 数据链路层
SAE J1939对数据链路层的定义详尽,提供了完全的网络定义。该定义使用在CAN协议中定义的29位标识符,如表1所示。29位标识符的前3位被用来决定仲裁过程中的信息优先权,值000具有最高优先权。较高优先权的信息将被用作高速控制信息,较低优先级的信息将被不关键的数据使用。该标识符的下一位(R)被保留。对于被传送的信息,该位应置0,这个缺省将允许该位将来用作其他目的。这个标识符的下一组9位是数据页(DP)位和PDU格式(PF)域。PDU代表协议数据单元,PDU有两种格式,如表2所示,分别代表不同的含义。DP位被用作页选择器,页0包含所有的当前正被定义的信息;页1为将来提供了附加的扩展能力,在页0被完成后将被分配。PF域确定两个PDU格式中的一个能够被传送。
表1 CAN和J1939信息帧
表2 PDU格式
PDU1格式:报文向特定目标地址发送,此时参数群编号(Parameter Group Number,PGN)的最低字节为0,PS域不表示PGN的有效数值,用于填充目标地址。
PDU2格式:报文作为全局报文发送,PS域表示PGN的有效数值。
PS域:网络中一个特定源地址只能匹配一个应用控制器(Control Application,CA)。
1.2 应用层
应用层定义了针对车辆应用的信号和报文。应用层通过参数描述信号,给每个参数分配了一个19位的可疑参数编号(SPN);此外还通过参数组描述报文,给每个参数组分配了一个24位的参数组编号(PGN)。SPN用来标识与ECU相关的故障诊断元素、部件或参数组中参数;PGN用来唯一标识一个特定参数组。除已分配的参数和参数组外,用户还可通过分配未使用的SPN给自定义参数和定义专有报文对应用层进行补充。关于SPN和PGN的具体描述如下:
PGN:参数群编号,3 Byte,24位,包含了保留位、数据页、PDU格式和群扩展域等信息。参数群编号唯一的标识了一个确定的参数群。
SPN:可疑参数编号,19位,用于识别与某个ECU相关的特定元素、部件或参数,经分析认为SPN按照一定顺序分布在数据包的数据段。
SPN与PGN关系:(1)应用层参数组的每个参数(数据)都分配一个SPN。(2)部分参数可具有SPN,但不属于任何参数组(PG),没有PGN。
在ECU通信中,主要有以下功能应用:
(1)地址声明。在进行通信之前,要先进行地址声明。即首先由一个控制器应用程序CA发送地址声明请求消息,此消息为广播消息,其他CA在接收到地址声明请求消息后回复自身地址消息。这样,每个CA在为自己声明地址时,都不能使用已被其他CA使用的地址,当出现地址冲突时要采用仲裁算法按照CA的优先级进行仲裁。
(2)通信握手。通信握手指通信连接的建立和断开。通信节点开始通信之前,先进行通信连接以确保通信线路畅通。主通信节点先向目标通信节点发送建立连接消息,目标通信节点收到建立连接消息后根据自身通信状态是否正常回复主通信节点,若通信节点通信正常,则主通信节点与目标通信节点开始进行消息通信,否则主通信节点不断发送建立连接消息直到收到目标消息节点回复的通信正常消息。断开时,主通信节点连续发3次请求消息,若均未回应,则认为通信连接已经断开。
(3)广播消息。在J1939协议中使用最多的就是广播消息,通过广播消息可以将ECU中的参数周期性发出,通过参数测试界面显示ECU在运行过程中的参数当前值以及数值变化过程。广播消息直接发出,无需通信握手,任何通信节点均可接收。广播消息一般主要用于在系统运行过程中监控系统中重要参数值及其变化,以了解心态运行状况。
(4)点对点通信。两个通信节点之间进行通信,一般是监控工具和目标板之间进行通信用于完成参数的查询,修改和设置等功能,即在系统运行过程中,可人为干预设置运行条件检测系统功能的健壮性。点对点通信通常应用在以下情况中:1)参数值请求。监控工具发送参数值请求消息,ECU在接收到参数值请求消息后对请求参数的值进行数据消息组包并回复,监控工具将接收到的参数值数据包解析并通过界面显示请求参数当前数据值。通过参数值请求功能,可实时显示ECU运行过程中所有参数的当前值。2)参数值修改请求。在ECU运行过程中,当需要修改某些设定参数值以检测系统在不同工况下的运行状态时,可通过监控工具向ECU发送请求参数修改消息以及修改值,ECU接收到参数值修改请求消息后,修改对应参数值并将修改参数当前值进行数据组包返回给监控工具,表示修改完成,监控工具接收到ECU发回的数据包后将修改后的参数值在界面上显示,以方便查看修改后的值与设置值是否一致,从而确认修改是否正确进行。参数修改可以对某个独立的参数进行,也可以对一块数据进行修改。3)数据块传输。两个通信节点之间可进行大数据块传输。在数据块传输时,主通信节点首先要向目标节点发送数据块配置信息消息,包括数据传输长度、格式、校验等信息并请求相应的数据信息,目标节点收到消息后按照配置信息进行数据组织,然后将组织好的数据块进行组包,并传输给主通信节点。一般在数据块传输过程中,由于数据量比较多,要将数据块进行分块并在块头添加块标识信息。数据块传输采用的是J1939协议的自定义参数组0xEF00。
(5)故障消息。ECU在运行过程中产生的故障信息均记录在故障参数中,如故障发生次数,故障发生状态,故障码等信息。若需要查看当前故障发生情况,监控工具向ECU发送故障请求消息,ECU在收到故障请求消息后将当前故障信息组包回复,在监控工具中显示,并可周期的进行实时更新。
(6)多路通信。多路通信功能为汽车提供了多一种数据采集方法,通过J1939协议将多路通信数据传输到ECU,有效代替了通过传感器提供信号的方法,在工程应用上具有较大的灵活性。
多路通信参数一般可采用多路通信和非多路通信方式进行采集,通过开关控制,其采集过程如图1所示。
图1 多路通信和非多路通信
3.1 参数组
J1939通信协议采用的通信参数组主要包含以下几类:
(1)PGN以F开头,如0xFE00,0xFF00等,用于广播消息。
(2)PGN值为0xEC00,用于多于8 Byte的数据传输控制字段数据组帧。
(3)PGN值为0xEB00,用于多于8 Byte的数据传输数据字段组帧。
(4)PGN值为0xEA00,用于地址声明请求,从网络设备中请求参数组。
(5)PGN值为0xEE00,用于地址声明报文组帧。
(6)PGN值为0xEF00,使用PDU1格式,允许制造商将专用通讯信息定向到目标节点,自定义帧,常用于大数据量数据传输组帧。
3.2 通信过程
如图2所示的通信过程,说明了点对点的通用通信过程,其他通信过程基本是点对点通信过程的变化形式。图2所示的数据传输过程分为发送请求、请求应答、数据发送、通信结束4个过程,除了数据发送其他过程采用TP.CM帧格式,即PGN为0xEC00的帧。
图2 传输协议示意图
通信过程详解:
(1)TP.CM_RTS,16,23,4,255,65 259 为发送请求帧,16为发送请求控制字节,23为总字节数,4为总包数,最多包数为255,PGN为65 259(0xfeeb)。
(2)TP.CM_CTS,17,2,1,255,255,65 259为请求应答帧,17为允许发送控制字节,允许包数为2,接收包开始序号为1,保留字节255、255,PGN为65 259。
(3)TP.DT,1,data1~7 表示为发送数据帧,帧编号为1。
(4)TP.DT,2,data8~14 表示为发送数据帧,帧编号为2。
(5)TP.CM_CTS,17,0,255,255,255,65 259 表示不允许接收数据。
(6)TP.CM_CTS,17,2,255,255,255,65 259为请求应答帧,17为允许发送控制字节,允许包数为2,接收包开始序号为3,保留字节255、255,PGN为65 259。
(7)TP.DT,3,data1~7 表示为发送数据帧,帧编号为3。
(8)TP.DT,4,data8~14 表示为发送数据帧,帧编号为4。
(9)TP.CM_EndOfMsgACK,19,23,4,255,65 259为报文结束应答帧,19为报文结束应答控制字节,23为整个报文的总字节数,4为总报数,255为保留字节,65 259为PGN。
通过自编写监测工具ZLGCANTest可读取ECU程序中CAN口接收的数据包,并给出数据包各字段解析值,接收数据包界面如图3所示。
图3 CAN总线接收数据包
介绍了J1939数据链路层和应用层信息帧格式以及和CAN的对应关系,J1939在数据通信中的功能应用以及主要协议功能,最后以一个通信示例介绍了数
据通信时数据帧的传输过程,组织方式和含义。
[1] 冯桑,康迂福,康林权.车载智能终端的CAN协议设计及软件实现[J].公路与汽运,2010(5):30-32.
[2] 杨良义,甘海云,赵向阳.基于SAE J1939协议的天然气发动机传感器故障诊断技术[J].车用发动机,2011(2):90-92.
[3] 龚光华,宫辉,安鹏.MPC5554/5553微处理器揭秘[M].北京:北京航空航天大学出版社,2010.
[4] 钟祥麟,李孟良,王务林.SAE J1939协议在重型车OBD中的应用[J].汽车电器,2009(7):1-3,7.
[5] 徐江富,谢红兵.基于J1939的ABS数据采集系统设计[J].重庆科技学院学报:自然科学版,2010(5):168-170.
[6] 余韵律,王建,王启慧.基于SAE J1939协议的发动机总线数据模拟器开发[J].电子设计工程,2010,18(4):48-50,54.
[7] 韩伟伟,王建,王明玉.基于SAE J1939协议的发动机模拟系统开发[J].电子设计工程,2009,17(2):72-74.
Application of J1939 Protocol in ECU Communications
LIU Ming
(Eighteenth Laboratory,Aeronautical Computing Technique Research Institute,Xi’an 710119,China)
J1939 protocol is a communication protocol widely used in large-scale automobiles currently.It is applied to the embedded CAN-based networks.This paper mainly expounds the relationship between the CAN and J1939 protocol,focusing on details of the function application in the ECU communication,the communication process and how to organize data packets.It also describes the meaning of the commonly used parameter set and gives examples to explain the communication process.Detailed instructions on how to use the J1939 protocol effectively promote the further development and application of J1939 protocol in the automotive industry.
J1939;CAN;communications;data packets;parameter set
2014- 09- 10
刘明(1983—),男,硕士,工程师。研究方向:计算机软件。E-mail:xiangirl2005@126.com
10.16180/j.cnki.issn1007-7820.2015.05.011
TN915.04;U
A