CAN总线技术基本概念简述

参考文献
[1] 陈海红. CAN总线技术与嵌入式应用研究[M]. 第一版. 赤峰:内蒙古科学技术出版社, 2015.
[2] 亢雪琳. 基于STM32的CAN总线通信设计[D]. 吉林大学, 2013.

1 CAN总述

CAN(Controller Area Network,控制器局域网)总线技术属于现场总线的范畴,最初被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络;现如今其应用领域已经扩大到智能建筑、机械工业、机器人等多个领域。

CAN总线是广播类型的总线,因此所有节点都可以侦听到所有传输的报文,无法将报文单独发送给指定节点;但是,CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应。

总线使用不归零位填充,模块以线与逻辑连接到总线:如果只有一个节点向总线传输逻辑0,那么不管有多少个节点向总线传输逻辑1,整个总线都处于逻辑0状态。

CAN标准定义四种不同的报文类型。报文使用逐位仲裁机制来控制对总线的访问,且每条报文都带有优先级标记。此外,CAN标准还为错误处理和消除定义了详细的方案。

CAN总线特点可总结如下:

  1. CAN总线的传输信号使用差分电压传送,用显性表示0,隐性表示1
  2. CAN总线理论上节点数几乎不受限制,但受电气特性限制最多能接110个节点
  3. 很远的数据传输距离(10km),高速的数据传输速率(1MB/s)
  4. 可靠的错误处理和检错机制:自动重发遭到破环的信息;节点在错误严重的情况下将自动退出总线
  5. 可采用多主或对等网络结构,网络上任一节点均可主动发送报文
  6. 采用逐位仲裁机制访问总线,减少了总线冲突仲裁的时间

关于总线系统的可靠性
从总线系统数据的角度看,可靠性就是指对传输过程中产生的数据错误的辨别能力。可通过测量一个系统存留的数据错误的概率来衡量一个系统的可靠性。存留的数据错误是指数据在传输过程中出现的没能被系统探测出来的错误。因此CAN总线具有极强的可靠性。

关于总线系统的实时性
报文的传输延迟包括4个部分:帧的延迟、软件延迟、处理器延迟和总线访问延迟

  1. 帧的延迟:来自帧的长度和波特率。因此在CAN中,扩展帧对传输延迟时间的影响大于标准帧。
    传输的延迟是可变的,一是因为报文的优先级会导致每次总线访问时间不同,二是因为数据本身的值引起填充位填充数量的不同,从而导致数据帧长度的不同。
  2. 软件延迟:与CAN对象的数量和数据长度相关。
    工业过程常常是周期性的,因而要求周期性的数据传输。采用最短的过程周期时间可以为每个对象保证最大总线访问时间。高时间要求的应用系统通常要求毫秒级精度的时钟,这在集中控制系统中是很容易实现的,但在分布式系统中,如利用CAN总线连接大量的传感器和控制器系统中,由于没有一个全局的系统节拍,有一定的困难,可以通过在保证充分精度的条件下同步所有节点的局部时钟来解决。

2 CAN模型

CAN 层的定义与开放系统互连模型 OSI 一致,CAN 的规范定义了模型的最下面两层数据链路层和物理层。
在这里插入图片描述

2.1物理层

物理层定义信号的传输。

信号标识信号名称
CAN HCAN H BUS(High Dominant)
CAN LCAN L BUS(Low Dominant)
CAN GNDB信号地

CAN 总线物理层没有严格规定,能够使用多种物理介质例如双绞线光纤等,最常用的就是双绞线信号,使用差分电压传送(常用总线收发器),两条信号线被称为 CAN_HCAN_L,静态时均是 2.5V 左右,此时状态表示为逻辑1,也可以叫做隐位;用 CAN_H 比 CAN_L 高表示逻辑 0,称为显位,此时通常电压值为 CAN_H=3.5V和 CAN_L=1.5V,竞争时显位优先,即显性状态和隐性状态同时发送时,总线与位显性状态,故两个节点同时分别发送0和1时,总线上呈现0。
在这里插入图片描述
所有从站的 CAN_L、CAN_H 脚直接相接即可,采用串连的方式接线,不能采用星型连接方式;
主站端和最后一个从站端需要接 120 欧姆的终端电阻;
通讯电缆请采用屏蔽双绞线,并做好接地处理(短距离通讯时地线可以不接,但是长距离、高波特率通讯时建议把地线接地);

