一文看懂CAN协议
2025-7-18新闻

CAN协议的诞生与发展
CAN(Controller Area Network)协议诞生于1986年,由德国博世(Bosch)公司为了解决汽车内各电子控制单元(ECU)之间的高效、可靠通信需求而提出。1987年发布第一版,1993年正式成为国际标准 ISO11898。一句话总结:CAN协议是为了解决汽车内设备间的高速、抗干扰通信而生的总线标准。


3. CAN控制器与CAN收发器
CAN控制器负责数据帧的组帧、收帧、错误检测、仲裁和协议处理。一般集成在MCU或外部芯片内(如SJA1000)。
CAN收发器(Transceiver)负责电气信号的物理层转换,将数字信号(TTL/CMOS电平)转换为CAN差分信号,常见芯片有TJA1043、SN65HVD230等。
一句话理解:控制器管“内容”,收发器管“信号”。

4. 线与逻辑:CAN_H、CAN_L和线与仲裁
物理层:CAN采用双线差分信号(CAN_H与CAN_L),抗干扰能力强,支持大约40米至数公里的传输距离。
逻辑“线与”:CAN总线采用“线与”机制,只要有一个节点输出显性(Dominant)电平,整个总线就是显性。
显性电平(0): CAN_H > CAN_L(一般3.5V对1.5V)
隐性电平(1): CAN_H ≈ CAN_L(一般2.5V)
仲裁机制:所有节点同时发送数据,ID(标识符)低位(0)优先。如果有节点发送隐性位,但总线上检测到显性位,则主动退出——ID越小,优先级越高。

5. 为什么ID越小优先级越大?
CAN ID本质上是数据帧的“地址”或“标签”。
仲裁过程:发送过程中每个节点在每一位都对比自己发出的和总线实际的,如果发现自己发的是1(隐性),但总线是0(显性),说明有更高优先级的帧,自己必须让路。
举例:
NodeA发0x100(0001 0000 0000)
NodeB发0x080(0000 1000 0000)
谁先在第4位上发0,谁优先
所以ID越小,优先级越大!

6. 没有时钟信号,CAN如何实现同步?
CAN是异步通信,不像SPI、I²C等总线需要主时钟线。所有节点各自拥有自己的波特率时钟,但数据能在网络上“对齐”,靠的不是外部时钟,而是协议自带的“同步机制”。
1)边沿同步(Edge Synchronization)
CAN总线采用NRZ(非归零)编码,数据跳变(显性/隐性转换)会成为各节点同步信号。只要侦测到边沿(信号变化),所有节点自动用这个边沿调整采样点,对齐时钟,防止时钟漂移。
2)位填充(Bit Stuffing)
为保证传输中始终有同步边沿,CAN规定:每发送5个连续相同位,就自动插入1个反转位,这样强制制造跳变,各节点就能根据跳变修正采样点。
3)多采样点采样
每个节点实际内部是“超采样”,通常每个比特周期分8~16份,只在最合适的点采样。采样点会根据实际边沿自动校准,抵抗时钟微小漂移。
4)同步举例
比如一个节点时钟偏快,采样点提前,遇到跳变后会立即修正。长期运行下,所有节点即使有时钟误差,也能靠跳变信号保持同步。
5)回传机制(Loopback / Monitoring)
回传机制(自监视/回读):
节点发送数据时会同步接收总线上的实际信号(边发边收)。


7. bus-off:CAN的自我保护机制
什么是bus-off?
当某个节点连续出现大量发送错误(典型值:128次/256次),CAN控制器会进入bus-off状态。
bus-off后,节点会停止向总线发送任何数据,直到经过一段恢复机制。作用:防止“异常节点”一直影响总线健康,提升系统鲁棒性和安全性。

Q&A:CAN相关常见问题
1. CAN是全双工通信吗?
2. 使用CAN协议,芯片厂商是否需要向博世/ISO支付费用?
3. CAN和LIN、FlexRay、以太网有何区别?
简明对比:
4. CAN网络为什么要终端电阻?如果没接会怎样?
5. CAN节点可以“热插拔”吗?
6. CAN的典型应用场景有哪些?
7. CAN帧有哪些类型?每种类型有什么用?
感谢观看
# 免责声明 # 本文转自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系删除,谢谢!