CAN通信总线协议详解
文章目录
通信总线协议五 :CAN
1. CAN总线简介
控制器局域网CAN
(Controller Area Network), 是一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,广泛应用于汽车领域。2. CAN总线基本概念
双绞线进行串行通信
,一根为CAN_H
,另一根为CAN_L
。显性电平
和隐性电平
两种。
“显性”状态
: VCAN-H = 3.5V, VCAN-L = 1.5V,即Vdiff = 2V;“隐性”状态
: VCAN-H 和 VCAN-L 固定在平均电压 2.5V,即Vdiff = 0V。“0”
,隐性电平表示逻辑值“1”
。
CAN分层结构
CAN总线控制器中集成了CAN协议的
物理层
和数据链路层
功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别
等项工作。
3. CAN 协议介绍
3. 1 CAN 协议消息报文格式
1. CAN帧格式可分为:
标准帧
(Stand Frame):具有11位标识符扩展帧
(Extend Frame):具有29位标识符2. 通信报文帧类型分为:
数据帧
:从发送节点向其它节点发送数据远程帧
:向其它节点请求发送具有同一识别符的数据帧错误帧
:当检测出错误时向其它节点指明其已检测到总线错误过载帧
:接收单元通知其尚未做好接收准备3. 帧结构:
帧起始
:标志帧的起始,由一个“显性”位
构成。仲裁场
:由标识符(ID)
和远程发送请求(RTR)位
组成。
标识符
:的长度为11位,这些位以ID-10至ID-0的顺序发送,最低位为ID-0,其中最高7位(ID-10 ~ID-4)必须不是全“隐性”。RTR位
:数据帧中是“显性”,远程帧是“隐性”。控制场
:6位组成,两个用于扩展的保留位和4位数据长度码。数据场
:由数据帧中被发送的数据组成,可包括0至8个字节, 远程帧无数据场
。CRC场
:包括CRC序列、CRC界定符。参加CRC校验的位场包括帧起始、仲裁场、控制场、数据场(假若存在)在内的无填充位流。CRC序列后随CRC界定符,它只包括一个“隐性”位。应答场
:为两位长度,包括应答间隙
和应答界定符
。在应答场中发送站送出两个“隐性”位,一个正确地接收到有效报文的接收器,在应答间隙期间,通过传送一个“显性”位将此信息报告给发送器(接收器发送“应答”)。帧结束
:由7个“隐性”位组成的标志序列界定的。4. 错误帧:
主动错误帧
:标志(6 个显性位)+ 界定符(8 个隐性位)被动错误帧
:标志(6 个隐性位)+ 界定符(8 个隐性位)5. 过载帧
过载标志
(6 个显性位) + 过载界定符
(8 个隐性位)6. 帧间空间
帧间隔将数据帧和远程帧与前面的帧分开
。3. 2 总线仲裁(Bus Arbitration)
“逐位仲裁”
;标识符的值小获得优先权;失去仲裁的节点在总线空闲时重新传送。3. 3 位流编码(Bit Coding)与位填充(Bit Stuffing)
位流编码
:“不归零”方法编码,位电平只有“0”和“1”;各位无附加同步信号;时钟频率误差及传输路径上的相位延迟引起同步偏差通过硬件同步或者再同步的方法调整时序。位填充
:发送器检测到位流里有5个连续相同值的位,便会自动在位流里补充一位,接收器自动删除这个补充位。固定位场中不用位填充,发送数据帧和远程帧时,SOF~CRC 场间的数据进行位填充。3. 4 位定时与同步
同步段、传播段、相位缓冲段1、相位缓冲段2
。

再同步情况1:边沿落在同步段以后,则把所差份额加到相位缓冲段1
再同步情况2 :边沿落在同步段以前,则从相位缓冲段2减去所差份额
再同步所加减的份额有个上限,该上限可取值1~4个时间份额,但不可大于相位缓冲段1。
3. 5 错误检测机制
- 五种节点错误类型
位错误
: 发送和监视的位值不相符合 (除仲裁场、应答场外)。填充错误
: 位填充编码位流中出现了第六个连续相同的位电平。形式错误
: 一个固定形式的位场含有一个或多个非法位。应答错误
: 应答间隙所监视的位不为“显性。CRC 错误
: 接收器的CRC结果和发送器的CRC结果不同。-
两种错误计数器:
发送错误计数(TEC)
和接收错误计数(REC)
-
总线节点存在以下三种状态:
错误主动
:节点可以正常地参与总线通讯,并在错误被检测到时发出主动错误标志。错误被动
:节点不允许发送主动错误标志。“错误被动”的单元参与总线通讯,在错误被检测到时发出被动错误标志。总线关闭(Bus Off)
:“总线关闭”的单元不允许在总线上有任何的影响。- Bus Off恢复条件:
128次11个连续的隐性位
。用户程序请求恢复
,通常MCU中的CAN控制器都可以支持自动恢复和手动恢复两种方式。CAN总线的bus off恢复需要满足整车的网络管理规范。4. CAN 网络通信矩阵介绍
上述介绍的CAN总线协议的相关内容,由CAN控制器进行实现,开发中了解CAN控制器芯片的控制方法即可。对于大多数汽车开发人而言,更多的是了解CAN网络通信矩阵。
4.1 通信矩阵
信号、消息和网络节点
之间的相互关系以表格形式显示,由整车厂完成定义,车辆网络中的各个节点需要遵循该通讯矩阵才能完成信息的交互和共享。
网络节点
:一般一个汽车控制器作为一个网络节点消息
:一个控制器会发出多个帧报文,每帧报文称为消息信号
:一阵报文长度为1-8 byte, 大多为8byte,即64bit ,规定不同的bit代表不同信号,则一阵报文包含多个信号
报文名称
:每个报文消息规定的名字ID
:唯一标识报文的ID号,规定ID范围为0x0 – 0x7FF,0x5xx用于网络报文,0x7xx用于诊断报文,其它用于应用报文。报文类型
:分为周期报文,事件报文,周期事件报文报文周期
: 报文发送的周期长度
: 报文字节长度,1- 8 byte信号名称
:一般是以发送节点的名字开头,“_” 后面是具体指代的内容。信号长度
:该信号的长度,单位是bit 位。信号类型
:Boolean(布尔类型true或false) 还是 Unsigned(无符号)。起始字节
:起始位所在的字节序号。起始位
:信号LSB(least significant bit)所在的位置。结束位
:信号MSB(Most Significant Bit)所在的位置。精度/偏移量
:描述信号值如何转变成信号物理值物理值公式
: 真实物理值 = 信号值 * 精度 + 偏移量
。物理值范围
:经过物理值转换后的最大最小值。4.2 DBC文件
Data Base CAN
,描述CAN网络中的通信信息,即根据CAN通讯协议制作的一份用于解析CAN报文数据的文件。因为我们获得的每一帧报文都是一串8个字节、十六进制的数据(共64bit),想要知道报文数据代表什么,需要对着通讯协议去翻译出数据代表含义。而DBC文件的作用就是帮助我们直接得到报文数据的代表含义,省去了查通讯协议这个步骤,直接得到报文数据的具体含义。
Intel格式
:以起始位为原点,自上而下填充。Motorola格式
:以起始位为原点,自下而上填充。
信号的高位
:即最能表达信号特性的因子,最左侧的位,数量级最大,牵一发动全身,即高位。信号的低位
:即最不能表达信号特性的因子,最右侧的位,即低位。信号的起始位
:信号的最低位。主机厂在定义整车CAN总线通信矩阵时,每一个信号都从其最低位开始填写。
4.3 CANdb++
感谢阅读 若有错误 敬请见谅 !!!