一、CAN的介绍
视频课链接:趋近于完美的通讯 CAN总线!4分钟看懂!_哔哩哔哩_bilibili
052:车载测试之CAN总线通信:02:CAN协议的标准数据帧_已压缩_哔哩哔哩_bilibili
CAN:Controller Area Network 控制器局域网
这里的控制器在汽车中的专业术语叫ECU(电子控制单元)。ECU可以看成超小型的计算机,它内部集成了供电系统、单片机、驱动系统,是汽车里最小的控制模块。
图1 ECU结构
Can总线出现之前:
Can总线出现之后:
为了能让ECU之间进行通信,人们设计了CAN协议。将多个ECU挂载到CAN总线上,就可以组成局域网通讯,大大减少线束的长度。
二、CAN总线是如何通讯的
要进行CAN通讯,需要专门的CAN收发芯片。经过CAN收发器后,普通信号会被转化成差分信号(CAN HIGH和CAN LOW)。
图2 CAN收发器
如果发送低电平,它的两根线分别输出3.5V和1.5V,电压差为2V。这是显性电平,表示逻辑0。当发送高电平时,它的两根线输出都是2.5V,电压差是0V。这是隐性电平,表示逻辑1。
图3 显性电平和隐性电平
同样的,CAN收发器也可以把接收到的差分信号转化为普通电平信号,然后再发给单片机。
三、差分信号的优势
普通信号只有一根线,当某一点受到干扰,它的电平就会发生跳变,这样会导致传输出错,所以不能进行长距离传输。
而CAN通讯采用的差分信号是两根线共同作用,而且是双绞线缠绕,即使受到干扰,也是两根线同时受到干扰,压差保持不变,这样就能保证传递的信息不受干扰。所以CAN信号可以传输的距离很长,可达1000米。
图4 差分信号
四、CAN通讯的传递信息
图5 数据帧组成
我们可以将整个数据帧分成7个部分。
(1)帧起始
起始位:逻辑位是0。
(2)仲裁域(标识符+RTR)
仲裁域能判定这一帧报文的优先级,优先级数据帧>远程帧。同为数据帧,则根据id判断优先级。
识别码(标识符):11位,判断这一帧信息是发送给哪个设备的。设备的“身份证”,也代表了优先级。从左到右,最多连续出现7个1。
图6 识别码
RTR位:区分数据帧和远程请求帧;为1时表示远程请求帧,为0表示数据帧。
(3)控制域(IDE+保留位+DLE)
控制码:6位,控制数据帧长度。第一位为IDE,用于区分标准格式(0)和扩展格式(1);第二位是空闲位;接下来是DLC,其数值决定数据码是多少字节。
DLC有效值:0000-1000(8),1001、1011等等同于8 byte。
图7 控制码
(4)数据域(0-64 bit)
前4个域根据特定算法(发送方和接收方约定的算法)算出CRC序列的数值(15位),再与实际序列对比。
(5)CRC域
CRC码: 16位,循环冗余校验位,确保数据的准确性。校验发出来的数据和实际收到的数据是否一致。若数据有问题,会重新发送一遍数据帧。
CRC界定符:逻辑位为0,代表CRC发完了。
(6)ACK域
ACK槽:发送方发出的是隐形电平(逻辑1),ACK槽写成0代表收到的是对的;1代表没有正确接收。
(7)帧结束
连续的7个1代表帧结束。