汽车CAN总线及SAE J1939协议基础

文章介绍了CAN总线的起源、网络层次结构、物理组成、报文种类和结构,强调了其在汽车领域的应用。同时,详细阐述了SAEJ1939协议,包括其特点、通信过程与原理,特别是信息识别方法和报文结构。J1939利用CAN的物理层,定义了参数组和应用层规范,以解决商用车通信问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、CAN总线

CAN (Controller Area Network),即控制器局域网,1986年由德国BOSCH公司提出,用以解决汽车技术问题,后被广泛应用于汽车和工业自动化等领域。CAN技术规范2.0A 、2.0B以及ISO11898国际标准是设计汽车高速网络系统的基本依据和规范。 同样作为串行通讯技术,CAN总线相比RS232/RS485协议更加规范,速率更快,最高通信速率1Mbps(该速率最远通信距离可达40m)。
1.1 计算机网络层次结构模型

学习CAN 总线前需要先了解下计算机网络的层级结构,ISO提出了OSI(Open Systems Interconnection Reference Model),这个模型定义了如下内容:

(1) 单个网络节点有7层框架,如下图1。

图1 OSI模型及CAN网络

看到这,相信很多人和我一样,一下明白了,原来平时人们常说的这个层那个层就是指的OSI结构的层次。7层中,物理层(physical layer)、数据链路层(Data-link layer)和网络层(Network layer)通常被称作底层。

(2)多个节点时,不同节点有相同的层次,相同层次要有相同的功能,同一节点的相邻层有接口通信,每层使用下层服务并向上层提供服务。

(3)不同节点同层按照协议完成通信。

1.2 CAN-Bus系统物理组成

CAN总线可以将多个电子控制单元(ECU)连接在同一局域网内,实现各个ECU间的信息共享。如图1中所示,CAN网络结构符合OSI的层模型,而其物理结构组成如图2

图2 CAN网络物理结构

系统主要由两根物理线缆、若干MCU、CAN控制器和CAN收发器组成。CAN收发器通常单独做成芯片,CAN控制器可以集成在ECU中也可以单独做成芯片,独立的CAN控制器可以和多种ECU连接,使用灵活方便。CAN网络的每个节点都可以是主机,且通信时不采用寻址方式(节点数量不受地址数目限制,但受总线负载能力限制),只要总线空闲,任意节点都可以向总线上广播消息。它和我们平时听过的I2C,uart通信一样都属于串行通信技术,I2C(芯片间短距离通信)两根线,一根数据线,一根时钟线;UART两根线,一根收信号,一根发信号。I2C和UART的特点是使用一根线就可以传输0 1 0 1的高低电平信号。但CAN通信和它们不同, 每一个逻辑0 或1都需要由两根线共同协作实现,即通过差分信号电路对两根线上的电压作差,根据差值确定逻辑信号是0还是1。这种通信方式可以提高信号的抗干扰能力。

1.3 CAN报文种类/帧类型

我们人与人交流时的语言有多种类型,例如通知类:“今天下午2点钟所有人在会议室集合“,询问类:“会议室钥匙在谁那里,请告知”等等,CAN通信类似,也定义了4种类型的帧来实现不同的功能:

(1) 数据帧

节点向外发送数据时使用该类型报文,比较基本和普遍的的一种帧类型

(2) 遥控帧/远程帧

所谓远程或遥控的意思就是节点向远处请求数据时使用的帧类型,例如某个节点A作为接收端想知道发动机水温,它就发送一个请求帧,询问。

(3) 错误帧

数据帧发送后,接收端接收后进行校验,校验后得到的校验码不对,接收错误,此时接收端发送错误类型报文,要求重新发送。

(4) 过载帧

通知远端节点,接收端没有做好接收准备,用于在数据帧或远程帧间增加附加延时。

1.4 CAN报文的结构

我们知道计算机通信时实际传输的就是0 1 0 1的高底电平,而人为的约定可以赋予这些数字组合以实际的意义,所以要传递具体的消息,就必须对传输的数据规定一下结构,或者说是格式。CAN 的数据帧有两种格式:CAN 2.0A标准帧和CAN 2.0B 扩展帧。标准帧结构如图3。

图3 CAN标准帧结构

每一帧数据自左向右依次为帧起始、仲裁段、控制段、数据段、校验段应答段和帧结束。

二、 SAE J1939协议

J1939协议是一种典型的应用协议,使用了CAN网络国际标准(ISO 11998-1 和 ISO 11998-2)的物理层,主要用于解决商用车的通信问题,除了J1939协议,常见的还有CANOpen和DeviceNet等。

J1939所拥有的特点包括:

(1) 该协议规定通信数据采用扩展帧格式。

