J1939应用层协议详细描述了用于J1939网络的每个参数,包括其数据长度、数据类型、分辨率、范围及参考标签,并为每个参数分配了一个编号(SPN)。由于J1939协议是以协议数据单元(PDU)的形式进行传输,而一个PDU包含8个字节数据,因此,需要对这些参数进行组合。在J1939应用层协议中还详细定义了参数组,包括每组参数的更新率、有效数据长度、数据页、PDU格式、PDU细节、默认优先权及参数组的内容,并为每个参数组分配一个参数组编号(PGN)。
PGN(parameter group number)是一个24位的值,包括保留位(R)、数据页位(DP)、PF(PDU格式场)和PS(群扩展场)等要素。
SPN(SPN:Suspect Parameter Number)是PG(参数组)下面的具体参数的一个编号,而PGN是参数组编号,可以理解为一个PGN包含了按一定方法分类的一组参数,而每个具体参数又有它自己的编号(就是SPN)。
SAE J1939的应用层以PGN和SPN的方式具体规定了车辆使用的每个参数的数据长度,数据类型,分辨率和数据范围等。
1、J1939和CAN2.0的关系
J1939是在CAN2.0B的基础上,对仲裁场部分的29位ID的重新解释;其它部分完全一样。
29位ID分为:3位的优先级、8位的PF(帧格式)、8位的PS(帧扩展)、8位的SA(源地址)、1位的DP(Data Page数据页)、1位的保留位。
其中1位的DP、8位的PF、8位的PS组成了PGN;
PGN是Parameter Group Number;是参数组列表。
在J1939中,将消息分为了PDU1和PDU2两种格式。
PDU1格式的消息发送给特定地址的ECU,地址用8位的PS记录;PDU2格式的消息则发送给所有的ECU,8位的PS用于扩展。
当PF的值在0-239时,表示该消息为PDU1格式,PS为DA(目地地址)。
当PF的值在240-255时,表示该消息为PDU2格式,PS为扩展地址。
2、J1939的物理特性:
总线最大长度为40M;最大支持30个节点;节点最大长度为1M;传输速率最大为250Kbps;3根线(CAN_H、CAN_L、GND)
J1939的分层:
J1939/11:物理层:物理介质、总线设计、长度、节点;
J1939/21:数据层:PGN信息、帧格式;
J1939/31:网络层;
J1939/71/73:应用层;信息分享、控制、广播、故障诊断;
3、PGN
PGN是Parameter Group Number的简称。J1939中最大支持(240+16×256)×2个PGN。
当消息为PDU1格式时,PGN=DP×256×256+PF;
当消息为PDU2格式时,PGN=DP×256×256+PF*256+PS;
在J1939中,消息的传递以参数组的形式,每个参数组中有若干参数,每个参数是一个SPN;
4、SPN
SPN:Suspent Parameter Number:特定的参数编号;例如:SPN 190表示发动机转速。
5、CAN2.0与J1939的关系、J1939与特定的厂商协议的关系
CAN2.0是一种总线规范,是数据链路层的技术。J1939是SAE(美国汽车协会)定义的基于CAN总线的规范,目的是解决不同发动机厂商、不同ECU厂商的兼容性问题。J1939定义了 一系列的PGN和SPN,这些PGN包含了发动机、变速器、车轴等汽车上各部件的信息;对参数的表示方法(状态和值)又定义了SLOT(Scaling比例、Limit界限、Offset偏移、Transfer传送)。ECU厂商都应该遵循这个规范。ECU模块的功能不同,厂商不同,在J1939的基础上,又表现出其多样性:支持或者不支持某些PGN、SPN和SLOT;新增了某些J1939未定义的PGN和SPN。
6、PDU消息包在CAN2.0上的拆包和重组
CAN2.0的数据场最多支持8字节的数据,如果PDU的数据小于等于8字节,1个PDU用1个CAN2.0帧传输即可;如果PDU的数据大于8字节,就需要在发送时进行拆包,在接收时进行重组。接收端如何识别是否需要重组以及怎么重组呢?J1939的做法是在拆包的情况下,将8字节的数据区的第一个字节用于表示拆包后的序号(1-255);因此,最长的PDU为255×7字节。
7、PDU的内容解析
PDU:Protocol Data Unit:协议数据单元。
在数据链路层CAN之上的就是PDU,包含了CAN2.0中仲裁场、控制场和数据场部分的内容。对J1939协议的解析其实就是对PDU的协议解析,先对接收到的包进行重组,构建一个完整的PDU包;再从PDU中数据包中提取出PGN和SPN对应的值。
定义: P 是优先级, R 是保留位, DP 是数据页, PF 是PDU 格式, PS 是特定PDU, SA 是源地址
示例:
ID:18DB33F1
110 0 0 11011011 00110011 11110001 (//18 = 00011000,前面补3个000)
P3~1 R1 DP PF8~1 PS8~1 SA8~1
PGN = R1 | DP | PF | PS = 56115 (//if PF<=240,PS = 0)
P Priority
R Reserved
PS PDU Specific
SA Source Address
PF PDU Format
DLC Data Length Code
DTC (4字节)有四个部分组成:
1、可疑参数码:SPN19位;
2、失效模式标识符:FMI 5位;
3、故障发生次数: OC 7位;
4、SPN转换方式: CM 1位;
CAN扩展数据帧:
PDU = ID+数据场;
PGN:
例子2:
;---------------------------------------------------------------------- (特定目标地址通讯)
PDU1
P R DP PF PS(DA) SA Data Field
3 1 1 8 8 8 0-64
;---------------------------------------------------------------------- (广播)
PDU2
P R DP PF PS(GE) SA Data Field
3 1 1 8 8 8 0-64
;---------------------------------------------------------------------
18FEDF00
110| 0 0 | 11111110 11011111 | 00000000
优 | | |
先 | | PGN | 源地址
级 | | |
优先级:110 or 6
参数组:FEDF or 65247DEC
源地址:00H