一文读懂CAN通讯协议(一)

简介: 一文读懂CAN通讯协议

本文力求以图文并茂来接好CAN通讯协议的基础知识,希望能给有兴趣的朋友带来一些收获。

为了便于大家理解与接受,请先看一幅图:

92e793e78a9f1e3efdc06ea059c767c5_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图1 电话会议

简单地讲CAN总线就如上图1中两根粗黄线,其通讯原理:好比开一个电话会议,大家都拨进来了,这时会议的状态可能是:

  • 一人说,其他人听;
  • 两人甚至多人同时开口了,但只会让另一人说,其他人听;
  • 一人要求另一人说;
  • 有人睡着了,掉线了,电话卡顿了... ...

针对于上述各种情况,要保证这个电话会议的有序高效地进行,那么我们需要有一些约定俗成的规定或协议,大家都遵守。CAN总线通讯与这种电话会议形式有异曲同工之处,那么CAN总线通讯到底具体是怎么回事?接下来将以理论与实践相结合方法来介绍CAN通讯协议。


第1部分 概览

感谢前人引路,激励后人前行,先简要引自: 控制器局域网CAN( Controller Area Network)属于现场总线的范畴,是一种有效支持分布式控制系统的串行通信网络。是由 德国博世公司在20世纪80年代专门为汽车行业开发的一种串行通信总线。由于其高性能、高可靠性以及独特的设计而越来越受到人们的重视,被广泛应用于 汽车业、航空业、工业控制、安全防护等领域。随着CAN总线在各个行业和领域的广泛应用,对其的通信格式标准化也提出了更严格的要求。 1991年CAN总线技术规范(Version2.0)制定并发布。该技术规范共包括A和B两个部分。其中 2.0A给出了CAN报文标准格式,而2.0B给出了标准的和扩展的两种格式

1.1 CAN总线架构简介

CAN总线是一种用于在不同的ECU(电子控制单元)之间传输数据的线,CAN总线协议是一种ISO 国际标准化的串行通信协议,有 ISO-11898 和 ISO-11519两个系列。其定义有:

  • ISO-11898 定义了通信速率为 125 kbps ~1Mbps 的高速 CAN 通信标准,属于闭环总线,传输速率可达1Mbps,总线长度 ≤ 40米,如图2。
  • ISO11519 定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于开环总线,传输速率为40kbps时,总线长度可达1000米,如图2。

47a2c5f86af093198896bd51265b51e0_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图2 两类CAN总线(引自[1])

高速CAN和低速CAN广泛应用于汽车总线,如下图3。

24a22e0660507dc7ec204bcbe2ab8213_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图3 两类CAN总线应用在汽车(引自[2])

CAN总线终端电阻的作用?为什么是120Ω?为什么是0.25W?

CAN通讯速率(位速率)与CAN总线长度的关系大致如下图。

4eb0e3c6b7979570ab4b420a00475e29_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

以上介绍了高低速CAN两种总线架构的基本概念,接下来具体看看这两种CAN总线。

1.2 CAN总线结构信息

将上图2细化,我们可以看到两种CAN总线结构都有CAN_H,CAN_L两根线和多个节点。其中CAN_H和CAN_L线是以双绞形式缠绕,每个节点都有CAN收发器(transceiver)和CAN控制器(controller),CAN收发器和CAN控制器可能集成在芯片(on-chip),也可能是独立于芯片(off-chip)。(图3列举了两种CAN收发器--TJA1054和82C250)

a9692a48b362fb9c51609be60f1e7804_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图4 两类CAN总线(引自[3])

c7bd6a7b47de773bc04232d7114b1b05_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图6 双绞线形式(提高抗干扰能力,引自附1)

附1: CAN总线抗干扰的6条“军规”zhuanlan.zhihu.com/p/26

1.3 CAN总线信号

CAN总线上,信号表现为电压形式,通过CAN_H和CAN_L线上的电位差来表示CAN信号,分为显性电平(dominant)和隐性电平(recessive)两种类型。其中显性电平规定为逻辑0,隐性电平则为逻辑1。其具体定义可通过下图来理解。

bedc1614d517004ed77fcec2043e214b_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图7 ISO-11898 (高速CAN)和ISO-11519(低速CAN)的CAN信号定义(引自[3])

具体说,如上图第1幅图:当CAN_H和CAN_L的电压均为2.5v,两者电压差为0,就规定CAN信号为隐性电平;当CAN_H的电压为3.5v,CAN_L的电压为1.5v,两者电压差为2V,就规定CAN信号为显性电平。这里实际的规定是:电压差满足定义的一定范围,就可以认为是显性电平或者隐性电平,比如电压差在1.5-2.5v范围,都认为是显性电平。

为了加深理解,看了一段实际采集的电压形式的CAN信号:

919394e4fcad256c983def9fda26d3db_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图8 高速CAN总线实际电压状态

1.4 CAN信号传输

上述的电位差(差分电平)与逻辑电平由CAN收发器实现。在发送过程,CAN控制器将CPU传来的信号转换为逻辑电平。CAN收发器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。

52f107b7014d30cd6b2f13cc9ce5aec3_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图9 CAN信号发送(引自3)

在接收过程,CAN收发器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。

