CAN 总线为什么能做到抗干扰更强、精度更高、更便于集成?本文从差分信号原理讲到非破坏性仲裁机制,解释 CAN 在汽车电子与船舶综合导航系统中难以被替代的原因,并回答工程实践中的高频疑问(含 canctl 等寄存器配置要点)。适合车载网络与工业控制工程师快速建立系统认知。
概述
CAN(Controller Area Network)由德国 Bosch 公司于 1983 年开发, 1993 年成为国际标准 ISO 11898。它最初为解决汽车内日益增多的 ECU 之间布线复杂问题而设计,如今已扩展到工业控制、船舶、医疗设备和航空航天。
CAN 能做到抗干扰更强、精度更高、更便于集成,并非靠某一项黑科技,而是物理层、仲裁机制、错误处理三层设计的叠加结果。
一、物理层:差分信号是抗干扰的根基
CAN 使用双绞线传输差分信号,两根线分别为 CAN_H 和 CAN_L。
· 隐性电平(逻辑 1):CAN_H 与 CAN_L 电压差约 0 V,均约为 2.5 V
· 显性电平(逻辑 0):CAN_H 升至约 3.5 V,CAN_L 降至约 1.5 V,压差约 2 V
抗干扰的原理在于:外部电磁干扰通常以共模形式同时耦合到两根线上,接收端只关心两者的差值,共模噪声被天然抵消。这就是为什么 CAN 能在电机、点火线圈这类强干扰环境里稳定工作。
两个工程要点:
1. 终端电阻必须为 120 Ω,且只在总线两端各接一个。缺失或多余都会导致信号反射,表现为高波特率下偶发错误帧。
2. "显性"优先于"隐性":总线上只要有一个节点发显性,总线即为显性。这个"线与"特性是后面仲裁机制的物理基础。
二、非破坏性仲裁:为什么高优先级报文不会丢
CAN 是多主总线,任何节点都可以在总线空闲时发起发送。多个节点同时发送时如何裁决?
CAN 采用 CSMA/CD+AMP(载波监听多路访问 / 冲突检测 + 基于报文优先级的仲裁):
1. 每个节点发送的同时也在监听总线
2. 节点发送标识符(ID)位的同时读回总线电平
3. 若发送隐性但读回显性,说明有更高优先级的节点在发送,本节点 立即退出发送并转为接收
4. 获胜节点继续发送,数据不受任何影响
关键在于"非破坏性":ID 值越小优先级越高,仲裁失败的节点不会破坏正在传输的报文,而是等总线空闲后自动重试。总线带宽没有被浪费在冲突重传上。
这与以太网的 CSMA/CD 有本质区别——以太网冲突后双方都要退避重传, CAN 的高优先级报文从头到尾没被打断。
三、错误处理:CAN 可靠性的核心
CAN 定义了五种错误检测机制:
错误类型 | 检测方式
位错误 | 发送节点回读总线,与自身发送位不一致
填充错误 | 违反位填充规则(连续 6 个相同电平)
CRC 错误 | 接收端计算的 CRC 与报文中的 CRC 序列不符
格式错误 | 固定格式字段出现非法电平
应答错误 | 发送节点在 ACK 槽未监听到显性位
每个 CAN 节点维护两个错误计数器(TEC 发送错误计数、REC 接收错误计数),据此在三种状态间迁移:
· 错误主动(Error Active):正常状态,检测到错误时发送主动错误标志
· 错误被动(Error Passive):计数器超 127,发送被动错误标志,且不能主动打断总线
· 总线关闭(Bus Off):TEC 超 255,节点脱离总线,需通过恢复流程重新加入
这套机制保证单个故障节点不会拖垮整条总线——这是功能安全设计里 "故障静默"(fail-silent)思想的早期实践。
四、帧格式与 canctl 相关要点
标准 CAN 数据帧包含:帧起始(SOF)、仲裁场(ID + RTR)、控制场(IDE、r0、DLC)、数据场(0–8 字节)、CRC 场、ACK 场、帧结束。
搜索中常出现的 canctl 一般指 CAN 控制器的控制寄存器(CAN Control Register),在多数 MCU 上负责以下配置:
· 工作模式:正常 / 仅监听(Listen Only)/ 回环(Loopback)/ 休眠——调试阶段用回环模式可脱离总线验证驱动逻辑
· 发送请求与中止:置位 TXRQ 发起发送,ABRQ 中止挂起发送
· 错误处理配置:是否使能自动重传(ABOM 自动总线关闭恢复、 NART 禁止自动重传)
· 中断使能:发送完成、接收 FIFO 非空、错误告警、总线关闭等
工程上最常见的两个坑:
1. 位定时与采样点配置错误。 采样点通常建议设在位时间的 75%–87.5% 之间。高速 CAN(500 kbps / 1 Mbps)对采样点更敏感,配置不当会在长距离或多节点场景出现间歇性错误帧。
2. NART 误设。 关闭自动重传后,仲裁失败或 ACK 错误会导致报文直接丢失而非重试。调试期可临时开启 NART 观察单次行为,量产务必关闭。
五、CAN FD 与 CAN XL
经典 CAN 的 8 字节数据场在现代应用里已成瓶颈,于是有了演进:
经典 CAN | CAN FD | CAN XL
数据场长度 | 0–8 字节 | 0–64 字节 | 0–2048 字节
速率 | 最高 1 Mbps | 仲裁段 1 Mbps,数据段最高 8 Mbps(双速率) | 最高 20 Mbps
兼容性 | — | 可与经典 CAN 节点共存(需支持 FD 的收发器) | 面向下一代,兼容以太网帧
CAN FD 的双速率切换是重点:仲裁段用低速率保证所有节点能可靠参与仲裁,数据段切换到高速率提升吞吐。这也是为什么 CAN FD 能在不改变布线的前提下把有效载荷提升 8 倍。
六、CAN 与 LIN、FlexRay、车载以太网的分工
总线 | 速率 | 典型应用 | 成本
LIN | 最高 20 kbps | 车窗、座椅、雨刮等低速车身控制 | 最低
CAN / CAN FD | 1 Mbps / 8 Mbps | 动力总成、底盘、车身域主流 | 低
FlexRay | 10 Mbps | 线控转向/制动等确定性要求极高的场景(逐步被以太网替代) | 高
车载以太网 | 100 Mbps–10 Gbps | 域间骨干、诊断、OTA、摄像头 | 中高
CAN 不会被以太网完全替代。在可靠性要求高、数据量小的控制域,CAN 的实时性、成本优势和四十年积累的验证数据仍是决定性优势。整车架构演进的方向是异构共存:CAN 管控制,以太网管数据。
