CAN(Controller Area Network)是20世纪80年代初德国Bosch公司为解决现代汽车中众多控制单元之间的实时数据交换而开发的一种串行通信协议。
CAN通讯的核心价值在于解决分布式系统的实时通信问题,尤其是汽车领域,传统汽车用点对点布线会导致线束过重(例如现代豪华车线束总长超5公里),而CAN总线用双绞线串联所有ECU,使车身减重50公斤以上。
传统的汽车线束连接
汽车的CAN网络链接
1
CAN的历史
-
1983年,Bosch开始研究车上网络技术
-
1986年,Bosch在SAE大会(汽车工程协会)公布CAN协议
-
1987年,Intel和Philips先后推出CAN控制器芯片
-
1991年,Bosch颁布CAN 2.0技术规范, CAN2.0包括A和B两个部分
-
1991年,CAN总线最先在Benz S系列轿车上实现
-
1993年,ISO颁布CAN国际标准ISO-11898
-
1994年,SAE颁布基于CAN的J1939标准
-
2003年,Maybach发布带76个ECU的新车型 (CAN,LIN,MOST)
-
2003年,VW发布带35个ECU的新型Golf
-
现在,几乎每一辆新车均装配有CAN 局域网。
目前的车载网络布局示例
紧凑型车辆车载网络系统拓扑图
豪华型车辆车载网络系统拓扑图
2
CAN的特性
1.使用双线差分信号
2.协议本身对节点的数量没有限制,总线上节点的数量可以动态改变
3.发送的报文可以被总线上所有节点同时接收
4.多主站结构,各节点平等
5.每个报文的内容通过标识符识别,标识符在网络中是唯一的
6.根据需要可进行相关性报文过滤
7.保证系统数据一致性,CAN提供了一套复杂的错误检测与错误处理机制, 比如CRC检测、错误报文的自动重发、临时错误 的恢复以及永久错误的关闭。
8.使用双绞线作为总线介质,传输速率可达 1Mbps,总线长度≤40米
9.采用NRZ和位填充 的位编码方式
10.总线访问—非破坏性仲裁的载波侦听多路访问/冲突避免CSMA/CA (Carrier Sense Multiple Access/Collision Avoidance)
-
多路访问(MA):如果总线空闲,则在同一时刻多 个节点可同时访问总线(向总线发送数据)
-
冲突避免(CA):节点在发送数据过程中要不停地 检测发送的数据,确定是否与其它节点数据发生 冲突,并通过非破坏性仲裁机制避免冲突
-
载波侦听(CS):总线上各个节点在发送数据前都 要侦听总线的通信状态
➢ 总线有通信➔不发送数据,等待网络空闲
➢ 总线空闲➔立即发送已经准备好的数据
3
CAN标准
CAN与OSI参考模型
CAN(Controller Area Network)总线协议主要对应 OSI参考模型的物理层和数据链路层,而更高层功能(如应用层)需依赖特定高层协议实现
CAN协议与OSI参考模型的对应关系
CAN协议栈在OSI模型中的完整视图
ISO11898
1.ISO 11898-1: 数据链路层(Data Link Layer)
定义 CAN协议的核心机制:
-
帧结构(数据帧、远程帧、错误帧、过载帧)。
-
非破坏性比特仲裁(基于ID优先级)。
-
错误检测(CRC校验、位填充监控等)。
-
故障限制与自动重发机制。
2.ISO 11898-2: 高速物理层(High-Speed CAN)
最常见标准,用于汽车动力总成、车身控制等。
-
差分信号传输(CAN_H 和 CAN_L)。
-
波特率:最高1 Mbps(典型值500 kbps)。
-
终端电阻:120Ω(两端各一个)。
3.ISO 11898-3: 低速容错物理层(Low-Speed, Fault-Tolerant CAN)
用于抗干扰要求高的场景(如车门、照明)。
-
波特率:最高125 kbps。
-
单线故障时仍可通信(信号线冗余设计)。
4.ISO 11898-4: 时间触发通信(TTCAN)
-
基于时间窗的调度机制,用于高实时性系统(如刹车控制)。
5.ISO 11898-5: 低功耗模式
-
定义CAN节点的睡眠/唤醒机制(适用于新能源汽车等)。
拓扑结构
CAN总线的拓扑结构以总线型为核心,具有简单、可靠、易扩展的特点。
线性总线拓扑
物理层信号传输原理
差分信号:
-
显性(Dominant):CAN_H – CAN_L ≈ 2V(逻辑0,优先级高)。
-
隐性(Recessive):CAN_H – CAN_L ≈ 0V(逻辑1)。
总线电平
CAN总线的总线电平采用差分电压信号传输,通过显性和隐性两种状态表示逻辑值,具有强抗干扰能力。
高速CAN总线电平
低速CAN总线电平
4
CAN的通信机制
CAN总线的通信机制是其多节点实时协同的核心,其运作流程可分为物理层传输、帧结构、仲裁机制、错误处理等关键环节。
报文发送
“回读”机制
-
只有总线处于空闲,节点才能发送报文
-
在发送报文过程中进行“回读”,判断送出的位与回读的位是否一致(节点发送报文时要检测总线状态)
“线与“机制
-
通过ID进行仲裁
-
显性位能够覆盖隐性位➔ID值越小,报文优先级越高
非破坏性仲裁
-
退出仲裁后进入“只听”状态
-
在总线空闲时进行报文重发
NRZ编码与位填充
NRZ(非归零)编码
-
NRZ编码确保报文紧凑➔在相同带宽情况下,NRZ编码方式的信息量更大
-
NRZ不能保证有足够的跳变延用于同步➔位填充➔保证有足够的跳变沿用于同步
位填充
-
发送节点发送5个连续的相同极性位后,在位流中自动插入一个极性相反的位➔位填充
-
接收节点对相同极性位的数量进行检测,从位流中将填充位去掉➔清除填充
报文接收过滤
报文接收过滤,核心原理是基于标识符(ID)的匹配与屏蔽,避免CPU被无关报文中断。
-
通过滤波器,节点可以对接收的报文进行过滤➔如果报文相关就进行接收
接收规则:报文到达时,硬件自动比对ID,比较消息ID与选择器中和接收过滤相关的位是否相同,仅匹配成功的报文才存入接收FIFO并触发中断。
接收过滤相关位:由掩码定义
-
1 = 与消息过滤有关0 = 与消息过滤无关
通过合理配置验收滤波器,CAN总线可在复杂网络环境中实现高效、确定性的通信。