2.2数据链路层

数据链路层分为逻辑链路子层LLC和媒体访问控制子层MAC:
LLC子层:为数据传输提供服务;
MAC子层:负责数据的封包和拆包、帧的结构、错误检查与标识;

3 CAN帧结构

于1991年正式发布的CAN2.0版包括两种规范,A规范和B规范,A规范给出了CAN报文标准格式,即CAN2.0A 帧,拥有11位标识符;B规范中给出了CAN报文扩展格式,即CAN2.0B帧,拥有29位标识符。扩展格式相比于标准格式,可以容纳更多数量设备之间的通讯。

关于标识符
标识符是数据帧和远程帧的一个域,它给出的不是目标节点地址,而是报文本身的特征。信息以广播方式在网络上发送,所有节点都可以接收到,节点通过标识符判定是否接收这帧信息。

CAN总线报文的一帧由帧起始、控制域、仲裁域、数据域和CRC校验域组成。CAN总线规定了4种帧结构,分别是数据帧、远程帧、错误帧和过载帧,以及帧间隔。

  1. 数据帧:用于发送节点向接收节点传送数据的帧
  2. 远程帧:用于一个节点向另一个节点请求数据的帧
  3. 错误帧:任何节点检测到总线错误时都会发出该帧
  4. 过载帧:接收节点用于表明自己没有做好接收准备的帧
  5. 帧间隔:用于分离数据帧或远程帧与前面的帧。

CAN为短帧结构,因而可以缩短传送时间,因而传输时间段受干扰的概率低。

3.1数据帧

数据帧用于发送节点向接收节点传送数据。
在这里插入图片描述

