CAN总线基础知识点

CAN总线是一种串行通信协议,常用于汽车电子控制网络,支持多主控制器,具有高优先级仲裁机制,能够实现高效、可靠的实时通信。文章介绍了CAN总线的起源、技术原理、特点,以及与其它通信方案的比较,强调了其在汽车行业的应用和优势。
摘要由CSDN通过智能技术生成

本文是博主的CAN总线学习记录,带有个人理解,如有错误,还请谅解。

本文只写下了一些浅显的偏概念性的知识点,主要是让初学者对CAN有基本的了解。
想有更深入细致的同学可以参考下面这三篇文章:
面对初学者的CAN总线入门教程(一)_CAN总线宏观介绍
面对初学者的CAN总线入门教程(二)_CAN协议基本概念及其规格标准
面对初学者的CAN总线入门教程(三)_CAN通信中帧、优先级、位填充、错误、位时序以及同步的介绍

其余参考资料文章,将在本文末尾逐一写出。

背景知识

总线

总线Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束。
按照计算机所传输的信息种类,计算机的总线可以划分为数据总线地址总线控制总线,分别用来传输数据、数据地址和控制信号。
总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。
在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。

OSI七层模型

开放系统互连基本参考模型 OSI/RM (Open Systems Interconnection Reference Model),简称OSI
它是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。
在这里插入图片描述

1. CAN是什么?

CAN包含两个部分,分别是CAN总线CAN总线协议

CAN总线

控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它是使用两根信号总线双绞线的形式)来传输信号,是世界上应用最广泛的现场总线之一。
最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。

一个由CAN 总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。CAN 可提供高达1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了CAN的抗电磁干扰能力。

CAN总线协议

CAN总线协议是 ISO国际标准化的串行通信协议。
CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。

CAN总线协议是一个载波侦听(CSMA)、基于报文优先级碰撞检测和仲裁(CD+AMP)的多路访问协议。

  • CSMA:意思是总线上的每一个节点在企图发送报文前,必须要监听总线,当总线处于空闲时,才可发送。
  • CD+AMP:意思是通过预定编程好的报文优先级逐位仲裁来解决碰撞,报文优先级位于每个报文的标识域。更高级别优先级标识的报文总是能获得总线访问权,即:标识符中最后保持逻辑高电平的会继续传输,因为它具有更高优先级。

2. CAN的技术原理

CAN总线使用串行数据传输方式,可以1Mb/s的速率在40m的双绞线上运行,也可以使用光缆连接,而且在这种总线上总线协议支持多主控制器。CAN与I2C总线的许多细节很类似,但也有一些明显的区别。

当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。

每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总线读取时,这种配置十分重要。

在这里插入图片描述

当一个站要向其它站发送数据时,该站的CPU将要发送的数据和自己的标识符传送给本站的CAN芯片,并处于准备状态;当它收到总线分配时,转为发送报文状 态。

CAN芯片将数据根据协议组织成一定的报文格式发出,这时网上的其它站处于接收状态。每个处于接收状态的站对接收到的报文进行检测,判断这些报文是否是发给自己的,以确定是否接收它。

由于CAN总线是一种面向内容的编址方案,因此很容易建立高水准的控制系统并灵活地进行配置。我们可以很容易地在CAN总线中加进一些新站而无需在硬件或 软件上进行修改。

当所提供的新站是纯数据接收设备时,数据传输协议不要求独立的部分有物理目的地址。它允许分布过程同步化,即总线上控制器需要测量数据时,可由网上获得,而无须每个控制器都有自己独立的传感器。

3. CAN总线的特点

CAN具有十分优越的特点,使人们乐于选择。这些优越的特点包括:

1、多主控制

当总线空闲时,连接到总线上的所有单元都可以启动发送信息,这就是所谓的多主控制的概念。

先占有总线的设备获得在总线上进行发送信息的资格。这就是所谓的CSMA/CR(Carrier Sense MultipleAccess/Collosion Avoidance)方法

如果多个设备同时开始发送信息,那么发送最高优先级ID消息的设备获得发送资格。

2、信息的发送

在CAN协议中,所有发送的信息要满足预先定义的格式。当总线没有被占用的时候,连接在总线上的任何设备都能起动新信息的传输,如果两个或更多个设备在同时刻启动信息的传输,通过ID来决定优先级。ID并不是指明信息发送的目的地,而是指示信息的优先级。

如果2个或者更多的设备在同一时刻启动信息的传输,在总线上按照信息所包含的ID的每一位来竞争,赢得竞争的设备(也就是具有最高优先级的信息)能够继续发送,而失败者则立刻停止发送并进入接收操作。因为总线上同一时刻只可能有一个发送者,而其它均处于接收状态,所以,并不需要在底层协议中定义地址的概念。

3、系统的灵活性

连接到总线上的单元并没有类似地址这样的标识,所以,添加或去除一个设备,无需改变软件和硬件,或其它设备的应用层软件。

4、通信速度

可以设置任何通讯速度,以适应网络规模。

对一个网络,所有单元必须有相同的通讯速度,如果不同,就会产生错误,并妨碍网络通讯,然而,不同网络间可以有不同的通讯速度。

