欢迎光临散文网 会员登陆 & 注册

K课堂 | 深入解析CAN总线常见高层协议J1939标准(上篇)

2023-03-16 20:00 作者:KVASER克萨CAN总线  | 我要投稿

SAE J19399 (以下简称J1939) 是美国汽车工程协会 (SAE) 的推荐标准,也是CAN通讯开发常用的协议,用于为中重型道路车辆上电子部件间的通讯提供标准的体系结构。它由“卡车与大型客车电气与电子委员会” (Track & Bus Electrical & Electronics Committee) 下属的“卡车与大型客车控制和通讯网络附属委员会” (Track & Bus Control and Communications Network Subcommittee) 开发编写。

J1939描述了重型车辆现场总线的一种网络应用,包括CAN网络物理层定义、数据链路层定义、应用层定义、网络层定义、故障诊断和网络管理。在SAE J1939协议中,不仅仅指定了传输类型、报文结构及其分段、流量检查等,而且报文内容本身也做了精确的定义。J1939是在商用车辆、舰船、轨道机车、农业机械和大型发动机中应用最广泛的应用层协议。

本篇内容根据Kvaser《J1939概述》内容进行整理,简要介绍SAE J1939标准,深入讲述报文架构以及SAE规范指南,希望能对CAN总线技术的学习者有所帮助。

内容框架如下:

上篇(本篇内容)

J1939 简介:简介、特点、SAE J1939标准

J1939 详述:报文格式和使用方法(J1939/21)、地址和名称 (J1939/81)、地址声明、发送报文(J1939/21 和 J1939/7x)、TP_BAM 报文、TP_CM 报文、报文接收(J1939/21 和 J1939/7x)

下篇(将于3/22发布)

J1939: 详述:ECU 设计(J1939/1x,J1939/21 和 J1939/7x)、接线拓扑 - 物理层(J1939/1x)、如何解读 J1939 报文的示例

其它:获取完整版 J1939 规范文件、比较 J1939 兼容软件套件、订购 J1939 诊断电缆

附录 A:J1939/11 物理层、J1939/13 – 非车载诊断连接器、J1939/21 – 数据链路层、J1939/31 – 网络层、J1939/71 – 车辆应用层、J1939/73 应用层 – 诊断、J1939/81 – 网络管理

简介

J1939 是由美国汽车工程师协会 (SAE) 定义的一组标准。J1939 标准用于卡车、公共汽车和移动液压等重型车辆的电气系统设计。

J1939 规范为物理层、诊断连接器和多层报文架构提供了方向。在许多方面,J1939 类似于旧版J1708 和 J1587 标准,但 J1939 建立在 CAN (控制器区域网络,ISO11898) 上。

对于重型车辆行业也许最重要的是,J1939 规定了用于在电气总线上通信的一组标准的报文参数组 (称为 PGN) 。一组“自定义”报文参数也保留给专有第三方使用。这提供了两个好处

➡ 用于更快设置的标准化系统

➡ 能够根据自身需求进行定制

特点

J1939具有以下特点

◾ 基于 CAN 的高层协议

◾ 用于重型车辆

◾ 传输速度稳定在 250kbps

◾ 对等和广播通信

◾ 用于网络管理

◾ 包括商用车辆和其它车辆的参数组的定义

◾ 支持制造商特定的参数组

SAE J1939 标准

J1939 由以下子标准组成:

◾ J1939 – 串行控制和通信车辆网络的建议实践

◾ J1939/11 – 物理层 – 250kbps,屏蔽双绞线

◾ J1939/13 – 非车载诊断连接器

◾ J1939/21 – 数据链路层

◾ J1939/31 – 网络层

◾ J1939/71 – 车辆应用层

◾ J1939/73 – 应用层– 诊断

◾ J1939/81 – 网络管理

有关这些规范的详细信息,请查看“附录A”。

报文格式和使用方法(J1939/21)

J1939 标准定义的大部分报文均旨为数据通信。这意味着网络中传输的数据没有指定目标地址。

