什么是SAE-J1939?
SAE-J1939(以下简称J1939)是美国汽车工程协会(SAE)的推荐标准,广泛用于是商用车(重卡、大客车等道路车辆和工程机械、农业机械、轨道机车、船舶等非道路车辆及设备)上电子部件间的数字通讯。
二
SAE-J1939与CAN2.0的关系
CAN2.0(前文指路)是一种总线规范,是数据链路层的技术。J1939是SAE(美国汽车协会)基于CAN总线定义的的规范,主要用于解决不同发动机厂商、不同ECU厂商之间的兼容性问题。
J1939定义了一系列的PGN和SPN,这些PGN包含了发动机、变速器、车轴等汽车上各部件的信息;对参数的表示方法(状态和值)又定义了SLOT(Scaling—比例、Limit—界限、Offset—偏移、Transfer—传送)。ECU厂商开发设备时都应该遵循这个规范。ECU模块的功能不同、厂商不同,在J1939的基础上,又表现出其多样性:支持或者不支持某些PGN、SPN和SLOT;新增了某些J1939未定义的PGN和SPN。
三
SAE-J1939与CAN2.0B消息帧格式
CAN2.0规范包括CAN2.0A(标准帧格式),CAN2.0B(扩展帧格式),二者使用不同的帧格式位码。J1939是在CAN2.0B的基础上进一步封装,对仲裁场部分的29位ID的重新定义。SAE-J1939中只为扩展帧格式定义了标准化的通信,因此,SAE-1939设备必须使用扩展帧格式。
SAE-J1939将每个数据帧(PDU,协议数据单元)融合进一个CAN2.0数据帧中,其结构如下:
CAN扩展帧的数据帧格式与SAE-J1939协议数据单元对比如下图:
参数群编号(PGN):
PGN对于制定基于SAE-J1939的CAN协议来说十分重要,很多ECU厂商规定在接受CAN报文时识别的就是PGN而不是整个报文的ID。参数群编号是由24位组成的(其实是18位),主要包括下面几个部分:保留位(R,1bit,默认为:0),数据页位(DP,1bit,多数情况下为:0),PDU格式(PF,8bit)和特定PDU(PS,8bit,目标地址是否群扩展)。当PF值为:0~239之前时PGN的低字节将被设置为:0;当PF值为240~254之时,PGN的低字节为PS的值。PGN结构如下表: