J1939标准概述

SAE J1939标准

可以从SAE网站购买完整版规范;这里是规范概述。

J1939由下列子标准组成:

  • J1939 – 串行控制和通信车辆网络的建议实践
  • J1939/11 – 物理层 – 250k bits/s,屏蔽双绞线
  • J1939/13 – 板外诊断连接器
  • J1939/21 – 数据链路层
  • J1939/31 – 网络层
  • J1939/71 – 车辆应用层
  • J1939/73 – 应用层– 诊断
  • J1939/81 – 网络管理

 

J1939/11物理层

总线的物理特性:

  • 屏蔽双绞线
  • 最大40米
  • 250 kbit/s
  • 最多30个节点(ECU)
  • 基于ISO11898

 

J1939/13板外诊断连接器

本文档为诊断目的定义一种标准的连接器。描述的连接器是Deutsch HD10 – 9 – 1939,这是一种9针圆形连接器。

j1939-obd-connector1
J1939板外诊断连接器

 

J1939/21数据链路层

本文档定义CAN帧(29位标识符和PGN等)的使用和传输协议函数,这些函数定义超过8字节的报文如何在J1939总线网络上传输。

J1939报文被组织成协议数据单元(PDU),由一个标识符和8个数据字节组成。大于单个字节的数值数据采用最低有效位优先(LSB)的发送方式。J1939使用支持扩展标识符(29位)的CAN 2.0B。CAN标识符包含一个优先级(3位)、一个保留位(1位)、一个数据页(1位)、PDU格式(1个字节)、PDU特定地址(1个字节)和源地址(1个字节)。

有两种不同的PDU格式。PDU1格式用于发送包含一个特定目的地址的报文。PDU2格式只能用于广播发送。标识符中的PDU格式字节确定报文格式。如果PDU格式字节小于240 (0xF0),那么格式是PDU1。如果大于239,那么格式是PDU2。

本J1939文档还描述5种类型的报文:命令、请求、广播/响应、确认和组函数。

传输协议提供函数用于传输超过8个字节的报文(因为单个CAN帧无法容纳这样的报文)。在J1939中,这些报文被分割成7字节的数据包,每个包带有一个序号。有特殊的连接管理(CM)报文用于处理分割的报文的通信。这些报文的例子包括:请求发送(RTS)、清除发送(CTS)和广播宣布报文(BAM)。分割的报文可以被发送到特定的设备或进行广播。CM报文在发送方和接收方之间提供一个虚拟连接和一个握手过程。发送方请求发送一条分段的报文,然后接收方回应此时它可以接收多少个段(图4)。如果发送方和接收方之间没有进行握手,分段的报文也可以作为广播进行发送。

j1939-transmission-segmented-messages1

 

J1939/31网络层

本文档描述J1939网络不同段之间进行通信需要的服务和功能。段可以是一个子网,按照“看到”相同信号的ECU进行划分。J1939/31描述四种为段之间网络互连提供功能的ECU类型:转发器(转发)、网桥(转发和过滤)、路由器(转发、过滤和地址转换)和网关(转发、过滤、地址转换和报文重组)。

 

J1939/71车辆应用层

本文档描述和定义“标准”参数,这些参数一起分组到一个报文帧中并被赋予一个PGN。本文档大概每年更新四次,以包含新的标准参数和报文。

文档中定义有不同长度的参数:1、2和4字节。如果参数最高有效字节的值是0xFE,表示存在错误。如果值是0xFF,表示参数不可用。本文档还建议合适的标度、限制和偏移(根据参数的长度和物理特性)。

参数的描述开始处是一个名字和所表示值的解释(也就是说,用来获取参数值的计量方法)。然后,后面的信息描述参数的内容:

  • 数据长度(字节)
  • 精度(标度和偏移、测量单位)
  • 数据范围(标定刻度后物理值的范围)
  • 类型(状态、测量得到的值)
  • 可疑参数号(SPN)(参数特定的号码)
  • PGN(代表放在其中进行发送的报文帧)

每个参数组都有一个名字,后面跟下列信息:

传输重复率(一个时间间隔或按照请求)

  • 数据长度(字节)
  • 数据页(0或1,与PGN有关)
  • PDU格式(0到255,与PGN有关)
  • PDU特定信息(取决于PDU格式)
  • 默认的优先级(值在0和7之间, 0是最高优先级)
  • 参数组号(PGN)
  • 数据参数字节(所有参数都包含引用和字节序)

大部分内部报文以广播形式发送,没有特定的目的地址。

 

J1939/73应用层 – 诊断

本文档定义用于访问诊断和校准数据的函数和报文。有一些预定义的诊断报文用来:

  • 读写ECU内存
  • 在运行时报告诊断信息
  • 标识灯状态
  • 读取和清除诊断故障码(DTC)
  • 启动/停止广播DM

本文档更新的版本包含关于诊断故障码(DTC)说明的额外信息。DTC是一个从J1587继承而来的32位标识符,包含4个元素:可疑参数号(SPN)、故障模式标识符(FMI)、发生次数(OC)和SPN转换方法。DTC和源地址一起标识一个组件或子系统。

 

J1939/81网络管理

本文档中的信息包含ECU名字的内容以及ECU如何使用名字来主张一个地址。名字是一个64位(8字节)长的数字,为每个ECU提供唯一的标识。名字有两个主要目的:

  1. 提供ECU的描述,包括功能。
  2. 在主张地址时用作可用于仲裁的数字值。

J1939/81文档还描述地址主张过程的工作机制。文档中基本上定义了三种类型用于此目的的报文。

  1. 请求主张的地址(PGN 59904)。发送这个报文来检索网络上其它设备所使用地址的信息。
  2. 主张的地址(PGN 60928)。可以分成:
    1. 主张的地址。发送这个报文来主张一个地址或作为“请求主张的地址”报文的响应来指示一个设备的地址。
    2. 地址无法主张。当ECU地址主张过程失败时发送这个报文。如果ECU地址主张过程失败并接收到“请求主张的地址”报文,那么在响应中将发送“地址无法主张”。源地址被设置为0x254来指示没有地址。
  3. 命令的地址(PGN 65240)。这个报文用来把ECU设置为特定地址。可以通过诊断工具或互联的ECU(网桥、网关)完成此工作。

进行地址仲裁时,名字被视为一个8字节的数字值。这个值越小,优先级越高。