CAN通信详解

什么是CAN通信?

CAN(控制器局域网)是一种串行通信技术,专门用于汽车电子控制单元(ECU)之间的可靠数据交换。

为什么要使用CAN通信?

起初,独立操作的电子ECU足以实现电子功能。然而,人们意识到,电子控制单元(ECU)的协调可以极大地增强车辆的功能。电子控制单元之间的数据交换最初是按照惯例实现的,即为每个要传输的信号分配一个物理通信通道(如下图左侧所示)。然而,密集的布线工作只能实现有限的数据交换。似乎唯一能摆脱这种困境的解决方案是通过单个通信通道(总线)进行串行数据交换。因此,需要根据汽车的要求构思一个串行通信系统。
在1980年代初,博世开始开发这种串行通信系统。它被命名为CAN(控制器局域网)。即使在今天,CAN仍然在动力总成、底盘和便利领域的联网ECU中为机动车辆提供有用的服务。最重要的是,CAN的特点是数据传输非常可靠,可以满足目标使用区域的实时性要求。自从引入CAN以来,汽车中复杂的线束(通常具有许多变体)已成为过去。CAN不仅可以简化项目规划和安装,还可以减少布线重量和空间要求(入下图右侧所示)。
整车各个ECU之间的通信拓扑变化

CAN通信标准

自 1994 年以来,CAN 技术已实现标准化,并由四份 ISO 文件描述。

<1>.ISO 11898-1

ISO 11898-1 描述了 CAN 协议。关于数据通信的参考模型,CAN协议仅涵盖数据链路层(MAC - 介质访问控制,LLC - 逻辑链路控制)和物理层(PLS - 物理信令)。
CAN协议是在硬件中实现的。许多不同的CAN控制器已经可用,它们仅在处理CAN报文的方式上有所不同。这些差异体现在对象层中。带对象存储的CAN控制器(所谓的全CAN控制器)和不带对象存储的CAN控制器(所谓的基本CAN控制器)是有区别的。

<2>.ISO 11898-2 & ISO 11898-3

ISO 11898-2 和 ISO 11898-3 这两个 ISO 文档涵盖了数据通信参考模型的两个子层:PMA(物理介质附件)和 PMS(物理介质规范)。它们描述了两个不同的CAN物理层:高速CAN物理层和低速CAN物理层。它们的主要区别在于对电压和数据传输速率(数据速率)的定义。ISO 11898-3 允许高达 125 kbit/s 的数据速率。它主要用于汽车的便利区。ISO 11898-2 允许高达 1 Mbit/s 的数据速率。因此,ISO 11898-2 主要用于汽车的动力总成和底盘领域。物理层的 MDI(介质相关接口)子层不存在标准。CiA DS-102 (CiA: CAN in Automation)仅建议使用非常特定的连接器(SUB-D9)以及符合非常特定的连接器引脚分配。ISO 11898-1 定义了事件驱动的通信。总线负载越高,这可能会导致延迟,特别是对于优先级较低的CAN报文。

<3>.ISO 11898-4

ISO 11898-4标准确保CAN网络中的确定性通信。ISO 11898-4 是数据链路层的扩展,它为基于 CAN 的网络添加了时间触发通信选项。

下图显示了数据通信的ISO/OSI参考模型、CAN标准及其实现之间的关系。
在这里插入图片描述

CAN网络的构成

CAN网络由许多CAN节点组成,这些节点通过物理传输介质(CAN总线)链接在实践中,CAN网络通常基于具有线性总线的线路拓扑结构,每个线性总线上都通过CAN接口连接到许多电子控制单元(如下图所示)。无源星形拓扑结构可用作替代方案。
非屏蔽双绞线是应用(非屏蔽双绞线 — UTP)中最常用的物理传输介质,通过它进行对称信号传输。通常,UTP 的导线横截面在 0.34 mm 之间2和 0,6 毫米2.线路电阻应小于 60 mΩ。最大数据速率为1 Mbit/s。允许的最大网络扩展约为 40 米。
在CAN网络的两端,总线终端电阻器有助于防止瞬态现象(反射)。ISO 11898 将 CAN 节点的最大数量指定为 32。
CAN 网络拓扑结构随着汽车电子化程度的提高,软件的数量和复杂性也在迅速增长。一些豪华车已经拥有 1000 多种软件功能。在许多总线系统中,有 70 多个电子控制单元 (ECU) 在工作。
在CAN网络中执行其任务的ECU称为CAN节点。在ECU网络的最初阶段,CAN接口的充分实现涉及一个简单的CAN驱动程序,它为应用提供了一个基本简单的独立于硬件的接口,以及一个CAN控制器和一个CAN收发器。
如今,离不开操作系统、网络管理功能或诊断程序。与此同时,软件的复杂性也变得巨大,因此有必要对ECU基础设施进行标准化。统一的软件减少了开发工作量并简化了维护。它还有助于提高不同车辆平台之间以及 OEM(原始设备制造商)和供应商之间软件组件的重用和可互换性。AUTOSAR(汽车开放系统架构)为ECU软件提供了参考架构。该参考架构的核心是AUTOSAR运行时环境(RTE),它将网络与应用的软件组件完全分离。运行时环境以基础软件的形式为软件组件提供统一的服务。从下到上,它由三个层次组成:微控制器抽象层、ECU抽象层、服务层。下图“CAN节点”描绘了现代CAN节点的结构。非常有趣的是“通信服务”区域。AUTOSAR COM(通信)提供标准通信服务、诊断服务(诊断COM管理器)和网络管理服务(通用NM/CAN NM)。PDU(协议数据单元)处理各个通信层之间的内部节点通信,并协调AUTOSAR COM、诊断COM管理器和CAN TP(传输协议)之间的通信。
在这里插入图片描述

如何参与CAN 通信?

想要参与CAN通信的电子控制单元(ECU)需要CAN接口。这包括一个CAN控制器和一个CAN收发器
CAN控制器实现了CAN协议规定的通信功能,大大减轻了主机的负担。
CAN收发器将CAN控制器连接到物理传输介质。
通常,这两个组件通过光或磁去耦进行电气隔离,因此,尽管CAN总线上的过电压可能会损坏CAN收发器,但CAN控制器和底层主机得以保留。
在CAN网络中,CAN节点发送或接收的CAN报文数量不同。发送和接收的频率也存在很大差异。例如,一个 CAN 节点可能接收五个不同的 CAN 报文,每个报文的周期为 10 毫秒,而另一个 CAN 节点只需要每 100 毫秒接收一条 CAN 报文。这些明显的差异产生了两种基本的CAN控制器架构:带和不带对象存储的CAN控制器。然而,无论CAN控制器类型如何,CAN控制器都可以集成,也可以用作独立的芯片组件,如下图所示。在这种情况下,微控制器将CAN控制器视为存储芯片。独立的CAN控制器与收发器在硬件设计上更加灵活,但集成式控制与收发芯片的优点是需要更少的空间,且微控制器和CAN控制器之间的通信更快、更可靠。
在这里插入图片描述
以前,CAN控制器经常通过分立电路连接到通信介质(CAN总线)。然而,今天,CAN收发器处理总线连接。CAN收发器始终有两个总线引脚:一个用于CAN高压线(CANH),一个用于CAN低线(CANL)。这是因为CAN网络中的物理信号传输是对称的,以实现电磁兼容,而CAN网络中的物理传输介质由两条线组成。

CAN收发器的特点

通常,高速CAN收发器和低速CAN收发器是有区别的。高速CAN收发器支持高达1 Mbit/s的数据速率。低速CAN收发器仅支持高达125 kbit/s的数据速率。然而,低速CAN收发器确保了总线接口的容错布局(例如,两条通信线路中的一条故障不会导致整个通信故障)。下图“CAN收发器布局”显示了高速CAN收发器的基本布局。当两个输出晶体管都阻断时,两条CAN线都假定相同的电位(0.5*Vcc),差分电压为零。一旦两个晶体管导通,就会在两条线路之间产生差分电压,该电压是负载电阻的函数。根据 ISO 11898-2,此差值应为 2 伏。因此,大约有35 mA的电流流过。
在这里插入图片描述
一般来说,CAN收发器的特点是电磁辐射非常低,共模工作范围宽,具有高抗噪性。此外,当今的CAN收发器提供高达8 kV的ESD保护。尽管在非常关键的使用领域具有很高的共模抑制,但插入输出附近的共模扼流圈 (CMC) 有助于进一步降低辐射(如下图所示)。
在这里插入图片描述
在 ISO 11898 中,最大 CAN 节点数指定为 32。但在实践中,CAN节点的最大数量很大程度上取决于所使用的CAN收发器的性能,以及它是高速还是低速CAN网络。例如,如果在高速CAN网络中使用TJA1050高速CAN收发器,则每个规范可以在一个CAN网络中连接多达110个CAN节点。

CAN网络为什么要采用差分信号?

CAN网络中的物理信号传输基于差分电压的传输(差分信号传输)。这有效地消除了电机、点火系统和开关触点引起的干扰电压的负面影响。因此,传输介质(CAN总线)由两条线路组成:CAN高压线(CANH)和CAN低线(CANL)。两条线的扭曲大大降低了磁场。
因此,在实践中,双绞线导体通常用作物理传输介质。

120Ω终端电阻的作用是什么?

由于信号传播速度有限,瞬态现象(反射)的影响随着数据速率和总线扩展的增加而增加。使用终端电阻器端接通信通道的两端(模拟传输介质的电气特性)可防止高速CAN网络中的反射。总线终端电阻的关键参数是所谓的电气线路的特性阻抗,这是 120 欧姆。与 ISO 11898-2 相比,ISO 11898-3(低速 CAN)没有指定任何总线终端电阻,因为最大数据速率较低,为 125 kbit/s。
在这里插入图片描述

CAN信号传输电压值的确定

CAN网络中的物理信号传输基于差分信号传输。具体的差分电压取决于所使用的总线接口。这里区分了高速CAN总线接口(ISO 11898-2)和低速总线接口(ISO 11898-3)。
ISO 11898-2 将逻辑“1”分配给 0 V的典型差分电压。逻辑“0”的典型差分电压为 2 V。高速 CAN 收发器将超过 0.9 V 的差分电压解释为共模工作范围内的主导电平,通常介于 12 V 和 -12 V 之间。然而,低于 0.5 V时,差分电压被解释为隐性电平。迟滞电路可提高对干扰电压的抗扰度。ISO 11898-3 将 5 V的典型差分电压分配给逻辑“1”,将 2 V的典型差分电压对应于逻辑“0”。图“高速CAN总线电平”和图“低速CAN总线电平”描述了CAN总线上的不同电压关系。
高速CAN总线电平
低速CAN总线电平

CAN网络中信号的显隐性

