首页 - 关于我们 - 新闻活动 - 一文看懂CAN协议

一文看懂CAN协议

2025-7-18新闻


CAN协议的诞生与发展

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


谁制定了CAN和ISO11898?

最初提出: 博世(Bosch)

国际标准化: ISO(国际标准化组织),标准号为ISO 11898。



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)

回传机制(自监视/回读):

节点发送数据时会同步接收总线上的实际信号(边发边收)。


目的:

仲裁检测:如果发的隐性位,收到的却是显性位,则失去仲裁,自动退出发送,避免冲突。

错误检测:如果发送与收到的不一致,说明有干扰或故障,便于快速响应。


一句话总结:

回传机制让CAN节点始终“自查”总线信号,是实现仲裁、同步、高可靠性的核心细节。



7. bus-off:CAN的自我保护机制



什么是bus-off?


当某个节点连续出现大量发送错误(典型值:128次/256次),CAN控制器会进入bus-off状态。


bus-off后,节点会停止向总线发送任何数据,直到经过一段恢复机制。作用:防止“异常节点”一直影响总线健康,提升系统鲁棒性和安全性。



Q&A:CAN相关常见问题


1. CAN是全双工通信吗?

不是,CAN是半双工通信。所有节点共享一根总线,每个时刻只能有一个节点在发送数据,其他节点接收。虽然所有节点都能同时接收数据,但不能同时有两个节点发数据。所以,CAN属于半双工通信方式。


2. 使用CAN协议,芯片厂商是否需要向博世/ISO支付费用?


标准CAN协议(即ISO 11898基础功能)不需要支付专利费,属于免费开放协议。博世公司已将标准CAN(Classic CAN)专利向全球开放,芯片厂商和终端厂商无需额外授权或费用。


但部分高级CAN协议(如CAN FD、CAN XL)在专利开放时间有差异,且特定扩展功能或实现可能有专利限制,商用前建议查阅最新专利声明。 


3. CAN和LIN、FlexRay、以太网有何区别?

简明对比:


CAN:实时性高、成本低、可靠性强、典型速率1Mbps,适合动力、底盘、车身等控制通信。


LIN:速率低(20kbps)、成本更低、主从结构、用于车窗/空调/门锁等简单场景。


FlexRay:速率高(10Mbps)、冗余双通道、确定性、用于高级底盘/自动驾驶。


以太网:速率极高(100Mbps~1Gbps),适合大数据量如摄像头/多媒体/ADAS。


4. CAN网络为什么要终端电阻?如果没接会怎样?


作用:


终端电阻(典型120欧姆)吸收总线信号反射,防止信号畸变,保证可靠通信。


没接或接错:会导致信号反射、通信失败、报错增多甚至无法通信。


5. CAN节点可以“热插拔”吗?


实际工程中不推荐,因为热插拔可能导致总线短路或干扰,引发通信异常。但部分高可靠CAN收发器有短路/过流保护,可支持有限的热插拔。规范设计应尽量避免带电插拔。


6. CAN的典型应用场景有哪些?


汽车动力、底盘、仪表、门窗控制

工业自动化设备、PLC

医疗设备

电梯、工程机械等高可靠实时场合


7. CAN帧有哪些类型?每种类型有什么用?


数据帧(Data Frame):传输实际数据。

远程帧(Remote Frame):请求其他节点发送数据(少见)。

错误帧(Error Frame):检测到错误时广播,用于错误恢复。

过载帧(Overload Frame):接收方因处理不过来请求延时。


感谢观看

BREAK AWAY




# 免责声明 #  本文转自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系删除,谢谢!