SAE J1939 协议解析及工程实践
SAE J1939 协议解析及工程实践
前言
在网络通信设计领域,CAN(FD)和Ethernet等协议被广泛讨论,但J1939协议在商用车及工程机械行业却有着广泛应用。此外,在乘用车领域,如GB/T 27930标准中也规定了充电桩与BMS之间的通信协议采用SAE J1939。本文将重点介绍J1939协议的原理及其在工程实践中的应用。
J1939 协议介绍
整个SAE J1939协议组包含多个标准,涵盖了数据链路层、网络层、应用层等多个层面。虽然标准内容丰富,但本文主要从项目使用的角度,介绍数据链路层(J1939-21)和应用层(J1939-71)的相关内容。
帧结构
J1939采用29位ID的扩展帧格式,其帧结构与CAN标准帧类似,主要区别在于ID域。具体包括帧起始、仲裁场、控制场、数据场、CRC场、ACK场和帧结束。
协议数据单元(PDU)
每个CAN数据帧报文包含一个协议数据单元(PDU),根据J1939-21的定义,PDU由7个部分组成:优先级(P)、扩展数据页(EDP)、数据页(DP)、PDU格式(PF)、PDU特定(PS)、源地址(SA)和数据域(Data)。具体结构如下:
- 优先级(P):包含3位,用于优化报文传输延迟,取值范围为0(最高)到7(最低)。
- 扩展数据页(EDP):预留位,当前均设置为0。
- 数据页(DP):用于分配参数组编号(PGN),当前所有报文的DP都设置为0。
- PDU格式(PF):8位,确定报文的PDU格式。当PF值在0
239(0x00-0xEF)时为PDU1格式,当PF值在240255(0xF0-0xFF)时为PDU2格式。 - PDU特定(PS):8位,内容取决于PF的取值。在PDU1格式中表示目标地址,在PDU2格式中表示组扩展(GE)。
- 组扩展(GE):当PF为PDU2格式时,PS即为GE,与PF的低四位一起提供每个数据页4096个参数组。
- 目标地址(DA):用于指定单播报文的目标地址,DA为FF时为全局目标地址。
- 源地址(SA):在网络中唯一标识一个设备,J1939-71中对商用车常用控制器的源地址进行了定义。
- 数据域(Data):数据域长度可超过8个字节,通过传输协议的连接管理能力实现多包参数组的通信。
参数组编号(PGN)
PGN是J1939标准中的唯一帧标识符,由扩展数据页、数据页、PDU格式和PDU特定字段值组成,用于唯一标识一帧报文。
可疑参数编号(SPN)
SPN是SAE分配给参数组(PGN)中特定参数的编号,用于标识数据字节中的CAN信号。SPN是一个19位数字,范围从0到524287,其中520192到524287保留给专有参数。
J1939协议在GB/T 27930中的应用
GB/T 27930标准规定了充电机与BMS之间的通信物理层采用SAE J1939-11,数据链路层选用PDU1格式。标准中还规定了充电机和BMS的源地址,并要求这些地址固定在ECU的程序代码中。通过PGN的定义,可以得到对应的报文ID,因此标准中没有直接提及报文ID,而是使用PGN进行描述。
J1939 DBC编辑
在编辑GB/T 27930的DBC文件时,如果使用支持J1939配置的CANoe,可以在CAN DB++Editor中直接编辑PGN、Source、Priority、Destination等参数,自动生成报文ID。
J1939多帧传输
对于数据长度超过8个字节的报文,需要使用SAE J1939-21的传输协议。传输协议的功能分为两个部分:消息的拆包与重组,以及连接管理。
- 消息拆包与重组:大于8字节的数据需要被拆分为多个数据包,接收者负责按编号将多个数据包重组为长数据。
- 连接管理:包含建立连接、数据传输和连接关闭三个过程。
J1939 DTC
DM1报文格式
商用车的诊断机制中,很多控制器使用SAE J1939-73 DM1报文格式发送故障码。DM1报文的PGN固定为00FECA16,其格式定义如下:
- 当节点存在多个DTC时,需要使用SAE J1939-21的传输协议进行多帧传输。首先发送一条广播公告消息(BAM),然后使用PGN=60160发送相关数据。
CANoe.J1939 DTC Monitor
CANoe.J1939提供了DTC Monitor工具,可以简单地监控诊断协议,显示/查询故障码,同时显示MIL灯、DTC历史、激活DTC、DTC、冻结帧、设置等信息。
AUTOSAR架构中J1939协议栈
在AUTOSAR CP架构中,与J1939相关的模块包括J1939DCM、J1939 Nm、J1939 Rm和J1939 TP。
诊断通信管理(DCM)
负责处理来自外部测试人员或OBD系统的诊断请求,转发请求并封装响应消息(DTC、状态信息)。
J1939网络管理
在网络管理中,J1939通过PGN=0xEE00进行地址声明,当ECU启动时会发出此声明表示自己期待分配某一地址。
J1939请求管理(RM)
用于管理请求消息的接收与发送,将请求数据转发给其他模块处理,以及对应确认消息的回复。
总结
J1939协议在商用车和工程机械行业具有广泛应用,通过标准化的PGN和SPN降低了开发工作量和成本,提高了零件的通用化率。然而,由于通信内容是明文公开的,带来了信息安全风险。在智能商用车架构中,J1939协议主要应用于底盘域和动力域,在座舱域、车身域、智驾域和网联域等已较少使用。但作为商用车企业的通信设计人员,仍需深入研究J1939协议。
文章来源:汽车电子与软件