这样任何想要使用数据的设备都不需要再额外请求报文。将来的软件升级也可以方便兼容新设备 (地址分配) 。当报文必须指向特定设备时,可以在报文标识符里包含特定的目标地址。例如,请求来自发动机的特定扭矩值,而不是来自制动控制器的特定扭矩值。

J1939 使用 CAN 2.0B 协议中定义的 29 位标识符,如图 1 所示。含有指定目标地址的报文 (“PDU1”) 与旨在广播的报文 (“PDU 2”) 使用的标识符略有不同。

PDU 是协议数据单元 (即报文格式) 。

SOF,SRR 和 IDE 位由 CAN 标准定义,这里忽略。RTR 位 (远程请求位) 在 J1939 中总是设置为0。

J1939 中使用的 29 位标识符结构如下。

表 1: 29 位标识符的结构

标识符的前三位是用于在仲裁过程中控制报文的优先级。0 值拥有最高优先级。更高优先级值通常用于高速控制报文,例如从传动装置至发动机的转矩控制报文。包含时间不重要的数据的报文,例如车辆行驶速度,会被赋予较低优先级值。

标识符的下一位将保留备用,在报文发送中应设置为 0。

标识符中的下一位是数据页选择器。此位扩展可由标识符表示的潜在参数组的数目。

协议数据单元格式 (PF) 用于确定是否可以作为包含目标地址报文发送或者报文总是作为广播报文发送。

对特定协议数据单元 (PS) 字段变化的解释以 PF 的值为依据

➡ 如果 PF 处于 0 和 239 之间,则报文可寻址,且 PS 字段包含目标地址。

➡ 如果 PF 处于 240 和 255 之间,则报文只能广播 (PDU2) ,且 PS 字段包含组扩展。

* 组扩展扩展了可由标识符表示的潜在广播参数组的数目。

术语参数组编号 (PGN) 适用于将保留位、DP、PF 和 PS 字段的值合并成单个 18 位的值。

例如: 身份 0xcf004ee 可分为表 2 所示字段。

表 2: PGN 示例

◾PGN = R,DP, PF 和 PS 字段 – 在本例中为 0x0F004。

◾ PF = 0xF0 = 240,即这是 PDU2 (广播) 报文

◾ PS = 0×04,即组扩展 = 4

标识符的最后 8 位包含发送报文的设备的地址。地址是被分配以提供唯一地访问网络上的给定设备的方式的标签或“句柄”。对于给定的网络,每个地址必须是唯一的 (可以有 254 个) 。这意味着两个不同的设备 (ECU) 不能使用相同的地址。

地址和名称 (J1939/81)

名称是一个 64 位 (8 字节) 长的标签,赋予每个 ECU 一个独特的身份。名称由 10 个字段组成,并具有表 3 所示的以下结构。

表 3: 名称的结构

◾ 任意地址位

◾ 行业组,长度 3 位

◾ 车辆系统实例,长度 4 位

◾ 车辆系统,长度 7 位

◾ 保留位

◾ 函数,长度 8 位

◾ 函数实例,长度 5 位

◾ ECU 实例,长度 3 位

◾ 制造商代码,长度 11 位

◾ 身份号码,长度 21 位

名称的主要目的是描述 ECU。较低的函数字段值,0 到 127,预分配给“标准”函数或设备。128至254 的值取决于工业组和车辆系统值。这种依赖性使得不同车辆可能具有相同的函数配置。该系统还允许诸如拖车和农用车辆等设备限制对可用地址的搜索,且因此尽可能缩短动态声明地址的时间以及降低其难度。当声明地址时,名称用于确定哪个 ECU 具有更高的优先级,因此将获得声明的地址。

网络上的每个设备将与至少一个名称和一个地址相关联。然而,多个设备名称和多个地址可以在单个 ECU 中共存。例如,驻留在具有单个物理总线连接的公共设备中的发动机和发动机制动器 (减速器) 。设备地址定义报文的特定通信源或目标。名称可标识功能,当网络中有多个同类设备共存时,可为功能添加一个唯一的实例编号。受地址限制,只有 254 个相同类型的不同设备可以共存于网络上。地址 255 被保留作为用于广播的全局地址,而地址 254 被保留作为尚未声明地址或未能声明地址的设备所使用的“空地址”。