5、远程数据请求

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

6、错误检测、错误通知、错误恢复功能

所有单元均可以检测出错误(错误检测功能)。检测到错误的单元立刻同时通知其它所有的单元(错误通知功能)。如果一个单元发送信息时检测到一个错误,它会强制终止信息传输,并通知其它所有设备发生了错误,然后它会重传直到信息正常传输出去(错误恢复功能)。

7、错误隔离

在CAN总线上有两种类型的错误:暂时性的错误(总线上的数据由于受到噪声的影响而暂时出错);持续性的错误(由于设备内部出错(如驱动器坏了、连接有问题等)而导致的)。CAN能够区别这两种类型,一方面降低常出错单元的通讯优先级以阻止对其它正常设备的影响,另一方面,如果是一种持续性的错误,将这个设备从总线上隔离开。

8、连接

CAN总线允许多个设备同时连接到总线上且在逻辑上没有数目上的限制。然而由于延迟和负载能力的限制,实际可连接得设备还是有限制的,可以通过降低通讯速度来增加连接的设备个数。相反,如果连接的设备少,通讯的速度可以增加。

4. CAN与其它通信方案的比较

CAN总线与其它通信网的不同之处在于:

一是报文传送中不包含目标地址,它是以全网广播为基础。各接收站根据报文中反映数据性质的标识符过滤报文,该收的收下,不该收的丢弃。其好处是可在线上网下网、即插即用和多站接收;

二是特别强化了对数据安全性的关注,满足控制系统及其它较高数据要求的系统需求。

在实践中,有两种重要的总线分配方法:按时间表分配和按需要分配。在第一种方法中,不管每个节点是否申请总线,都对每个节点按最大期间分配。由此,总线可被分配给每个站并且是唯一的站,而不论其是立即进行总线存取或在一特定时间进行总线存取。

这将保证在总线存取时有明确的总线分配。在第二种方法中,总线按传送数据的基本要求分配给一个站,总线系统按站希望的传送分配。因此,当多个站同时请求总线存取时,总线将终止所有站的请求,这时将不会有任何一个站获得总线分配。为了分配总线,多于一个总线存取是必要的。

CAN实现总线分配的方法,可保证当不同的站申请总线存取时,明确地进行总线分配。这种位仲裁的方法可以解决当两个站同时发送数据时产生的碰撞问题。不同于Ethernet网络的消息仲裁,CAN的非破坏性解决总线存取冲突的方法,确保在不传送有用消息时总线不被占用。

甚至当总线在重负载情况下,以消息内容为优先的总线存取也被证明是一种有效的系统。虽然总线的传输能力不足,所有未解决的传输请求都按重要性顺序来处理。在CSMA/CD这样的网络中,如Ethernet,系统往往由于过载而崩溃,而这种情况在CAN中不会发生。

5. CAN总线的作用

在这里插入图片描述

在汽车上,CAN总线的作用就是把不同的电子控制单元(ECU,包含汽车仪表、变速箱、辅助刹车系统、控制模块、各种传感器等)连接起来,实现信息的实时同步,然后这些部件都执行同一套标准协议。

这样的好处是兼容性高,信息可以可靠共享,并且能减少整车的线束数量。

把汽车比如成人体,那CAN总线就是神经系统,电子控制单元(ECU)就是身体的一部分,身体是由多个ECU组成的,各个ECU之间通过神经系统进行通信,一个部分感知到的信息可以与另一部分共享。

简单来说,CAN总线具备以下优点

  • 简单低成本:ECU通过单个CAN系统进行通信,而不是直接的复杂模拟信号线通信,这样减少了错误,重量,接线和成本。
  • 完全集中:CAN总线提供了一个接入点,可以与所有网络ECU进行通信,——支持集中诊断,数据记录和配置。
  • 稳定:CAN总线具有强大的抗电干扰和抗电磁干扰能力,非常适合对安全要求严格的应用(例如车辆)。
  • 高效:通过ID对CAN帧进行优先级排序,以便优先级最高的数据可以立即访问总线,而不会引起其他帧的中断。

6. CAN的发展历史

在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。

为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,德国博世(BOSCH)公司在20世纪80年代专门为汽车行业开发的一种串行通信总线。

此后, CAN 通过 ISO11898ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。

由于其高性能、高可靠性以及独特的设计而越来越受到人们的重视,被广泛应用于诸多领域。而且能够检测出产生的任何错误。当信号传输距离达到10km时,CAN仍可提供高达50kbit/s的数据传输速率。由于CAN总线具有很高的实时性能和应用范围,从位速率最高可达1Mbps的高速网络到低成本多线路的50Kbps网络都可以任意搭配。因此,CAN己经在汽车业、航空业、工业控制、安全防护等领域中得到了广泛应用。

7. ISO/OSI基本参照模型与CAN协议

CAN 协议中关于 ISO/OSI 基本参照模型中的传输层、数据链路层及物理层,具体的定义如下图所示。
在这里插入图片描述

