【通信协议系列】CAN总线协议

前言

本文旨在系统梳理CAN总线协议的核心知识要点。作为一名嵌入式开发者,我们经常需要与CAN总线打交道,但每次间隔一段时间后总会遗忘一些细节。因此撰写该博文既是对自己知识的系统梳理,也希望能帮助到同样需要理解CAN的友友们。

一、CAN总线基础知识

控制器局域网(Controller Area Network, CAN)是一种高性能、高可靠性的串行通信协议,最初由德国Bosch公司开发用于汽车电子系统。其核心特点包括:

  • 多主机均可主动发送消息

  • 差分信号传输抗干扰能力强

  • 完善的错误检测机制

二、CAN总线硬件连接

2.1 物理层组成:

1.双绞线传输介质

  • CAN_High (通常黄色)

  • CAN_Low (通常绿色)

2.终端电阻

  • 120Ω电阻(必须在线路两端各接一个)

  • 作用:阻抗匹配,消除信号反射

3.收发器芯片

  • TJA1050、SN65HVD23等

  • 负责TTL电平与差分信号的转换

2.2 采用差分信号传输的好处优势

  • 强抗干扰能力:通过比较两线电压差而非绝对电压值传输信号

  • 共模噪声抑制:外部干扰会同时影响两条线,差值保持不变

  • 长距离传输:理论可达10km(低速时)

差分信号线典型电压电平:

状态CAN_HighCAN_Low差值
显性(0)3.5V1.5V+2V
隐性(1)2.5V2.5V0V

三、CAN总线标准数据帧解析

格式:起始位+识别码+RTR位+控制码+数据码+CRC+CRC界定符+ACK码+ACK界定符+结束位

1.起始位:一定是0。

2.识别码:根据识别码就可以知道是要发给哪个设备的,每个设备都有属于自己的11位识别码。

3.RTR位:用于识别数据帧或者远程请求帧,远程请求帧为1,数据帧为0。

4.控制码:总的来说是控制数据长度,下面是控制码的构成。

  • IDE位:用于区分标准格式和拓展格式,标准格式为0,扩展格式为1。

标准位识别码有11位,拓展位识别码为29位

  • 空闲位:一般逻辑0

  • DLC:即数据长度代码,若为0001则后面数据位有1个字节(8个bit),同理若为1000(二进制为8),则后面为8个字节(64bit)。绿色部分是数据码。

5.数据码:传输要传输的数据

5.CRC:即为循环冗余校验位,为了确保数据准确性而设置,一共15位。设备接收端会根据他的数据计算他的CRC位,如果计算出来的CRC和接收到的CRC不一样,则说明数据存在问题,然后重新发一遍数据帧。

6.CRC界定符:一般为逻辑1,作用是把后面数据隔开。

7.ACK码:发送端发送逻辑1,接收端用逻辑0来应答。

8.ACK界定符:一定是逻辑1,作用是把后面数据隔开。

9.结束位:7为都是逻辑1,表示数据帧传输结束。

总的来说是这样的(完整帧+差分信号表示)

四、CAN总线仲裁机制

如果同时有设备发送信息,那么就看11位识别码。当总线同时出现0和1的时候,总线会置为逻辑0,然后那个为1的数据帧就不会再发送了。

示例场景: 假设三个节点同时发送以下ID的消息:

NodeID/识别码 (二进制)ID (十六进制)
A001010100000x150
B001011000000x160
C001010110000x158

仲裁过程:

第06位比较时: A和C发送'0',B发送'1' → B退出

第04位比较时: A发送'0',C发送'1' → C退出 最终A获得总线控制权

五、RS485和CAN总线的区别

5.1 核心区别概览

RS485CAN
网络架构一主多从(单主机轮询)多主对等(自主仲裁)
错误处理无内置机制CRC校验+自动重传
最大速率10Mbps(12m)1Mbps(40m
终端电阻可选必须120Ω两端
成本更低(仅需UART)更高(专用控制器)

一个经典的例子:

RS485是否把数据出去了,发送者不知道。

但是CAN总线发了另一个节点必须会有ACK应答,才能认为发送成功。

因此RS485安全性没有CAN总线高,所以汽车上不能用RS485而用CAN总线。

总结:汽车等高可靠系统必选CAN;简单监测系统可用成本更低的RSS48。

5.2 物理层差异

虽然两者都采用差分信号传输(双绞线),但电气特性不同:

  • RS485电平范围±(2~6)V

  • CAN显性电平+2V(CAN_H=3.5V,CAN_L=1.5V)

接线要求:

以上是CAN总线的基本知识,后续会更新实验代码部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张要努力o!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值