1.SAE J1939是基于CAN(Controller Area Network,控制器局域网)的通信协议,广泛用于各类商用车。该协议对车辆中连接CAN的电子组件及其附加设备之间的通信进行了标准化。 J1939的比特率通常为250kb/S(最近还能支持500Kb/s),并且拥有18位扩展标识符共29位标识符。 SAE J1939应用层定义了12种诊断报文(Diagnostic Message,DM)、诊断故障码(DTC)。 2.DM(Diagnostic Message)报文用于指示“故障灯”和“当前故障”。 (1)指示灯可视化诊断支持 错误代码通过驾驶座的指示灯指示或表示。标准定义了四种不同的灯,分别是: MIL(Malfunction Indicator Lamp,故障指示灯)):该灯由OBD指南规定,用于指示与尾气有关的故障。 RSL(Red Stop Lamp,红色刹车灯)):指示需立即停车的严重错误。 AWL(Amber Warning Lamp,琥珀色警示灯)):指示无需停车的一般错误。 PL(Protection Lamp,保护灯)):该灯用于指示非电子设备引起的错误,例如,清洗液水位过低或发动机冷却温度过高。 所有灯都定义了四种状态:关闭、开启(稳定状态)、以1Hz频率闪烁、以2 Hz频率闪烁 (2)内容说明: 参数组号(PGN) 65226(0xFECA) 字节1 bits 8-7 故障指示灯状态 bits 6-5 红色停止灯状态 bits 4-3 琥珀色警告灯状态 bits 2-1 保护灯状态 字节2 bits 8-7 为 SAE 分配灯状态保留 bits 6-5 为 SAE 分配灯状态保留 bits 4-3 为 SAE 分配灯状态保留 bits 2-1 为 SAE 分配灯状态保留 字节3 bits 8-1 SPN 字节4 bits 8-1 SPN  字节5 bits 8-6 SPN bits 5-1 FMI 字节6 bits 8 CM(SPN 换算方法) bits 7-1 OC(事件记数)

3.协议数据单元(Protocol Data Unit, PDU) J1939报文使用的基于CAN2.0B的拓展帧格式定义了一个完整的标准化通讯策略,通过PDU定义了一个框架,用来组织数据帧中J1939协议相关的信息**。PDU由数据帧中的ID和数据场组成,数据帧和PDU的对应关系如下图所示。** P(Priority),优先级字段,用于在仲裁过程中控制报文优先级。 **EDP(Extended Data Page),**为扩展数据页位,在J1939中固定取值为0。 P(Data Page),数据页位,可用来扩展参数组的数量。 PF(PDU Format),为PDU格式字段,通过不同的取值来确定参数组编号(Parameter Group Number, PGN)是按照PDU1格式还是PDU2格式。 **PS(PDU Specific),特定协议数据单元字段,**当PF的值为0-239时PS表示目标地址(PDU1格式),当PF的值为240-255时PS字段表示组扩展(PDU2格式),且报文只能广播。 **SA(Source Address),**源地址字段,整个网络中SA的值必须是唯一的。 Data Field,数据场,对于Classic CAN来说是8个字节,而CANFD则最多有64个字节数据。如果需要传输更多的数据,则需要借助J1939的传输协议。 4.PGN的组成:PGN共有3个字节24位,两者有重合,但是PGN并不是ID的一部分。 PGN的24位分别是:6个bits的0, 一个扩展数据页(EDP)、数据页(DP)、PF、GE.(当PF<240,GE=0;否则GE=SA)。

**举例说明:**报文ID:0x18FECA17 第一个字节是18,转为二进制是 0001 1000,可以看到优先级是110(对应十进制的6),EDP=0,DP=0。 第二个字节是PF=FE(十进制是254>240) 第三个字节是GE=CA,(因为PF>240,GE取正常值) 第四个字节是17,源地址,代表是谁发送的数据,比如0x52代表是氮氧,0x00代表ECU。 所以PGN码是:00FECA

**举例说明:**报文ID:0x0CDAEE17 第一个字节是0c,转为二进制是 0000 1100,可以看到优先级是011(对应十进制的3),EDP=0,DP=0。 第二个字节是PF=DA(十进制是218<240) 第三个字节是GE=0,(因为PF<240,GE取0) 所以PGN码是:00DA00 5.SAEJ1939的DTC构成: 字节1默认为0x44,字节2默认为0xFF。 SPN和FMI共同构成故障码,SPN换算方法默认为0,故障计数代表故障报出的次数。 6.以发送5个故障进行举例: X1-X5分别代表5个不同的故障,每个故障占用4个字节,具体的换算参考章节5中, SPN换算。 蓝色字体表示消息报序列号 红色字体表示故障SPN和FMI 黄色字体表示故障计数