数据链路层分为 MAC 子层和 LLC 子层, MAC 子层是 CAN 协议的核心部分。数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息的帧化、仲裁、应答、错误的检测或报告。数据链路层的功能通常在 CAN 控制器的硬件中执行。

在物理层定义了信号实际的发送方式、位时序、位的编码方式及同步的步骤。但具体地说,信号电平、通信速度、采样点、驱动器和总线的电气特性、连接器的形态等均未定义。这些必须由用户根据系统需求自行确定。

8. CAN总线协议标准

CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。 ISO11898 和 ISO11519-2 标准对于数据链路层的定义相同,但物理层不同。

  • 关于 ISO11898

ISO11898 是通信速度为 125kbps-1Mbps 的 CAN 高速通信标准。
目前, ISO11898 追加新规约后,成为 ISO11898-1 新标准。

  • 关于 ISO11519

ISO11519 是通信速度为 125kbps 以下的 CAN 低速通信标准。
ISO11519-2 是 ISO11519-1 追加新规约后的版本。

下图表示 CAN 协议和 ISO11898 及 ISO11519-2 标准的范围。
在这里插入图片描述

9. CAN总线协议数据链路层中的帧

通信是通过五种类型的帧进行的:

  • 数据帧:发送单元向接收单元传送数据的帧
  • 遥控帧:接收单元向具有相同ID的发送单元请求数据的帧
  • 错误帧:当检测出错误时向其他单元通知错误的帧
  • 过载帧:接收单元表明其自身尚未做好准备的帧
  • 帧间隔:将数据帧及遥控帧与前面的帧分离开来的帧

前四种为信息帧,帧间空隙(帧间隔)位于数据帧和远程帧与前面的信息帧之间,由帧间空隙和总线空闲状态组成。帧间空隙是必要的,在此期间, CAN不进行新的帧发送,为的是CAN控制器在下次信息传递前有时间进行内部处理操作。当总线空闲时CAN控制器方可发送数据。

其中,数据帧和遥控帧有标准格式和扩展格式两种格式。 标准格式有 11 个位的标识符(Identifier: 以下称 ID) ,扩展格式有 29 个位的 ID。

这里主要介绍两种格式的数据帧(标准与扩展)。如下是格式对比图:
在这里插入图片描述

讲解具体格式之前,首先明确一个概念:

显性电平和隐性电平

总线上的电平有显性电平和隐性电平两种。
总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。
“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)

标准数据帧

只有11位标识符,每帧的数据长度为51+(0~ 64)=(51~117)位。注:不计位填充(位填充将在稍后介绍)。

在这里插入图片描述

  • 帧起始:表示数据帧开始的段。

    • SOF:帧起始(1位),显性(0)表示报文的开始,并用于同步总线上的节点
  • 仲裁域:表示该帧优先级的段。

    • 标识符: 标识符(11位),标准格式具有11位标识符,用来确定报文的优先级。此域的数值越小,优先级越高。
    • RTR: 远程发送请求位(1位),当需要从另一个节点请求信息(遥控帧)时,此位为显性(0)。
      所有节点都能接收这个请求,但是帧标识符确定被指定的节点。响应数据帧同样被所有节点接收,可以被有兴趣的节点使用。
  • 控制域:表示数据的字节数及保留位的段。

    • IDE: 标志符扩展位(1位),为显性(0)时使用标准格式,为隐性(1)时表示这是扩展格式。
    • r0:保留位(1位),必须全部以显性电平发送,但接收方可以接收任意电平。
    • DLC:数据长度代码(4位),表示传输数据的字节数目,一帧最多传输8字节用户数据
  • 数据域:数据的内容,可发送 0~8 个字节的数据。

  • 校验域:检查帧的传输错误的段。

    • CRC:循环冗余校验证码(16位,包括1位定界符),CRC校验码用来校验用户数据区之前的(包含数据区)传输数据段。
  • 应答域:表示确认正常接收的段。

    • ACK:包含应答位和应答界定符(2位)。
      发送节点的报文帧中,ACK两位是隐性位,当接收器正确地接收到有效的报文,接收器会在应答位期间向发送节点发送一个显性位,表示应答。如果接收器发现这帧数据有错误,则不向发送节点发送ACK应答,发送节点会稍后重传这帧数据。
  • 帧结束:表示数据帧结束的段。

    • EOF:帧结束标志位(7位),全部为隐性位。如果这7位出现显性位,则会引起填充错误。
    • IFS:帧间隔标志位(7位),CAN控制器将接收到的帧正确的放入消息缓冲区是需要一定时间的,帧间隔可以提供这个时间。

扩展数据帧

在这里插入图片描述

扩展格式相对于标准格式改动的内容如下:

  • SRR:代替远程请求位,为隐性。所以当标准帧与扩展帧发送相互冲突并且扩展帧的基本标识符与标准帧的标识符相同时,标准帧优先级高于扩展帧。
  • IDE :为隐性位表示标志位扩展帧,18位扩展标识符紧跟着IDE位。
  • 18位标识符:增加18位标识符。
  • r1:保留位。

资料参考

总线 - 百度百科
CAN总线协议 - 百度百科
干货 | 多年经验工程师总结CAN总线入门知识
CAN总线技术详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值