(2) 在应用层定义了参数组

(3) 支持用户特定参数组

(4) 诊断功能

(5) 点对点的广播通信

Tips:扩展帧相比标准帧而言增加了18位的标识符,因此,它具有更强的信息表达功能,参与1939协议通信的所有ECU都需要有一个唯一的名字(64位数据,动态地址分配时用于确认优先级),同时每个节点还分配有一个唯一的地址(8位数据)。

J1939基于OSI模型对网络的各层有相应的定义和规范,并发布了一些列规范文档,官方文档命名规则如图4:

图4 文档命名规则

例如:

SAE J1939/21 :数据链路层文档,定义信息帧数据结构,编码规则等。

SAE J1939/71 :应用层文档,定义了一系列以协议数据单元(PDU-Protocol Data Unit)形式存在的物理参数和消息。

2.1 SAE J1939通信过程与原理

(1)信息识别方法

OSI模型中,越靠近上层,信息的处理方式越与人有关,当节点A向节点B发送数据时,消息由A节点应用层向下传到物理层,通过电路传给B节点物理层,再由B节点物理层传递到B节点的应用层,这样,我们用CAN工具测量时,便可以得到我们可以识别的消息。

现在有一个问题。

一个汽车有很多电子控制单元,车门、发动机、变速器、ABS等等,每个电子控制单元内又包含很多传感器,由于CAN通信不存在分配的片上物理地址,当总线上有报文的时候我们如何能知道这个报文的来源以及其包含的信息含义呢?

为了解决这个问题,J1939应用层文件需要提前对被控/被测量对象做出各种定义,应用层将各个物理参数分组管理,根据某些特性将一部分参数编成一个组,并给这个组一个编号。这样就有了参数组编号的定义。

PG--Parameter Group: A set of parameters belongs to the same topic and sharing the same transmission rate.

PGN--Parameter Group Number: Each PG is addressed via a unique number-the PGN.

Tips: 一帧数据通过ID优先级对比上了总线后,根据源地址(1939网络管理层要求每个节点需要有一个8位的地址编码)可以确定它来自哪个ECU,然后根据对比PGN定义进一步锁定信息的参数来源,从而得知数据域中数据的具体含义。

(2)扩展帧的报文结构

大致了解了PGN后再来看看帧的结构,如图5。

图5 扩展帧结构

扩展帧的ID位有29位,PDU对各个位的定义如下:

P:Priority 3个bit,用于判断报文的优先级;

R:Reserved 保留位,1个bit, 便于以后扩展;

DP: Data Page,页码,页码0中参数排满后在页码1继续排;

PF:PDU Format ;

PS:PDU Specific;

SA: Source Address(网络中一个特定的源地址只能匹配一个设备)。

TIPS:PDU指的就是协议数据单元,由ID和数据域两部分构成。

ID中的R、DP、PF、PS共18位是PGN的来源,PGN共24个Bit,其余6位置零。如图6.

图6 PGN构成

PF共8位,0-255,当PF<240时,说明是点对点通信,向特定目标通信,这时PS用于表示目标地址,不用于构成PGN,PGN后8位补0。当PF>=240时,采用广播式通信,这时PS用于构成PGN。以上可以知道,一个数据页码DP内共有PGN的个数为

(),其中240+(16∗256)=4336,其中28=256240+(16*256)=4336, 其中2^8=256

举个例子:从应用层文档定义来看PGN 37376

图7 PGN实例

文档对编号进行了定义,同时可以计算验证,37376就是DP、PF换算过来的,其中十进制146转换成十六进制是92,即0x009200。

我们从这个样例中看到了SPN,这是应用层文档对物理参数或状态做的定义。

SPN—Suspect Parameter Number: SPN is assigned to each parameter of a PG or component. SPN用于诊断目的,可以报告识别控制器程序的异常操作。

注意:集合PGN和集合SPN存在交集但不是相等和包含关系。

(3)通信原理

报文ID中可以获得源地址、目标地址、数据含义、优先级等信息,SRR是扩展帧特有位,没有实际意义,用于占位,为隐性位,IDE位用于区分标准帧和扩展帧,标准帧该位置0,扩展帧置1,RTR位用于区分数据帧和遥控帧的。DLC用于表示传输数据域的数据长度。这些逻辑位值均通过物理层定义的电路完成传输,如图8

图8 CAN物理层数据传输原理

总线上同一时刻只能有一个节点发消息,逻辑0为显性位,逻辑1为隐性位,在所有节点依次按位向总线上发ID时,谁先发出0,谁占领总线,因此说明,优先级数字中,数字越小优先级越高。其它位的数据发送原理相同。

说明:图8为CAN通信收发数据的基本原理图示,图中电路及电阻电压等参数不代表1939网络的实际情况。

