CAN总线知识点总结

CAN总线知识点总结

简介

​ CAN 是 Controller Area Network 的缩写即控制局域网,是 ISO*1 国际标准化的串行通信协议

应用场景

​ 最初CAN用于汽车产业中,由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。

​ 现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

1CAN通信标准

​ CAN总线有两个ISO国际标准分别为ISO11898,ISO11519。

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

在实际应用中一般通信波特率为500Kbps。

2CAN的组成

​ 如下图所示CAN由CAN控制器和收发器组成,支持CAN的单片机都会有CAN控制器,但是收发器需要自己去找合适的收发器芯片。

CAN总线知识点总结_第1张图片
常用的两种CAN总线连接结构如下图所示
CAN总线知识点总结_第2张图片

3CAN如何通信

​ 在 CAN 总线上,利用 CAN_H 和 CAN_L 两根线上的电位差来表示 CAN 信号。CAN 总线上的电位差分为显性电平隐性电平。其中显性电平为逻辑 0隐性电平为逻辑 1

个人觉得这些了解就可以了,感觉是硬件的需要关注的,当出现问题时这也可以作为排查问题的一种方法。可以用万用表或者示波器去打这些信号是否符合标准。

4CAN的通信特点

4.1 工作方式

​ CAN总线不像SPI总线那样分主从设备,CAN总线上的节点在总线空闲时间都可以发送数据。CAN是一种多主的工作方式。总线空闲状态:CAN总线规定,当总线上出现连续11位隐性电平,节点就认为总线是空闲状态,可以发送数据。

4.2 非破坏性位仲裁机制

​ 当多个节点向总线发送数据时,如何决定谁先发送,CAN总线规定了一种判断方法,当多个节点同时向总线发送消息时,对各个消息的标识符(即 ID 号)进行逐位仲裁,如果某个节点发送的消息仲裁获胜(ID值小的),那么这个节点将获取总线的发送权,仲裁失败的节点则立即停止发送并转变为监听(接收)状态。 这种仲裁机制既不会造成已发送数据的延迟,也不会破坏已经发送的数据,所以称为非破坏性仲裁机制。

5CAN协议数据帧(报文)

​ 这部分内容个人觉得是做嵌入式软件人员需要关注的,我们需要熟悉CAN协议中报文的种类和作用以及组成。

​ CAN协议规定了5种数据帧(报文)分别为数据帧遥控帧错误帧过载帧间隔帧。每种数据帧有相同之处也有不同之处。

5.1 帧结构组成

帧结构组成包含七个段:帧起始、仲裁段、控制段、数据段、CRC 段、ACK 段、帧结束数据帧(报文又分标准帧和拓展帧)
CAN总线知识点总结_第3张图片

5.1.1 帧起始

​ 帧的最开始的一位是帧起始,也叫 SOF(Start Of Frame),SOF 恒为显性位,即逻辑 0 。帧起始表示 CAN_H 和 CAN_L 上有了电位差,也就是说,一旦总线上有了 SOF 就表示总线上开始有报文了。

5.1.2 仲裁段

仲裁段是用来判定一帧报文优先级的依据,仲裁段中的 ID 号也是实现报文过滤机制的基础。仲裁段由以下几个部分组成

  • RTR位

Tranmission Request Bit (远程发送请求位)。在数据帧中,RTR 位恒为显性位 0,在遥控帧中,恒为隐性 1

这么做的原因是保证数据帧优先级高于遥控帧。比如:在某一时刻 t,节点 Node_A 发出了 ID 号为 ID_2 遥控帧报文来请求总线上的其它节点发出 ID 号为 ID_2 的数据帧报文。但是就在同一时刻 t,节点 Node_B 发出了 ID 号为 ID_2 的数据帧报文。这个时候怎么办呢,显然依靠 ID 号不能仲裁出这两帧报文(一个遥控帧,一个数据帧,ID 号相同)谁能占据总线的发送权,这种情况下,RTR 位就起作用了,由于 RTR 在数据帧中恒为显性 0,在遥控帧中恒为隐性 1,所以在 ID 号相同的情况下,一定是数据帧仲裁获胜。这就解释了 **RTR 位的作用:在 ID 号相同的情况下,保证数据帧的优先级高于遥控帧**。
  • SRR位