地址声明

通常,大多数地址被预分配并在接通电源时立即使用。为了允许 J1939 兼容未定义的未来设备和功能,已经规定了用于动态分配地址的过程。每台设备需表明与之相关联的地址。这便是标识 (地址声明) 属性。有两种选择:

➡ 发送地址声明报文以声明地址

当设备发送地址声明报文以声明地址时,所有设备都会将该新声明的地址与其自身网络上的设备列表进行比较。如果该地址已被有更高优先级的设备声明,设备会发送一条包含地址已被使用的地址声明报文。名称,在地址声明报文中以数据的形式发送,用于确定哪个设备具有更高的优先级。

➡ 发送地址声明请求

当设备发送地址声明请求时,所有设备通过发送其地址已声明报文进行响应。这允许过渡设备 (工具,追踪器等) 或即将工作的设备获得当前的地址表,使其可以选择和声明可用地址。如图 2。

可选择支持动态地址分配,只有那些可能会遇到地址冲突的设备必须支持此功能。为了消除支持动态地址分配和加速该“身份过程”的需要,大多数 ECU 与首选地址相关联。这些首选地址在J1939/71 文件中有描述。如果首选地址已经被另一个 ECU 使用,则如果设备支持自配置,设备可以尝试声明另一个地址。

地址声明 (复杂情况不考虑)

发送报文(J1939/21 和 J1939/7x)

要发送特定数据项,报文中必须有描述待发送数据的间接费用。相关数据项通常打包在报文内以减少间接费用。J1939/71 文件定义了一些标准 PGN,用于描述报文中待发送的参数。J1939/71文件还包括关于报文优先级和传输速率的信息。注意,当设备没有可用于给定参数的数据时,应该包含该参数的字节被设置为“不可用” (0xFF) ,使得接收方获知数据丢失。需要多于 8 字节数据的报文可以作为多包报文发送。多包报文通过 J1939/21 文件中定义的传输协议函数传输。

然而传输多包报文有两种方式

➡ 广播通知报文(TP_BAM)

➡ 连接管理(TP_CM)

TP_BAM 报文

TP_BAM 报文使用全局目标地址,意味着网络中的所有设备都能接收到这些报文。使用连接管理 (CM) 报文 (PGN = 0x00EC00) 开始传输,控制字节指示 TP_BAM。紧随其后的报文数据是数据传输 (DT) 报文,PGN = 0x00EB00。

TP_CM 报文

TP_CM 报文在两个设备间点到点发送。传输开始于具有指示请求发送 (RTS) 的控制字节的 CM报文。接收设备以指示清除发送 (CTS) 的控制字节的连接管理 (CM) 报文响应。然后传输设备使用数据传输 (DT) 报文发送 CTS 中指示的数据部分。CTS 和 DT 报文持续进行握手直到全部报文传送完成。在报文完成时,接收设备发送具有指示报文结束应答结束 (EOM) 的控制字节的 CM报文,连接被终止。注意,为了使该过程运作,CM 报文会根据控制字节内容带有附加数据。RTS包括:传送数据的字节数、分组数和 PGN。CTS 包括接收设备所预期的分组数和开始的分组号。

报文接收(J1939/21 和 J1939/7x)

从网络中捕获所选择的报文可以使用不同的技术手段 (和芯片) 。然而,关于所接收的报文,可以使用几种普通的观察方法

➡ 如果报文是目标特定请求或命令,则设备必须确定目标地址是否与设备声明的地址匹配。

如果匹配,则接收设备必须处理报文,并提供某种类型的应答。

➡ 如果报文是全局请求,则每个设备,包括发起设备,都必须处理请求,并在数据可用时做出响应。

➡ 如果报文是广播,则每个设备必须确认内容是否相关。



K课堂 | 深入解析CAN总线常见高层协议J1939标准(上篇)的评论 (共 条)

分享到微博请遵守国家法律