以上-------------------------------

声明:尊重原创,严谨抄袭,转载请注明出处!

参考资料:

[1]Vector Group | Vector

[2] 李真花,崔健等. CAN总线轻松入门与实践[M],北京航空航天大学出版社,2011.

[3]杨春杰,王曙光等. CAN总线技术[M], 北京航空航天大学出版社,2010.

汽车CAN总线及SAE J1939协议基础 - 知乎 (zhihu.com)

<think>好的,用户想了解J1939协议的详细信息。首先,我需要回忆一下关于这个协议的基本知识。根据用户提供的引用内容,J1939是基于CAN总线的高层协议,主要用于商用车和工程机械的电子控制单元通信。SAE制定的标准,时间在1980年代中期,目的是实现不同制造商的ECU之间的标准化通信。 接下来,我需要整理J1939的核心结构。根据引用[3],协议中涉及到PF、PS等字段,用于确定参数组编号(PGN)。这里可能需要解释PDU格式,比如PDU1和PDU2的区别,以及目标地址和组扩展的作用。此外,数据链路层和应用层的关系也需要说明,特别是广播和点对点通信的实现方式,如引用[2]提到的,虽然CAN是广播,但应用层决定了具体的通信方式。 然后,协议的应用场景和物理层部分。根据引用[1],J1939主要用于柴油发动机以及与变速箱、制动器等组件的通信,物理层是CAN,符合ISO标准。这部分需要详细说明ECU的类型和通信速率,可能涉及到具体的报文结构和优先级设置,比如优先级字段prior的作用。 还要注意用户提供的代码结构体,里面包含了PF、PS、prior等字段,这可以用来举例说明协议的数据结构。需要解释每个字段的含义,比如PF的范围如何影响PS的解释,以及帧类型和传输类型的作用。 用户可能还关心J1939与其他协议的区别,比如和CANopen的不同,或者实际应用中的案例。但根据问题,用户目前只需要详解,所以应集中在结构、通信方式、应用场景等方面。 最后,生成相关问题,确保覆盖用户可能进一步提问的方向,如应用层实现、PGN计算、与其他协议对比等。需要确保问题有针对性,帮助用户深入理解。 总结回答结构:概述、协议结构、通信方式、应用场景、报文示例、相关引用。每个部分结合提供的引用内容,确保准确引用标记。保持语言简洁,技术细节清晰,避免使用复杂术语但不失专业性。</think>### J1939协议详解 #### 1. **协议概述** SAE J1939是基于CAN总线的高层通信协议,主要用于商用车(如卡车、工程机械)和柴油发动机控制系统的电子控制单元(ECU)间通信。其核心目标是实现不同厂商设备的标准化交互[^1]。 #### 2. **协议分层结构** - **物理层**:基于CAN 2.0B(扩展帧),支持最高250 kbps的通信速率,满足复杂车载网络需求。 - **数据链路层**:使用广播通信,但通过应用层实现点对点或广播模式。例如,应用层通过目标地址字段(DA)指定接收节点[^2]。 - **应用层**:定义参数组编号(PGN)、报文优先级等。PGN由PDU格式(PF)和特定字段(PS)共同决定: - 当$PF \in [0, 239]$时,采用PDU1格式,PS为目标地址(DA); - 当$PF \in [240, 255]$时,采用PDU2格式,PS为组扩展,报文仅支持广播[^3]。 #### 3. **关键参数组(PGN)** PGN计算公式为: $$PGN = (PF \times 256) + PS \quad (\text{PDU1格式})$$ $$PGN = (PF \times 256) + 0 \quad (\text{PDU2格式})$$ 例如,PF=0xCF(十进制207)时,PGN为$207 \times 256 + PS$。 #### 4. **报文格式示例** ```c typedef struct { uint8 pf; // PDU格式字段(0-255) uint8 ps; // 目标地址或组扩展 uint8 prior; // 优先级(0-7,0最高) uint8 framtype; // 帧类型(标准/扩展) uint8 transtype;// 传输方向 uint16 rate; // 通信速率(Hz) } CCS_SLAVE_PROTOCAL_CONST_PARA; ``` #### 5. **应用场景** - **发动机控制**:传递转速、油温、故障码等(如PGN=61444对应发动机参数)[^1]。 - **制动系统**:协调ABS与变速箱的联动控制。 - **诊断功能**:支持标准化诊断报文(如DM1/DM2)。 #### 6. **通信模式对比** | 模式 | 实现层级 | 特点 | |-------------|------------|--------------------------| | 广播 | 数据链路层 | 所有节点接收,无需目标地址 | | 点对点 | 应用层 | 需指定目标地址(DA) |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值