​ Substitutes for Remote Requests Bit(替代远程请求位),在扩展帧(数据帧或遥控帧)中,SRR 恒为隐性位 1,并且可以发现,扩展帧的隐性 SRR 位正好对应标准帧的显性 RTR 位,这就解释了 SRR 位的作用:在前 11 位 ID 号相同的情况下,标准数据帧的优先级高于扩展数据帧

  • IDE位

全称:Identifier Extension Bit(标识符扩展位)。在扩展帧中恒为隐性 1,在标准帧中,IDE 位于控制段,且恒为显性 0。且扩展帧 IDE 位和标准帧 IDE 位位置对应,这就保证了: 在前 11 位 ID 号相同的情况下,标准遥控帧的优先级一定高于扩展遥控帧

5.1.3 控制段

CAN总线知识点总结_第4张图片

  • 标准帧中 IDE 位对应扩展帧中的 IDE 位,保证在前 11 位 ID 号相同的情况下,标准帧的优先级一定高于扩展帧;
  • 然后是保留位 r0 和 r1(扩展帧),保留位 r0 和 r1 必须以显性电平发送,但是接受方可以接受显性、隐性及其任意组合的电平;
  • 最后是 4 个字节的 DLC(DLC3、DLC2、DLC1、DLC0)代表数据长度,指示了数据段中的字节数。对于没有数据段的遥控帧,DLC 表示该遥控帧对应的数据帧的数据段的字节数。

5.1.4 数据段

CAN报文中数据段最大为8个字节,用来承载数据。

5.1.5 CRC段

CRC主要用于校验发送方和接收方的报文内容是否正确。CRC 校验序列是根据多项式生成的 CRC 值,其计算范围包括:帧起始、仲裁段、控制段和数据段。 CRC 界定符恒为隐性 1

5.1.6 ACK段

  • 发送节点在 ACK 段发送两个隐性位,即发送方发出的报文中 ACK 槽为隐性 1;
  • 接收节点在接收到正确的报文之后会在 ACK 槽发送显性位 0,通知发送节点正常接收结束。所谓接收到正确的报文指的是接收到的报文没有填充错误、格式错误、CRC 错误。

5.1.7 帧结束

帧结束段表示该帧报文的结束,由 7 个隐性位构成。

5.2数据帧

​ 数据帧顾名思义就是携带数据的报文,作用是承载发送节点要传递给接收节点的数据。

数据帧 的帧结构如下图所示

CAN总线知识点总结_第5张图片

5.3 遥控帧

​ 遥控帧的作用可以描述为:请求其它节点发出与本遥控帧具有相同 ID 号的数据帧。遥控帧 相比于数据帧,从帧结构上来看,只是少了数据段,包含六个段:帧起始、仲裁段、控制段、CRC 段、ACK 段、帧结束
CAN总线知识点总结_第6张图片

在某个场景下,A节点需要B节点向自己发送一个相同ID的数据帧,那么可以通过遥控帧来进行请求。

5.4 错误帧

​ 在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。 错误帧由错误标志错误界定符两个部分组成。

  • 主动错误标志:6 个连续的显性位(6个零);
  • 被动错误标志:6 个连续的隐性位(6个1);
  • 错误界定符:8 个连续的隐性位(8个1)。

在 CAN 总线通信中,一共有五种错误:

  • 位错误

  • ACK 错误

  • 填充错误

  • CRC 错误
    组成。

  • 主动错误标志:6 个连续的显性位(6个零);

  • 被动错误标志:6 个连续的隐性位(6个1);

  • 错误界定符:8 个连续的隐性位(8个1)。

在 CAN 总线通信中,一共有五种错误:

  • 位错误
  • ACK 错误
  • 填充错误
  • CRC 错误
  • 格式错误

你可能感兴趣的:(单片机,mcu)