参考视频:【趋近于完美的通讯 CAN总线!4分钟看懂!】 https://www.bilibili.com/video/BV14k4y187e6/?share_source=copy_web&vd_source=d6a39c0819730c4f4ed16fb359bbce41
参考文章:https://leon1741.blog.csdn.net/article/details/106199472?fromshare=blogdetail&sharetype=blogdetail&sharerId=106199472&sharerefer=PC&sharesource=welclose&sharefrom=from_link

CAN总线

CAN(Controller Area Network,控制器局域网)是一种串行通信总线技术,专为工业环境、汽车电子等对可靠性、实时性和抗干扰能力要求极高的场景设计。

单片机有发送和接收两条线分别与CAN收发器连接。

在这里插入图片描述

1. 单片机发送电平

1.1 单片机发送低电平(逻辑0):

经过CAN收发器后,CAN收发器右端的两个差分传输线将输出的压差为2V。

1.2 单片机发送高电平(逻辑1):

经过CAN收发器后,CAN收发器右端的两个差分传输线将输出的压差为0V。
在这里插入图片描述
CAN总线采用的是差分信号,所以其传输距离可以很长,低速状态下可以达到1000m。
在这里插入图片描述

1.3 显性与隐性电平

在CAN总线中,涉及到仲裁的情况,这种情况来判断优先级时,使用的是线与的特性,即同一条总线上如果出现高电平和低电平,这段电平将直接变为低电平。

即逻辑0(低电平)优先,所以逻辑0被称为显性电平,逻辑1被称为隐性电平

2. 数据帧组成

在传输信号时,单纯的高低电平无法区分某段信号(如总线发送010011)的功能和作用。所以,在数据通信时,将一定长度的逻辑01的组合描述为并遵循一定协议来描述每一份有效信息。

而CAN总线使用不定长的帧,帧的多个段各自包含特定信息。典型的帧格式如下图:

在这里插入图片描述

2.1 开始与结束(起始位和结束码)

起始码只有一位,也叫起始位,固定为逻辑0。

结束码为最后的7个1,即图中涂黑的7位。

2.2 描述身份(识别码)

每个挂载在总线上的设备都有自己的识别码,根据识别码,就能够知道这一帧数据是发给哪个设备的。

标准帧中,识别码为11位,在拓展帧中,识别码为29位。

在这里插入图片描述

2.3 发送数据或远程请求(RTR位)

RTR位是用来区别数据帧或者远程请求帧的。

数据帧主动发送数据的帧,是 CAN 总线中最常用的帧类型。当一个节点(如传感器、ECU)有数据需要传输(如温度、转速、故障码)时,会主动发送数据帧,将数据广播到总线上,所有节点均可接收(需根据 ID 过滤是否处理)。

远程请求帧主动请求其他节点发送数据的帧,本身不携带数据,仅用于 “向指定节点索要特定数据”。当一个节点(如仪表盘)需要获取某数据(如转速)但该数据不由自己采集时,会发送远程请求帧,触发拥有该数据的节点(如发动机 ECU)发送对应的数据帧。

2.4 信息长度控制(控制码)

控制码由IDE位、空闲位和DLC码构成。

在这里插入图片描述

2.4.1 IDE位:标识符扩展位

控制码中的IDE位是用来区分标准帧和拓展帧的,在标准帧中,识别码为11位,在拓展帧中,识别码为29位。

标准帧IDE位是0,而拓展帧中为1。

  • 要注意的是,在拓展帧中,识别码被拆开为11位ID+SSR+IDE+18位ID的形式,这29位ID才是真正的识别码。

    在这里插入图片描述

2.4.2 空闲位

空闲位固定为0。

2.4.3 DLC(Data Link Control)码

DLC码控制数据码(真正传递的信息)的长度,由4位2进制数控制。

如DLC码为2进制的8时,后面会有8个字节(64位)的数据码。

2.5 信息本身(数据码)

刚刚已经提到,数据码的长度由控制码决定。

在这里插入图片描述

2.6 校验(CRC码:循环冗余校验位)

CRC码共16位。

首先是15位CRC校验码(即下图红色部分),设备接收端(如接收信息的ECU)会根据数据计算出它的CRC校验码,如果计算出来的CRC校验码和发送过来的不一致,说明数据出现了问题,就会重新发送一遍数据帧;

接着是1位CRC界定符(即下图白色部分),它固定为逻辑1,目的是为了和后面的信息隔开。
在这里插入图片描述

2.7 接收确认(ACK码)

ACK码为两位,分别是ACK确认槽ACK界定位
在这里插入图片描述

2.7.1 ACK确认槽

是上图的第一位,发送端发送逻辑1,在一位位的发送过程中,如果接收端收到该位,要将其拉低为逻辑0表示收到

2.7.2 ACK界定位

是上图的第二位,它固定为逻辑1,目的是为了和后面的信息隔开。

2.8 结束

结束码在开始就提到过,使用7个1表示数据帧的结束。

在这里插入图片描述

3. 以分段形式分隔数据帧

在这里插入图片描述
在这里插入图片描述

4. 仲裁

如果挂载在同一个CAN总线上的两个设备同时发送数据,需要进行仲裁判断哪个设备优先。
在这里插入图片描述

在同一总线上,同时出现逻辑1和逻辑0的情况下,总线会被置为0,此时发送逻辑1的设备将停止发送数据帧。实际上,从二进制的数字大小来看,是识别码小的优先。如 00000000010 和 00000000011 分别代表十进制2和3,优先的是识别码00000000010。

在这里插入图片描述

5. 远程帧的构成

在这里插入图片描述

6. 数据帧和远程帧的区别

在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