J1939标准概述
SAE J1939标准
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板外诊断连接器
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/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提供唯一的标识。名字有两个主要目的:
- 提供ECU的描述,包括功能。
- 在主张地址时用作可用于仲裁的数字值。
J1939/81文档还描述地址主张过程的工作机制。文档中基本上定义了三种类型用于此目的的报文。
- 请求主张的地址(PGN 59904)。发送这个报文来检索网络上其它设备所使用地址的信息。
- 主张的地址(PGN 60928)。可以分成:
- 主张的地址。发送这个报文来主张一个地址或作为“请求主张的地址”报文的响应来指示一个设备的地址。
- 地址无法主张。当ECU地址主张过程失败时发送这个报文。如果ECU地址主张过程失败并接收到“请求主张的地址”报文,那么在响应中将发送“地址无法主张”。源地址被设置为0x254来指示没有地址。
- 命令的地址(PGN 65240)。这个报文用来把ECU设置为特定地址。可以通过诊断工具或互联的ECU(网桥、网关)完成此工作。
进行地址仲裁时,名字被视为一个8字节的数字值。这个值越小,优先级越高。