69c64fbe133f8b221d37b73db7e47ea0_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图10 CAN信号接收(引自3)

通俗地讲,就是发送方通过CAN收发器使总线电平发生变化,将其信息传递到CAN总线上。接收方通过监听总线电平,将总线上的消息读入自己的CAN收发器。

由上可知:CAN总线有2种架构,CAN信号有2种形式,CAN信号发送和接收2个过程。


第2部分 CAN总线特性

为了有助于理解后面讲述的内容,先看CAN总线有什么特性。

2.1 多主工作方式

CAN总线上的所有节点没有主从之分,反应在数据传输上是:在总线空闲状态下,任意节点都可以向总线上发送信息。另外:最先向总线发送信息的节点获得总线的发送权;当多个节点同时向总线发送消息时,所发送消息的优先权高的那个节点获得总线的发送权。

662e84bf7d0494e324411ca3be57c3ca_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图11 多主工作方式示意图(引自[5])

图11说明:0x12优先级高于0x67,所以0x12先于0x67发送;紧接着0x52也要求发送,同样其优先级也高于0x67,所以0x52先于0x67发送,依次类推。这里0x12优先级高于0x67是怎么判断的呢?这就下个特点相关。

2.2 非破坏性仲裁机制

非破坏性仲裁机制是一种既不会造成已发送数据的延迟,也不会破坏已经发送的数据的仲裁机制,其具体实施需要了解CAN协议帧结构,线与机制等。其中,线与机制简单说就是位与计算,显性电平会覆盖隐性电平(换种方式理解:电路通路情况下,有一个端点接地(GND),那么整个电路电压就接地了)。

459891736e2d66e90026079880c45b9c_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图12 线与机制图解(引自[6])

c71c00654f2a059a30a54cb3bbf3625a_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

再了解线与机制后,看一个简单的仲裁例子,如下图:

d56f49e77d5c8e0858d8fb2d3d938115_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

上图:假设CAN总线上只有两个节点 A和B,它俩的ID用逻辑电平表示,我们规定:从SOF位开始,从左往右逐位比较,只要出现位不一样,比较就结束,显性电平者胜出,有权发送。

当节点A,B都发送请求时,开始逐位比较,直到它俩的ID7位,节点A为显性电平,节点B为隐性电平。根据线与机制,节点A胜出,优先发送。这就是一个大致的非破坏性仲裁过程。为了精准地实施仲裁过程,对CAN协议帧结构有严谨的设计,后续将会详细分析。

2.3 系统的柔软性

与总线相连的节点没有类似于“地址”的信息。因此在总线上增加节点时,连接在总线上的其它节点的软硬件及应用层都不需要改变。

2.4 通信速度

根据整个网络的规模,可设定适合的通信速度。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。(简单一句话理解:双方必须需要在同一频道交流,不然沟通就有障碍

8e4e47c66069842019b41a855a55a86c_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

引自[6]

2.5 远程数据请求

可通过发送“遥控帧” 请求其他单元发送数据。

366e344bc95fd5b3cd1208c097fe0724_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

引自[6]

2.6 信息广播

信息广播就如:节点A发送一条ID 0x12的信息,然后节点B,C,D都能收到。

c63255d8f02dea3aecb6187140faa06c_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

引自[5]

上图节点B,C,D最终是否会接收这个0x12发送信息,与他们设置相关,如下图只有节点B设置接收,C,D将会丢弃该条信息,这个过程与报文过滤相关。


第3部分 CAN协议帧结构

上述仲裁机制部分我们提到CAN协议帧,总的来说CAN协议帧有5种类型,下面逐个展开。

880b699708b526d40553bf91729b5974_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

引自[4]

由于数据帧与遥控帧的最大差别在于遥控帧没有数据段,所以将两者放在一起讲述:

相关文章
|
编解码 监控 网络协议
一文读懂以太网与CANoe的配置
一文读懂以太网与CANoe的配置
一文读懂以太网与CANoe的配置
|
2月前
|
域名解析 存储 网络协议
一次读懂网络分层:应用层到物理层全解析
**网络五层模型简介:** 探索网络服务的分层结构,从应用层开始,包括HTTP(网页传输)、SMTP(邮件)、DNS(域名解析)和FTP(文件传输)协议。传输层涉及TCP(可靠数据传输)和UDP(高效但不可靠)。网络层由IP(路由数据包)、ICMP(错误报告)和路由器构成。数据链路层处理MAC地址和帧传输,物理层规定了电缆、连接器和信号标准。了解这些基础,有助于深入理解网络运作机制。
229 5
|
4月前
|
存储 网络协议 Linux
|
4月前
|
网络协议 Java 网络安全
【计算机网络】—— Socket通信编程与传输协议分析
【计算机网络】—— Socket通信编程与传输协议分析
|
4月前
|
网络协议 算法 安全
|
网络协议 网络架构
LinuxUDP协议编程(下)
LinuxUDP协议编程(下)
78 0
|
4月前
|
存储 传感器 移动开发
嵌入式系统中详解 Modbus 通信协议(清晰易懂)
嵌入式系统中详解 Modbus 通信协议(清晰易懂)
933 1
|
存储 域名解析 网络协议
LinuxUDP协议编程(上)
LinuxUDP协议编程
97 0
|
IDE 开发工具 芯片