帧起始: 用于标记数据帧的起始,由一个单独的“显性位”组成。
仲裁域: 标识数据帧的优先级,由标识符和远程发送请求位((Remote TransmissionRequest,RTR)组成。标准格式帧和扩展格式帧的仲裁域不同。
● 标准格式:11位标识符和RTR位组成;
● 扩展格式:在标准格式的基础上,增加了18位标识符,和SRR位(Substitute Remote Request,替代远程请求位, 隐性位)、IDE位(Identifier Extension,标识符扩展位,标准格式中为显性位,扩展格式中为隐性位)。
控制域: 标识数据帧的字节数以及保留位,标准格式帧和扩展格式帧的控制域不同。
●标准格式:包括IED位、保留位r0和一个数据长度代码;
●扩展格式:包括两个保留位和一个数据长度代码;
数据域: 0~8字节,可以为0
CRC域: 检查帧是否错误
应答域: 接收节点对正确接收的报文给出应答,对不一致报文进行标记
帧结束: 7位隐性位组成

3.2远程帧

远程帧用于一个节点向另一个节点请求数据,回应节点传送一个数据帧,该数据帧与请求数据的远程帧由相同的标识符命名。
远程帧格式与数据帧近似,可以通过RTR位区分,远程帧的RTR位是隐性的,而数据帧的RTR位为显性。
远程帧没有数据域,因而数据长度代码的数值是不受制约的。
在这里插入图片描述
远程帧的标准格式与扩展格式结构相同,只是扩展格式有29位标识符。

3.3错误帧

任何节点检测到总线错误时都会发送错误帧。
错误帧由两个不同的域组成。第一个域是由不同节点提供的错误标志的叠加,第二个域是错误界定符
在这里插入图片描述
错误标志有两种形式:积极错误标志消极错误标志

  1. 积极错误标志:由6个连续的显性位组成;
  2. 消极错误标志:由6个连续的隐性位组成,除非被其它节点的显性位覆盖。

**错误积极节点:**一个错误积极节点如果检测到一个错误条件,会发送一个错误积极标志。这一错误标志违反了位填充规则或破坏了应答域和帧结束域的固定格式,因此会引起其他节点检测到新的错误条件并各自开始发送错误标志。此时,总线上可被检测到的显性位序列是各个节点发出的不同错误标志叠加的结果。
**错误消极节点:**一个错误消极节点如果检测到一个错误条件,会试图发送一个消极错误标志,并从该消极错误标志开始,等待连续的六个具有相同极性的位。当检测到六个具有相同极性的位时,标识消极错误标志发送完毕。

3.4过载帧

过载帧是接收节点用于表明自己没有做好接收准备的帧。
过载帧由过载标志和过载界定符组成。
在这里插入图片描述
3种引起过载的情况:

  1. 接收器要求延迟下一数据帧或延迟帧的到达;
  2. 在帧间隔报文中,间歇场域的第一和第二位检测到显性位;
  3. 当一个AN节点在错误界定符或过载界定符的第8位(最后一位)采样到一个显性位时,节点会发送一个过载帧,而非错误帧。

3.5 帧间隔

帧间隔用于分离数据帧或远程帧与前面的帧。
数据帧和远程帧通过插入帧间隔的方法将本帧与前帧分开。注意过载帧和错误帧之间没有帧间隔,多个过载帧之间也没有帧间隔。
帧间隔由间歇域、暂停发送域和总线空闲部分组成,只有刚发送出前一报文的错误消极节点才需要暂停发送域。

4 CSMA/CD和逐位仲裁机制

CAN总线上的节点级别相同,无主从之分,都可以是发送节点或接收节点。只要总线空闲,节点即可发送数据;发送节点不会指定接受节点,而由接收节点决定是否接收该数据。
由于所有节点都可以同时发送数据,因而会出现总线竞争问题,可采用CSMA/CD机制解决。

CSDMA/CD(Carrier Sense Multiple Access with Collision Detection,载波侦听多路访问/冲突检测)
载波侦听(Carrier Sense):指网络上各个节点在发送数据前,都要确认总线是否空闲(有无数据传输),若总线忙,则不发送数据;若总线空闲,立即发送准备好的数据。
多路访问(Multiple Access):指网络上所有节点使用同一条总线收发数据,且发送数据形式为广播式。
冲突检测(Collision Detection):是指发送节点在发出信息帧的同时,还必须监听媒体,判断是否发生冲突(同一时刻,有无其他节点也在发送信息帧)。

采用CSMA机制访问总线,可以允许多个节点挂接在同一个网络上。节点在发送信号之前,先对总线上的信号进行检测,只有总线处于空闲状态时才运行发送,当总线上有多个节点同时发送数据时,通过逐位仲裁机制解决。

逐位仲裁机制的工作原理:

  1. 在CAN总线上发送的每一条报文都具有唯一的一个11位或29位的数字ID作为标识符。CAN总线状态取决与二进制数0而不是1,所以ID号越小,则该报文拥有越高的优先级。
  2. 当具有相同标识符的数据帧和远程帧在总线发生冲突时,因为仲裁域的最后一位时RTR位,在数据帧中为显性,远程帧为隐性,因此数据帧优先发。
  3. 标准格式ID与具有相同ID的扩展格式的数据帧在总线上相遇时,标准格式的RTR位为显性,扩展格式的SRR位为隐性,因此标准格式的数据帧优先发送;(这也意味着在同一条总线中标准格式数据帧和扩展格式数据帧不会相互冲突)
  4. 标准格式ID与具有相同ID的扩展格式的远程帧在总线上相遇时,虽然标准格式的RTR位同扩展格式的SRR位相同,但下一顺位中,标准格式的IDE为显性,扩展格式的IDE为隐性,因此标准格式的远程帧优先发送。

总结

  1. CSMA/CD机制3大功能:载波侦听、多路访问、冲突检测;
  2. 逐位仲裁机制用于当总线上由多个节点同时发送数据时,决定各帧发送的优先级,其中:
    ●ID号越小,报文优先级越高
    ●ID号相同,数据帧比远程帧优先级更高
    ●ID号相同,标准格式数据帧和远程帧优先级高于扩展格式数据帧与远程帧

5 CAN通信同步

串行通信必须解决通信中的发送器和接收器之间的同步问题。
CAN总线没有专用的时钟信号线,同步信息包含于总线上传输的数据之中。总线信息从隐性到显性的跳变提供了同步信息。如果总线上出现了多个连续的显性或隐性信息,就会影响同步的提取,因此CAN采用位填充机制

位填充一般指数据所占据数据位没有被全部使用时,在没有使用的数据位上采用“0”或“1”填充。在CAN中,位填充是为防止突发错误而设定的功能。

位填充机制的规则是:在一帧中的起始帧、仲裁域、控制域、数据域和CRC域部分,当发送器在待发送的比特流中检测到5个连读的具有相同数值的位时,自动插入1个补位码(添加一个位的反型数据,例如在5个隐性位后添加1个显性位),数据帧和远程帧的其余部分(CRC界定符、应答域和帧结束)具有固定格式,不进行位填充。错误帧和过载帧也具有固定格式,不进行位填充。
在这里插入图片描述

6 CAN总线错误处理与故障界定

6.1 CAN总线错误处理

CAN共有5种错误类型,这些错误可能同时发生:

  1. 位错误
    比较输出电平和总线电平(不含填充位),当两个电平不一样时,即认为发生了位错误。
    进行[检测位错误]动作的节点:输出4类帧的节点和输出Ack、错误的节点;
    被检测的帧:4类帧
    不被视为位错误的情况:
    ●仲裁失利:在仲裁域输出隐性电平但检测出显性电平
    ●填充错误:在仲裁域作为填充位输出隐性电平,但检测出显性电平
    ●其它节点的Ack应答:发送节点在Ack段输出隐性电平,但检测到显性电平
  2. 填充错误
    在需要位填充的段内,连续检测到6位相同电平。
  3. CRC错误
    接收到的数据计算出CRC结果域接收到的CRC顺序不同。
  4. 格式错误
    发现与固定的格式位段相反的格式。
    不被视为格式错误的情况:
    ●接收节点检测出EOF的最后一位是显性电平(前7位为隐性电平)
    ●接受节点检测出数据长度码是9~15的值
  5. Ack错误
    发送节点在Ack槽中检测出隐性电平。

ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

检测出错误条件的节点发送错误标志以指示错误。
处于主动报错状态节点输出的错误标志位为主动报错标志;处于被动报错状态节点输出的错误标志为被动报错标志
节点检测到位错误、填充错误、格式错误、Ack错误时,从检测出错误后的下一位开始输出错误标志。发送节点发送完错误帧后,将再次发送数据帧或远程帧。

6.2 CAN故障界定

CAN节点能区分瞬时扰动引起的故障和永久性故障,故障节点会被关闭。
CAN节点共有3种故障状态:

  1. 主动报错状态
    主动报错是指当节点检测到错误时,将主动地发送错误标志。主动报错节点可以照常参与总线通信,并在检测到错误时,送出一个活动错误标志
  2. 被动报错状态
    被动报错是指当节点出错时,由其它节点主动报错。处于被动错误状态的节点即使检测出错误,而其它处于主动错误状态的单位如果没发现错误,整个总线也被认为是没有错误的。被动报错节点可以参与总线通信,但不允许送出活动错误标志。当检测到错误时,只能送出认可错误标志,发送以后仍为被动报错状态,直到下一次发送初始化。
  3. 总线关闭状态
    CAN可以判断出错误的类型是暂时的数据错误还是持续的数据错误。节点在发生持续错误的情况下将自动退出总线。总线关闭时不允许节点对总线有任何影响。

为了界定故障,在每个总线单元中都设有两个故障计数器:

  1. 发送出错计数
  2. 接收出错计数
    这些计数将按照特定规则进行,根据计数值决定进入何种状态:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值