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取正常值)。

**举例说明:**报文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
黄色字体表示故障计数

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