SAE J1939协议概述
SAE J1939 是 基 于 CAN 总 线 的 协议,波特率可达250Kbps,是一种传输速率较高的C类通讯协议。SAE J1939主要用于卡车、客车等的网络系统控制与通信。
SAE J1939协议规范文档下载链接
SAE J1939分层结构模型
总线的物理特帧
由于SAE J1939是基于CAN网络进行通讯的,基于ISO11898规范和CAN网络有一样的物理特征,采用屏蔽双绞线,最长40米,250kbit/通讯速率,最多支持30个ECU节点。
SAE J1939常用协议规范
J1939-11物理层
J1939-13板外诊断连接器
J1939-21数据链路层
J1939-31网络层
J1939-71车辆应用层
J1939-73应用层-诊断
J1939-81网络管理
J1939数据帧格式
J1939是基于CAN扩展帧上层数据协议:
Priority: CAN报文的ID是数字越小优先级越高,J1939将其安排在ID的高三bit做优先级控制, 0xb000表示最高优先级,0xb111表示最低优先级。
Reserved(Extended Data Page, EDP):保留位,在报文发送中设置为0。
Data Page Bit:配合保留位一起使用,DP为0或为1分别表示第0页或第1页PGN。此位扩展可由标识符表示的潜在参数组的数目。特定 PDU 是一个 8 位域,它的定义取决于 PDU 格式(PF),根据 PDU 格式(PF) 它可能是目标地址或者群扩展。
若 PDU 格式(PF)段的值小于 240,特定 PDU 段是目标地址。
若 PDU 格式(PF)段的值在 240 和 255 之间,特定 PDU 包含 群扩展(GE)值。
PGN(Parameter Group Number):参数组编号。
PGN的计算方式有以下两种
PGN计算例子如下:
**举例说明**报文ID:0x18FDCA17
第一个字节是18,转为二进制是 0001 1000,可以看到优先级是110(对应十进制的6),EDP=0,DP=0。
第二个字节是PF=FD(十进制是253>240)
第三个字节是GE=CA,(因为PF>240,GE取正常值)
第四个字节是17,源地址,代表是谁发送的数据,比如0x00代表ECU。
所以PGN码是:00FDCA
**举例说明**报文ID:0x0CDBEE17
第一个字节是0c,转为二进制是 0000 1100,可以看到优先级是011(对应十进制的3),EDP=0,DP=0。
第二个字节是PF=DB(十进制是219<240)
第三个字节是GE=0,(因为PF<240,GE取0)
所以PGN码是:00DB00
保留的PGN:J1939包含大量的标准PGN,但PGN的 00FF00至00FFFF是保留的。
特殊的PGN:数据字节为0xFF(255)反映N / A数据,而0xFE(254)反映错误。
SPN(Suspect Parameter Numbers):是用于诊断和报告车辆系统中的故障或异常的编号。它标识了需要需要进行故障诊断的具体参数或传感器,例如刹车压力等,SPN通常与PGN相关联,以便确定与特定参数相关的问题。
一些常用的PGN和SPN可查询该链接:J1939常用预定义PGN (canfd.net)
J1939多帧数据传输
由于数据长度大于8字节的消息无法用一个单独的CAN数据帧来装载。它们必须被拆分为若干个小的数据包,然后使用单独的数据帧对其逐一传送。由于那些重组成长信息的单独数据包必须要能够被一个个识别出来,才可以正确重组,因此把数据域的首字节定义为数据包的序列编号。
每个数据包都会被分配到一个从1到255的序列编号。由此可知,最长的数据长度是(255包×7字节/包=)1785个字节。每个数据传送包(除了传送队列中的最后一个数据包)都装载着原始数据中的7个字节。而最后一个数据包的数据域的8个字节包含:数据包的序列编号和与参数群相关数据的至少一个字节,余下未使用的字节全部设置为“FF”。
备注: “发送者”(originator) 指那些发出请求发送消息的电控单元或设备。
“响应者”(responder) 指那些发出应答发送消息的电动单元或设备。
传输协议——连接管理(TP.CM)
定义: 用于9字节或以上的数据的参数群的传输。
传输协议中所定义的每种特定消息都包含以下定义部分。
重复传输速度: 每次传送一个参数群编号
数据长度: 8个字节
数据页位(DP):0
PDU格式(PF):236
特定PDU(PS):目标地址
默认优先级:7
参数群编号(PGN):60416(0x00EC00)
连接模式----请求发送(TP.CM_RTS)
TP.CM_RTS 消息只能由发送者发送。
数据(字节) 内容
1 控制字节=16,指定目标地址请求发送(RTS)
2,3 整个消息大小,字节数目(低字节在前)
4 全部数据包的数目
5 保留给 SAE 设定使用,该字节应设为 0xFF
6,7,8 所装载数据的参数群编号(PGN)
连接模式----准备发送(TP.CM_CTS)
TP.CM_CTS 消息只能由接收者发送。
数据(字节) 内容
1 控制字节=17,指定目标地址准备发送(CTS)
2 可发送的数据包数目
3 下一个将要发送的数据包编号
4,5 保留给 SAE 设定使用,该字节应设为 0xFF
6,7,8 所装载数据的参数群编号(PGN)
消息结束应答(TP.CM_EndofMsgAck)
TP.CM_EndofMsgACK 消息只能由接收者发送。
数据(字节) 内容
1 控制字节=19,消息结束应答
2,3 整个消息大小,字节数目(低字节在前)
4 全部数据包的数目
5 保留给 SAE 设定使用,该字节应设为 0xFF
6,7,8 所装载数据的参数群编号(PGN)
放弃连接(TP.CM_Abort)
TP.Conn_Abort 消息可以由发送者或者接收者发送。
数据(字节) 内容
1 控制字节=255,放弃连接
2~5 保留给 SAE 设定使用,该字节应设为 0xFF
6,7,8 所装载数据的参数群编号(PGN)
广播公告消息(TP.CM_BAM)
TP.CM_BAM 消息只能由发送者发送。
数据(字节) 内容
1 控制字节=32,广播公告消息(BAM)
2,3 整个消息大小,字节数目(低字节在前)
4 全部数据包的数目
5 保留给 SAE 设定使用,该字节应设为 0xFF
6,7,8 所装载数据的参数群编号(PGN)
4. 传输协议----数据传送消息(TP.DT)
传输协议——数据传送(TP.DT)
定义:用于与同一个参数群相关的8字节以上的数据传送。
重复传输速度:每次传送一个参数群编号
数据长度:8个字节
数据页位(DP):0
PDU格式(PF):235
特定PDU(PS):目标地址(对于TP.CM_BAM数据传送使用全局地址(DA=255))(对于RTS/CTS数据传送不允许用全局地址)
默认优先级:7
参数群编号(PGN):60160(0x00EB00)
TP.DT 数据传送,只能由发送者发送。
J1939诊断服务
SAEJ1939的DTC构成
字节1默认为0x44,字节2默认为0xFF。
SPN和FMI共同构成故障码,SPN换算方法默认为0,故障计数代表故障报出的次数。
DTC故障码
以发送5个故障进行举例:
X1-X5分别代表5个不同的故障,每个故障占用4个字节,具体的换算参考章节5中,
SPN换算。
蓝色字体表示消息报序列号
红色字体表示故障SPN和FMI
黄色字体表示故障计数