在CAN网络中实现平稳通信的一个基本前提,特别是对于总线访问、故障指示和确认,是明确区分显性和隐性总线电平。主总线电平对应于逻辑“0”隐性总线电平对应于逻辑“1”。显性总线电平覆盖隐性总线电平。当不同的CAN节点同时发送显性和隐性总线电平时,CAN总线假定为显性总线电平。仅当所有CAN节点都发送隐性电平时,才会发生隐性总线电平。就逻辑而言,这种行为是 AND 逻辑。在物理上,AND逻辑由所谓的集电极开路电路实现。下图显示总线不同CAN节点发送显隐电平与CAN总线电平之间的逻辑关系。
在这里插入图片描述
在安全关键型应用场合,例如动力总成领域的应用,对通信系统的可用性提出了严格的要求。因此,将总线分配的责任分配给单个总线节点是不利的。此易受攻击的总线节点发生故障将导致所有通信失败。

CAN报文的传输

为了提升CAN通信系统的可靠性,一个更好的解决方案是采用分散总线访问,以便每个总线节点都有权访问总线。这就是为什么CAN网络是基于多主站架构和线路拓扑结构的组合:基本上每个CAN节点都被授权在CAN网络的总线上放置CAN报文。
CAN报文的传输不遵循任何预定的时间序列,而是事件驱动的。只有当实际需要传输新信息时,通信通道才会繁忙,这样总线访问的速度会很快。原则上,在CAN网络中,毫秒级的实时数据传输是没有问题的,因为它能够对异步事件做出快速反应,并且数据速率非常高,最高可达1 MBit/s。
在CAN网络中使用接收机选择寻址方法,以防止总线节点之间的依赖性,从而提高配置灵活性:每个CAN报文都可供每个CAN节点接收(广播)。先决条件是必须能够通过报文标识符 (ID) 和特定于节点的过滤来识别每个 CAN 报文。虽然这会增加开销,但它允许集成额外的CAN节点,而无需修改CAN网络。以下视频展示CAN网络中传输消息。

can communication principle


下图展示典型的通信序列。它显示了CAN网络的通信矩阵,以及由此产生的发送和接收分支。
在这里插入图片描述

什么是数据帧

为了传输用户数据,ISO 11898-1 规定了所谓的数据帧。一个数据帧可以传输 8 个字节的最大有效负载。为此,有所谓的数据字段,它由执行CAN通信协议所需的许多其他字段构成。它们包括消息地址(标识符或 ID)、数据长度代码 (DLC)、校验和(循环冗余校验序列 — CRC 序列)和位于确认字段中的 RX 确认。
在这里插入图片描述

什么是远程帧

远程帧 - 一种帧类型,可以使用该帧从任何其他CAN节点请求用户数据,即数据帧。除了缺少数据字段外,远程帧具有与数据帧相同的结构。
在这里插入图片描述

什么是错误帧

错误帧可用于指示在通信期间检测到的错误。正在进行的错误数据传输将终止,并发出错误帧。错误帧的布局与终止的错误数据或远程帧的结构有很大不同。它仅由两部分组成:错误标志和错误分隔符。
在这里插入图片描述

数据帧的组成及作用

数据帧在CAN网络中起着主导作用:它们用于传输用户数据。数据框由许多不同的组件组成。在传输过程中,每个单独的组件都执行一项重要任务。要执行的任务是:启动和维护通信伙伴之间的同步,建立通信矩阵中定义的通信关系,并传输和保护用户数据。
数据帧的传输从起始位(帧起始 — SOF)开始。它由发送方作为显性电平传输,从前一个隐性(总线空闲)电平产生信号边沿,用于同步整个网络。为了使接收器在帧传输过程中不会失去与发送方的同步性,它们将所有隐性到显性信号边沿与其预设的位时序进行比较。如果出现偏差,接收机将按相关相位误差量重新同步(重新同步)。
SOF 后面是标识符 (ID)。这设置了数据帧的优先级,并与接受滤波一起为CAN网络中通信矩阵中定义的发送方-接收方关系提供了支持。
接下来是RTR位(远程传输请求)。发送方使用它来通知接收方帧类型(数据帧或远程帧)。显性 RTR 位表示数据帧。
下面的 IDE 位(标识符扩展位)用于区分标准格式和扩展格式。在标准格式中,标识符有 11 位,在扩展格式中有 29 位。图“标准格式和扩展格式的数据帧”可用于研究这两种格式。
DLC(数据长度代码)将有效载荷字节数传达给接收器。有效负载字节在数据字段中传输。一个数据帧中最多可以传输 8 个字节。
有效负载由使用循环冗余校验 (CRC) 的校验和保护,该校验和以分隔符位结尾。根据 CRC 的结果,
接收器在 ACK 时隙中确认正向或负向(确认),后跟一个分隔符位。在此之后,数据帧的传输由七个隐性位终止(帧端 — EOF)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

远程帧的组成及作用

除了用于传输数据的数据帧外,还有远程帧 — 一种用于从任何 CAN 节点请求数据的帧类型。尽管如此,这些帧几乎从未用于汽车应用,因为数据传输不是基于请求,而是主要基于信息生产者的自主性。远程帧可以以标准或扩展格式传输。除了缺少数据字段外,远程帧的布局与数据帧的布局相同。数据帧和远端帧通过RTR位(远程传输请求)进行区分。在数据帧的情况下,RTR 位作为主导位发送。远程帧由隐性 RTR 位标识。原则上,可以为CAN网络中的所有现有数据帧定义远程帧。只需要确保远程帧的标识符与关联数据帧的标识符匹配即可。负责生成所需数据帧的ECU通过发送远程帧来响应该帧。对于具有对象存储的CAN控制器,CAN控制器会自动响应远程帧。没有对象存储的 CAN 控制器必须让主机知道远程帧,以便它可以启动响应。在理想情况下,远程帧的请求会立即导致相关数据帧的响应。但是,可能会在请求和响应之间插入具有更高优先级的CAN报文。
在这里插入图片描述

