来源:古月居
发布时间:2025-08-22
阅读量:3
一、CAN简介
在汽车电子中,有许多ECU控制模块,控制着不同功能,为了这些众多ECU模块能够协同工作,就出现了CAN,将多个ECU模块挂载到CAN总线上即可,实现ECU之间的局域网通信。
CAN是串行通信协议,CAN 总线支持多主通信, 所有节点( ECU) 均可主动发送数据, 无需依赖中心控制器。 其采用非破坏性仲裁机制, 通过ID 优先级解决总线冲突, 确保高优先级数据优先传输。 总线具备高可靠性, 内置 CRC 校验、 错误检测与恢复机制, 同时采用差分信号增强抗电磁干扰能力。CAN 总线通过简化布线和降低系统复杂度, 实现了低成本的优势。
二、CAN硬件连接
CPU自带CAN控制器
**CPU 没有 CAN 控制器 **
can总线两端120欧姆为终端电阻,是为了消除总线上的信号反射。
由上图可知,CAN硬件连接中并没有时钟线,则说明是异步连接,并且无法进行同时接收或发送,则说明是半双工通讯。
三、CAN电平信号
CAN_H: 高电平信号线, 通常电压范围为 2.5V 至 3.5V。
CAN_L: 低电平信号线, 通常电压范围为 1.5V 至 2.5V。
隐性状态( 逻辑“1”) : 当 CAN_H 与 CAN_L 的电压相等(通常为 2.5V) , 表示总线处于空闲状态。 此时, 总线没有数据传输, 所有设备都在等待通信。 隐性状态也被称为**“空闲电平”或“逻辑 1”**。
显性状态( 逻辑“0”) : 当 CAN_H 与 CAN_L 的电压差为 2V 时, 表示数据正在传输。 具体来说, CAN_H 为 3.5V, CAN_L 为 1.5V, 表示逻辑“0”。 显性状态表示总线正在传输数据, 且具有较高的优先级。
差分信号的特性使得 CAN 总线在噪声环境中具有极强的抗干扰能力 。
四、CAN协议帧结构
4.1 什么是数据帧?
can通信是通过数据帧进行发送数据的,所以数据帧是数据帧携带数据从发送设备到接收设备。
4.2 帧的种类
4.3 标准数据帧
由上图可知,RTR为0说明该报文为数据帧,IDE为0说明为标准数据帧。**仲裁字段中禁止高 7位全为隐性, 以避免仲裁错误。 **
CAN的ACK应答是在发送数据时就进行,在数据帧过程中,CAN发送数据时会释放总线,则为高电平,若有数据接收,则会去拉低电平,接收完毕后释放电平,这也是为什么CRC、ACK界定符都为1。
4.4 扩展数据帧
扩展数据帧是为了提高ID容量。上面的图中需要注意IDE的位置:会跟着原标准数据帧的11位ID后同时为1,告诉后面此帧是扩展帧,同时还有一个SRR位(固定为1);等到29位ID扩展完毕之后,后面才是原来的RTR,RTR为0说明还是为数据帧。同时后面多了两个R0保留位(固定为0)。
SRR 位的作用:SRR 位在 CAN 协议中用于替代标准帧的 RTR 位, 位于扩展帧仲裁段中原 RTR 位的位置。 其作用是强制设置为隐性电平(1) , 以确保在标准帧与扩展帧同时竞争总线时, 标准帧因 RTR位显性(0) 而具有更高的优先级。 当标准帧和扩展帧同时发送时, 总线通过仲裁逻辑检测到显性电平(0) , 从而使标准帧胜出。
4.5 遥控帧
数据帧中减掉数据字段就是遥控帧。数据帧有标准数据帧和扩展数据帧,那么遥控帧也应该有两种。同时主要就是注意遥控帧的RTR位为1。
要注意扩展遥控帧的SSR位置,且为显性电平,使得扩展遥控帧的优先级低于标准遥控帧的优先级。
4.6 错误帧
当一个设备发出错误标志时,可能引发其他设备发生错误标志,所以错误标志可能有多个。(显性位:逻辑0、隐形位:逻辑1)
4.7 过载帧
4.8 帧间隔
帧间隔适用于分隔数据帧和遥控帧的帧。
4.9 位填充
位填充规则: 当数据中出现 5 个连续的相同极性位时, 在第 6 位插入一个与这些位极性相反的填充位。 这一机制通过打破可能出现的长串相同电平, 确保总线上始终有电平变化, 从而维持发送端和接收端的同步。
五、位时间
位时间就是一个(二进制)位在总线传输所需要的时间,一个位时间分成四段,这些段又称为TQ的最小时间单位构成。
波特率 = 1 / 位时间
位时间的作用:CAN是异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会使用约定好的波特率进行通讯。在CAN还会使用同步的方式来对抗干扰、降低误差,保证对总线电平信号进行正确的采样,确保通讯正常。主要就是通过位时间来调整采样点的位置处于采样信号的中间位置。