什么是CAN ID?

CAN网络中的通信基于与内容相关的寻址。不是CAN节点具有标识符,而是数据和远程帧被识别(标识符 — ID)。因此,每个CAN节点(广播)都可以接收所有CAN报文。每个接收方独立负责选择CAN报文。这种接收端选择寻址非常灵活,但它要求每个接收方过滤接收到的CAN报文(接受过滤)。
用户可以在两种消息格式之间进行选择:标准格式和扩展格式。这两种格式在标识符的长度上有所不同。在标准格式中,ID 有 11 位。在扩展格式中,ID 有 29 位与标准格式的 ID 相比,扩展格式的 ID 由两个组件组成,即基本 ID 和扩展 ID。这两个组件之间是 IDE(标识符扩展)和 SRR(替代远程请求)位。显性 IDE 位表示 CAN 报文采用标准格式。隐性 IDE 位表示 CAN 报文采用扩展格式。在扩展格式中,SRR 位(始终作为隐性传输)取代了标准格式的 RTR 位。在扩展格式中,控制字段的前两位(r0 和 r1)无关紧要;两者都是显性传播的。
在这里插入图片描述

CRC校验

在汽车环境中,串行通信面临的最大挑战之一是保证传输的极高可靠性。使用的 CRC 方法(CRC:循环冗余校验)代表了最强大的错误检测方法之一。在 CRC 方法中,CRC 序列是根据要传输的位(从 SOF 到数据字段(包括数据字段)和 ISO 11898-1 定义的生成器多项式 G(x) 计算的。CRC序列被附加到要传输的位。总多项式是要传输的位数的倍数。然后,整个多项式的接收机可以以非常高的可靠性检测是否发生了传输错误(例外:CRC序列本身扰破坏了),即除以生成器多项式是否产生余数。根据此划分的结果,每个接收方控制确认,独立于任何接受过滤。接收者肯定或否定地确认。

ACK应答

ACK 插槽中的显性级别表示正向确认,而隐性级别表示负向确认。ACK 分隔符始终以隐性方式传输,以便进行错误跟踪。由于发送方同时传输 ACK 插槽和 ACK 分隔符是隐性的,因此一次肯定的确认就足以确认向发送方传输消息的正确性。这就是为什么CAN网络中的确认方法被称为节点中立的正确认。关于确认的交互式动画邀请您以交互方式学习CAN网络中的确认。该图假设一个CAN网络,有一个发送方和两个肯定确认的接收方。在节点中立的正面确认中,负面确认的CAN节点被覆盖,起初仍未被听到。为了确保网络范围的数据一致性,它们在 ACK 分隔符后发送错误标志。
在这里插入图片描述

Positive Acknowledgement

什么是信号同步

正确传输数据的基本先决条件是同步通信伙伴。起始位的显性到隐性信号边沿用于产生CAN报文的同步性(帧起始 — SOF)。之后,使用重新同步机制来保持同步,直到消息传输结束。再同步机制基于对隐性到显性信号边沿的评估。这种信号边沿由所谓的位填充机制来保证。ISO 11898-1 规定,发送方在传输五个同质位后,最迟必须传输一个互补位;即使互补位跟在五个同质位之后,也会添加一个填充位。由于位填充从SOF的传输开始,到CRC序列最后一位的传输结束,因此在最坏的情况下,当数据字段包含8个字节时,以标准格式传输数据帧的理论填充位数为24。因此,理论上最长的标准格式数据帧将由 132 位组成。下图交互式图形“Bit Stuffing”将快速向您阐明位填充机制。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CAN总线仲裁机制

ISO 11898-1 定义了一种多主机架构,以确保高可用性和事件驱动的数据传输。CAN网络中的每个节点都有权访问CAN总线,无需许可,也无需事先与其他CAN节点协调。尽管基于事件驱动方法的总线访问可以非常快速地对事件做出反应,但存在固有的风险,即多个CAN节点可能希望同时访问CAN总线,这将导致CAN总线上的数据出现不希望的重叠。为了保持通信系统的实时性,ISO 11898-1 规定了总线访问,以保证无损数据传输。这里使用所谓的 CSMA/CA(具有避免冲突的载波侦听多址访问)方法。CSMA/CA 方法确保希望发送的 CAN 节点在 CAN 总线可用之前不会访问该总线。在同时访问总线的情况下,基于按位总线仲裁的 CSMA/CA 方法可确保 CAN 节点之间优先级最高的 CAN 报文优先。原则上,CAN报文的优先级越高,在CAN总线上传输的速度就越快。在系统设计不佳的情况下,低优先级的CAN报文甚至有永远无法传输的风险。提供交互式图形“总线访问原理”,以便您更好地理解。它假设两个CAN节点希望在正在进行的消息传输期间访问总线的场景。请阅读说明,以便您可以充分利用媒体对象的全部功能。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ISO 11898-1 定义的 CSMA 总线访问方法的核心组件是逐位仲裁。尽管同时访问总线,但它可以防止或解决碰撞的发生。这意味着只有一个帧在仲裁中完好无损。CSMA/CR(碰撞解决)和 CSMA/CA(碰撞避免)这两个术语都可以在文献中找到。这些显示了仲裁的胜诉方 (CSMA/CA) 和败诉方 (CSMA/CR) 的观点。在网络范围的同步之后,所有希望发送的CAN节点都将其CAN报文标识符按位放置在CAN总线上,从最高有效位到最低有效位。在此过程中,CAN网络所基于的有线AND总线逻辑可确保总线上产生清晰而独特的总线电平。最后,仲裁逻辑决定CAN节点是否可以继续发送,或者是否必须停止发送。交互式图“总线访问逻辑”可帮助您更熟悉按位总线仲裁的机制。在仲裁阶段结束时,传输具有最低 ID 的 CAN 报文的 CAN 节点将获得发送授权。具有较低优先级消息的 CAN 节点切换到接收状态,稍后它们访问 CAN 总线以进行另一次发送尝试,一旦它再次可用。下图“总线访问程序”描述了总线访问上下文中CAN节点的所有操作。
在这里插入图片描述
在这里插入图片描述

CAN报文的优先级

CAN报文的优先级对于在CAN网络中获得总线访问具有决定性作用。它们通过标识符进行编码,该标识符从最高有效位到最低有效位按位传输。有线AND总线逻辑和仲裁逻辑确保CAN报文的优先级随着标识符值的减小而增加:标识符越小,CAN报文的优先级越高。下图“优先级”解释了这种关系。如果总线负载不是太高,这种类型的随机、非破坏性和优先级控制的总线访问提供了公平且非常快速的总线访问。尽管如此,必须考虑到,增加总线负载主要会导致低优先级CAN报文的延迟增加。这可能会损害CAN通信系统的实时性。因此,在设计系统时,CAN报文的优先级应从它们将传输的信号的紧迫性中得出。交互式图形“典型CAN通信”可帮助您了解CAN网络中的通信流程。它基于通信矩阵中列出的通信关系和在不同时间点发生的事件。
在这里插入图片描述
在这里插入图片描述
第20章此图需要完善!!!!!!!!!!

如何提升报文传输的可靠性?

可靠的数据传输是机动车辆电子系统安全可靠的先决条件。因此,CAN不仅要满足严格的实时性要求,而且必须始终提供可靠的数据传输。由于CAN还用于机动车辆中非常耗时和安全的应用,因此对数据完整性的要求非常高。在评估数据完整性时,环境对数据传输有干扰作用,以及串行总线系统抵御干扰的能力至关重要。因此,确保可靠的数据传输已经从物理系统布局开始,其中电磁兼容性(EMC)传统上起着重要作用。尽管具有电磁兼容的设计和物理数据保护,但仍可能发生导电、电感和电容耦合,从而衰减和失真信号。当人们还考虑不同的采样时间点、开关阈值的差异和通信伙伴之间的频率偏差时,就不可能假设数据传输是无故障的。数据完整性可以看作是数据在传输过程中受到干扰和损坏的概率与未检测到受干扰数据的概率的乘积。这产生了两个基本策略,可以最大限度地减少残余错误的可能性或增强数据完整性。一方面,可以通过以电磁兼容的方式布局网络或采取物理操作来避免数据损坏。另一方面,可以通过有效的逻辑错误检测和有效的逻辑错误处理来检测和纠正损坏的数据。图“CAN网络中的数据保护原理”对此进行了概述。
在这里插入图片描述
要避免故障的产生,就需要提高信号的抗干扰性能。比特编码对降低电磁辐射干扰具有重要意义。智能的位编码能够显著减少电磁干扰。然而,这一要求往往必须与所需的传输能力相协调。CAN选择了NRZ位编码(NRZ:不归零)。这意味着要传输的二进制信号被直接映射:逻辑“1”到高电平,逻辑“0”到低电平。
NRZ编码的特点是相同极性的连续位没有电平变化。这就是NRZ编码如何实现非常高的数据速率,同时将发射保持在限制范围内。但是,NRZ 编码不是自时钟;也就是说,它没有任何同步属性。如果在较长时间内没有发生电平变化,则接收机将失去同步。这就是为什么使用 NRZ 编码需要显式同步机制的原因,但这会降低传输效率。在CAN中,所谓的位填充方法被用作同步机制:在五个同构位之后,发送方在比特流中插入一个互补位(例如,曼彻斯特编码没有这种机制,因为它是自时钟的)。
在这里插入图片描述
例如,由电机、点火装置和开关触点引起的干扰电压可以通过对称信号传输有效地避免电磁干扰。在对称信号传输中,外部噪声在两条线路上的作用相同。差分形成可用于消除噪声 - 有用信号不受影响。对称信号传输导致物理传输介质(CAN总线)由两条线路组成:CAN高线(CANH)和CAN低线(CANL)。
关于对称信号传输,我们利用了导线周围的磁场叠加的事实。导线内的电场以及它们周围的磁场彼此完全相反。如果导线彼此紧密相连,磁场叠加到几乎为零。这用于消除电磁辐射。通过绞合一对 CAN 线来保证紧密邻接,即“双绞线“。通过绞合导线,导电环路被转移到各个导体中。理想情况下,磁场在每个子段中将表现出相反的方向,这会导致任何感应电压或感应效应的相互抵消。捻度的有效性随着缠绕次数的增加而增加。每米至少 30 次包裹会产生良好的效果。
在这里插入图片描述
由于信号传播有限,随着数据速率的提高,CAN总线上会出现反射形式的瞬态现象。这就是为什么高速CAN网络中的总线末端必须以物理传输介质的特征阻抗进行端接的原因。
通信信道的特性阻抗为120欧姆。CAN总线的两端可以采用分离总线端接,而不是在通信通道的两端提供单个总线终端电阻。分离式总线终端由两个相同的电阻(60 Ω)和一个电容器(典型值为4.7 nF)组成,其作用类似于低通滤波器;高频信号被分流到地,而不会影响直流电压关系。测量表明,这可以提高抗噪性并减少电磁辐射。
在这里插入图片描述
在这里插入图片描述

CAN消息错误检测的机制

为了检测错误的消息,CAN协议定义了五种机制:位监控、消息格式监控(表单检查)、位编码监控(Stuff Check)、确认评估(ACK检查)和验证校验和(循环冗余校验)。位监控和 ACK 检查错误检测机制由发送方执行。独立于验收过滤,接收器执行表单检查、材料检查和循环冗余检查。
下图“错误检测”图显示了数据或远程帧的哪些字段受到各个错误检测机制的影响。stuff 检查用于检查比特流。CAN协议规定,发送方必须在五个同构位之后传输一个互补位,以便进行同步。如果接收到超过 5 个均匀的连续位,则会出现填充错误。在比特监控的框架内,发送方将发送的比特电平与实际总线电平进行比较。如果发送方检测到两个级别之间存在差异,则存在位错误。
位监控可确保检测到发送方发生的所有全局错误和所有本地错误。
表单检查用于检查CAN报文的格式。每个CAN报文总是在特定位置显示相同的位序列。它们是 CRC 分隔符、ACK 分隔符和 EOF。发送方始终隐性地传输这些消息组件。如果接收方在表单检查中检测到其中一个消息组件中的主导总线电平,则存在格式错误。在循环冗余校验 (CRC) 中,与到达数据或远程帧相关的多项式 R(x) 应等于 ISO 11898-1 规定的生成器多项式 G(x) 的倍数。如果不是这种情况(CRC错误),则数据或远程帧在传输过程中已损坏。
CAN协议中定义的确认机制规定,所有接收方必须在循环冗余校验后立即确认每个到达的CAN报文。一次肯定的确认就足以向发送方发出信号,表明至少有一个接收方接收了它正确传输的CAN报文。如果没有一个肯定的确认到达发送方,则发生了确认错误(ACK 错误)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何确保CAN总线传输的一致性?

CAN协议规定,出于全网数据一致性的原因,如果错误检测CAN节点遇到本地干扰,它必须通知连接到CAN网络的所有CAN节点。为此,错误检测CAN节点发送错误信号(错误标志),该信号由六个显性位组成。这是故意违反位填充规则的行为,并生成位填充错误。错误标志的传输可确保所有其他CAN节点也将传输错误标志(辅助错误标志),从而也像主要错误标志的发送者一样终止常规数据传输。
根据具体情况,主要错误标志和次要错误标志可能会重叠。错误标志的传输始终由错误分隔符终止。它由八个隐性位组成。错误分隔符取代了常规报文传输的 ACK 分隔符和 EOF,因此与 CAN 总线上的强制传输暂停(ITM — 中场休息)一起,这会产生 11 个隐性位(总线空闲标识符)。错误处理由中断的CAN报文的发送方完成。在 ITM 之后,它会尝试再次传输中断的 CAN 报文。下图“错误处理”图总结了检测到错误后在CAN网络中采取的所有操作。
由于优先驱动的总线访问,因此无法保证立即重复。在最佳情况下,从错误检测到重新发送(主错误标志、错误分隔符、ITM)需要 17 位时间。如果主错误标志和辅助错误标志不重叠,则需要 23 位时间。如果 CAN 节点处于错误被动状态,则需要 31 位时间。在这种状态下,CAN节点必须等待所谓的“暂停传输时间”,直到它可以再次访问CAN总线。暂停传输时间是规定的 8 位传输暂停。
在这里插入图片描述
在这里插入图片描述
为确保全网数据的一致性,CAN网络中的每个节点都有权终止任何被解释为错误的CAN报文。这也适用于错误地将正确的CAN报文解释为错误的CAN节点。
为了防止干扰传输介质,CAN协议指定了错误跟踪,允许CAN节点区分偶尔发生的干扰和持续存在的干扰。因此,每个CAN控制器都有一个TEC(发送错误计数器)和一个REC(接收错误计数器)。如果成功传输数据或远程帧,则相关误差计数器将递减(TEC=TEC-1;REC=REC-1)。
错误标志的检测和后续传输会导致相关错误计数器根据某些规则递增。对于发送方,适用规则为:TEC=TEC+8。错误检测接收机最初将其 REC 增加一个单位 (REC=REC+1)。对于导致接收器的错误:REC=REC+8。根据特定的错误计数,CAN控制器处理错误状态的切换。启动后,CAN控制器假定正常状态为Error Active。在这种状态下,CAN控制器在检测到错误后发送六个显性位(活动错误标志)。当超过限制时 (TEC>127;REC>127),CAN控制器切换到“错误被动”状态。处于错误被动状态的 CAN 控制器只能通过发送 6 个同质隐性位来指示检测到的错误。这样可以防止错误检测接收器将检测到的错误总线化。
此外,当连续发送两个数据或远程帧时,处于“错误被动”状态的CAN控制器必须等待“暂停传输时间”(8位)。如果 CAN 控制器发生故障或出现极端累积的错误,则状态转换到总线关闭状态。CAN控制器与CAN总线断开连接。总线关闭状态只能通过主机的干预(强制等待时间为 128 x 11 位)或硬件复位来退出。
在这里插入图片描述

CAN FD的产生

自CAN总线问世以来的几十年里,车辆嵌入式系统的结构发生了深刻的变化。可以说,最明显的变化是数量:如果在引入CAN时有数百个信号需要传达,那么今天这些数字都在五位数范围内。因此,数据流量的增加导致CAN总线上的总线负载越来越高。
除了对带宽的需求不断增长外,对确定性系统行为的需求也越来越大,这鼓励了新总线系统的开发。因此,出于信息娱乐目的,MOST总线的带宽高达150 Mbit/s。确定性FlexRay总线提供10Mbit/s的带宽,适用于驾驶员辅助功能。在带宽频谱的低端,LIN被引入,作为传感器-执行器-区域任务的低成本解决方案。这些新的定制总线系统涵盖了行业市场。
尽管如此,CAN仍然是车辆中的主要总线系统。只有极少数情况下,CAN需要替换为具有更高传输速率的总线,例如FlexRay。主要是硬件成本的较高,以及将系统切换到新技术而产生的巨大开发工作。
CAN带宽不足通常可以通过应用更多的CAN总线来规避。但这涉及使用网关在这些总线之间传输数据。CAN带宽的限制因素是由于其核心特性之一:在消息传输的特定阶段,多个网络节点可能同时处于传输模式。在仲裁阶段的传输开始时可能是这种情况,在消息末尾的确认字段中始终如此。这意味着一个比特的传输时间不得短于其电压电平从总线一端的节点传播到另一端的节点,然后再传播回来。例如:在长度为40米的CAN总线上,最大传输速率约为1 Mbit/s,以满足1比特所需的传输时间。但是,在仲裁阶段和CAN帧的确认字段之间的部分,只允许使用一个发送器。因此,在帧的这一部分中,对位时间的最短持续时间没有限制。
博世的工程师们认为,如果我们在CAN帧的这一部分提高传输速率,会是什么样子?您只需要在两种不同的传输速率之间切换:CAN帧开始和结束时的慢速传输速率和中间的快速传输速率。这正是CAN FD的基本思想。

Motivation for CAN FD

在这里插入图片描述

CAN FD的优势

CAN FD帧有效载荷的更快传输可减少其 传输时间,即总线负载减少。另一方面,一个 可以在同一时间内传输更长的数据场,即只有 单个 CAN FD 帧。例如,如果数据字段以五倍的速度传输,则 CAN FD,则帧在时间上的长度与 正常的CAN帧,如果它包含的数据是原来的五倍。因此,CAN FD帧可以传输五倍于CAN帧的信息而无需提高总线负载。引入CAN FD将为开发过程带来许多优势:
1.总线负载问题将大大减少
2.不再需要使用多条CAN总线
3.如果不废除网关,对网关的需求将会减少
4.由于每帧有效载荷更大,数据分割更少
5.通过更少的帧实现更好的有效负载和开销数据比率

CAN 与 CAN FD的区别

要使CAN FD工作,需要新的CAN FD控制器。然而,这些 向下兼容,能够处理经典的CAN。CAN总线上的ECU可以逐步替换为支持CAN FD的ECU。 当然,任何总线都必须使用传统的 CAN 仍然至少有一个带有传统CAN控制器的ECU。因此,似乎CAN FD的好处毕竟只能使用 总线上的ECU已使用CAN FD控制器进行升级。
只有一些ECU是CAN FD 有能力,他们可以以更高的速度进行通信,而其他人则已经通过部分网络进入睡眠状态。例如,这可用于在服务期间更新 ECU 软件。特别对于更高的数据速率是有利的,因为更新过程通常需要数小时。CAN FD的另一个优点是它不涉及新技术。获得的所有与CAN相关的知识工程师多年来与CAN合作的经验仍然有效,并且可以与CAN FD重复使用。这意味着从CAN升级的过程到CAN FD 不会产生巨大的教育成本和经验损失。
就像传统的CAN一样,CAN FD知道两种类型的数据帧格式:具有11位标识符的标准帧和扩展的帧 具有 29 位标识符的帧。这保证了附加协议 CAN,如CANopen和SAE J1939,可以与一些适配器一起使用,如 CAN FD的附加组件也是如此。CAN FD没有为远程帧定义单独的格式。如果仔细观察,CAN FD并未增加任何限制。远程帧没有数据字段,增加的传输速率没有任何意义。 因此,CAN FD协议允许CAN FD帧 使用经典CAN远程帧请求。
由于 CAN FD 没有远程帧,因此 RTR 位不是必须存在的,而是由始终占主导地位的远程请求替换位 (RRS) 代替。帧起始 (SOF)、标识符和标识符扩展位 (IDE) 保持不变。此外,在CAN FD帧的末尾,确认位(ACK)、相应的分隔符(DEL)、帧结束(EOF)以及中场间隔场(ITM)与传统CAN帧一样。与传统CAN相比,CAN FD的修改发生在IDE位和确认位之间。
在这里插入图片描述
传统CAN帧的保留位现在成为CAN FD格式的开关。如果传输显性为 0,则表示经典的 CAN 帧。如果它包含隐性值 1,则表示 CAN FD 帧。该比特的新名称是FDF,即灵活的数据速率格式,它为传输更大的有效载荷提供了选择机会。数据字段的实际长度以及是否切换到更高的传输速率的决定将在帧的后面进行。
在这里插入图片描述
CAN FD控制器可以发送和接收经典的CAN帧以及 CAN FD帧。另一方面,经典的CAN控制器将始终接收 CAN FD 帧时与错误帧:隐性位在经典CAN中处于主导r位的位置被认为是作为不规则性。经典CAN无效值将被回答带有错误帧。在这一点上,它变得透明,即 CAN FD 帧既不会被理解,也不会被传统CAN所容忍控制器。在为将来扩展到 CAN FD 的保留位 r 之后,接下来是称为比特率开关 (BRS) 的位。当占主导地位时,波特率 2 等于波特率 1,因此不会发生加速传输。如果 BRS 是隐性的,则下图中标记为红色的 CAN FD 帧部分将以更高的波特率 2 传输。
对于一条总线上的所有CAN FD控制器,必须统一配置两种传输速率。在图形中,波特率 2 定义为 5 MBaud,对应于 5 Mbit/s,因为比特及其物理表示(即电压电平)具有相同的持续时间。这个数值不是凭空捏造的,因为实验室实验证明,大多数用于传统CAN的收发器也能够应对5 Mbit/s。当然,使用足够的收发器也可以实现更高的传输速率。人们将不得不拭目以待,看看在真实车辆中发现的强电磁干扰的环境中,哪些传输速率更具有可行性。
从波特率 1 到波特率 2 的偏移发生在 BRS 的采样点,从波特率 2 回到波特率 1 的转换发生在 CRC 分隔符的采样点,直接在确认位之前。为了使接收器与发送器完美同步,尽管传输速率很高,但在它之前执行第二次硬同步。
在这里插入图片描述
称为错误状态指示器 (ESI) 的位在比特率开关 (BSR) 之后。如果ECU处于错误活动状态,则它占主导地位。如果它是隐性的,则表明ECU处于错误被动状态。
此位的目的是实现更透明的错误跟踪方式,以及更简单的网络管理。网络节点的“错误活动”和“错误被动”状态在整个网络上进行通信。在这里插入图片描述
在传统CAN下,数据长度码(DLC)已经由四位组成。有了这个,就可以描述数据字段的九个可能的合法长度,即 0 到 8 个字节。现在,DLC 的剩余 7 个值 9 到 15 将用于 CAN FD。但是,DLC > 8 放弃了 DLC 与字节数之间的线性相关性。下表显示了 DLC 对 CAN 和 CAN FD 下数据字段大小的不同含义:
在这里插入图片描述
在这里插入图片描述
与传统CAN相比,CAN FD帧中出现误码的概率增加。之所以如此,是因为波特率 2 的位时间较短,而数据字段中的位数要多得多。这需要通过CAN FD帧中更大的冗余来抵消。否则,接收机未检测到错误的可能性就会增加。数据字段最多为16字节的CAN FD帧将由17个CRC位保护。更大的数据字段将导致冗余具有 21 位。两个生成器多项式是CRC的0x3685B和 CRC 的0x302899.
在这里插入图片描述
在传统的CAN帧中,填充位是从帧开始(SOF)到校验和(CRC)结束添加的。每 5 个相同的位后,插入一个互补位。这些填充位不会计算到校验和中。使用CAN FD时,填充位也会在SOF之后添加。但是,此规则现在以数据字段结尾。发送节点通过包含已添加到帧中的填充位来计算校验和。填充位计数器(模 8)和奇偶校验位是帧中的下一个。CRC场本身也被填充,但频率更高。这里适用以下规则:CRC 字段总是以与其前身互补的东西开头。在后面的每四个位之后,无论它们是否相同,都会插入一个与其前身互补的填充位。在CRC之后,不再像传统CAN那样插入填充位。
在这里插入图片描述

  • 23
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CAN (Controller Area Network) 是一种用于实时应用的串行通信协议,主要用于汽车电子、工业自动化等领域。CAN协议采用了差分信号传输方式,具有高可靠性和抗干扰能力。 STM32作为一款常用的微控制器,内置了CAN控制器模块,可以方便地实现CAN通信。下面是CAN通信详解及STM32实现步骤: ## CAN通信协议 CAN通信协议分为两种模式:标准帧和扩展帧。标准帧的帧ID为11位,扩展帧的帧ID为29位。CAN通信协议中的数据传输是按照消息的优先级来进行的,优先级高的消息会先被处理。 CAN通信协议中的数据传输是基于消息的,每个消息包括了帧ID、数据和其他一些控制信息。在发送消息之前,需要设置CAN控制器的一些寄存器,包括帧ID、数据长度码、发送优先级等信息。在接收消息时,需要配置CAN控制器的接收过滤器,用于过滤出需要处理的消息。 ## STM32实现CAN通信 STM32内置了CAN控制器模块,可以方便地实现CAN通信。下面是STM32实现CAN通信的步骤: 1. 配置GPIO引脚 首先需要配置CAN控制器的GPIO引脚,将CAN_TX和CAN_RX引脚连接到CAN总线上。具体的引脚配置可以参考STM32的数据手册。 2. 配置CAN控制器 需要配置CAN控制器的工作模式、波特率等参数。可以使用STM32提供的库函数进行配置,或者直接操作CAN控制器寄存器。 3. 发送消息 发送消息需要设置消息的帧ID、数据长度码、发送优先级等信息,并将数据写入CAN控制器的发送缓冲区。可以使用STM32提供的库函数进行操作,或者直接操作CAN控制器寄存器。 4. 接收消息 接收消息需要配置CAN控制器的接收过滤器,用于过滤出需要处理的消息。可以使用STM32提供的库函数进行配置,或者直接操作CAN控制器寄存器。接收到消息后,需要从CAN控制器的接收缓冲区中读取数据。 5. 中断处理 在CAN通信过程中,需要使用中断来处理发送和接收操作。可以使用STM32提供的库函数进行中断配置,或者直接操作NVIC寄存器。 以上是STM32实现CAN通信的基本步骤,具体实现可以参考STM32的数据手册和官方库函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值