1528 字
4 分钟
CAN 协议详解:从物理层到帧仲裁与错误处理
CAN 协议详解:从物理层到帧仲裁与错误处理
1. CAN 是什么
CAN(Controller Area Network)是面向实时控制场景的串行总线协议,最早由 Bosch 提出,已标准化为 ISO 体系。
它的核心设计目标是:
- 多节点可靠通信
- 抗电磁干扰
- 实时性可预测
- 在复杂控制系统里减少线束
典型应用包括汽车电子、工业控制、船舶、医疗设备等。

2. CAN 总线结构与物理层
2.1 双线差分与显性/隐性
CAN 使用两根信号线 CAN_H 和 CAN_L,通过电压差表达逻辑电平:
- 隐性位(Recessive):逻辑
1 - 显性位(Dominant):逻辑
0
总线具备“线与”特性:如果有节点发送显性位,最终总线表现为显性位。这个机制是 CAN 位仲裁的基础。






2.2 高速 CAN 与低速 CAN
常见两类规范:
ISO 11898:高速 CAN(常见 125 kbps 到 1 Mbps)ISO 11519-2:低速 CAN(125 kbps 以下)
工程上可理解为:两者在数据链路层规则一致,但物理层电气特性不同。
2.3 节点组成
一个 CAN 节点一般包含:
CAN 控制器:实现协议逻辑(帧化、仲裁、错误处理等)CAN 收发器:负责 MCU 逻辑电平与总线差分电平转换
例如在 STM32 平台,MCU 内部常集成 CAN 控制器,外部配套收发器芯片。
3. CAN 的核心特性
- 多主通信:不存在固定主从,任意节点都可发起发送
- 广播机制:一帧会被全网节点接收,再由过滤器决定是否处理
- 非破坏性仲裁:冲突不破坏帧,失败节点自动退让
- 高抗干扰:差分传输适合工业/车载环境
- 硬件级错误处理:CRC、填充检测、ACK 检测等
- 半双工共享总线:同一时刻只允许一个发送方持续占线
4. 位时序与波特率
CAN 没有独立时钟线,节点依赖统一位时序配置实现同步。
4.1 基本概念
Tq (Time Quantum):时间量子,位时序最小单位NBT (Nominal Bit Time):一个比特持续时间- 波特率:
Baudrate = 1 / NBT
常见表达方式:
NBT = (SYNC_SEG + BS1 + BS2)- 其中
SYNC_SEG通常为 1 Tq

4.2 采样与重同步
- 采样点通常位于
BS1结束处 SJW(同步跳宽)用于补偿节点间时钟偏差- 接收过程中检测到边沿后可进行再同步,保证采样稳定
5. CAN 协议与标准
5.1 OSI 对应关系


5.2 ISO 标准化版本



5.3 其他标准规范


6. CAN 帧类型与数据帧字段
6.1 帧类型概览
CAN 通信围绕 5 类帧:
- 数据帧(Data Frame)
- 远程帧/遥控帧(Remote Frame)
- 错误帧(Error Frame)
- 过载帧(Overload Frame)
- 帧间隔(Inter-frame Space)
此外,数据帧和远程帧都分:
- 标准格式:11 位 ID
- 扩展格式:29 位 ID





6.2 数据帧逐字段拆解(经典 CAN)
经典 CAN 数据帧可按 7 段理解:
SOF:帧起始(1 位显性)仲裁段:ID + RTR 等,决定优先级控制段:DLC 与控制位数据段:0 到 8 字节CRC 段:15 位 CRC + 界定符ACK 段:ACK Slot + ACK DelimiterEOF:帧结束(7 位隐性)










6.3 远程帧、错误帧、过载帧与帧间隔







7. 仲裁、优先级与同步
7.1 仲裁与优先级规则
CAN 使用位级非破坏仲裁:
- 节点发送同时监测总线
- 若本节点发隐性但读到显性,说明仲裁失败,立即转接收
- 仲裁按 ID 从高位到低位比较,数值越小通常优先级越高
常见规则:
- 同 ID 下,数据帧优先于远程帧(RTR 位差异)
- 标准帧与扩展帧竞争时,标准帧通常优先(IDE 位差异)



7.2 错误类型与错误帧
CAN 典型错误包括:
- 位错误(Bit Error)
- 填充错误(Stuff Error)
- CRC 错误
- 格式错误(Form Error)
- ACK 错误
节点检测到错误后会发错误帧通知全网。错误帧由两部分构成:
- 错误标志(主动/被动)
- 错误界定符
这套机制保证了“错误可快速扩散并触发重发”,是 CAN 高可靠性的关键。


7.3 同步机制
- 硬同步:在总线空闲后检测到 SOF 边沿触发
- 再同步:通信过程中根据边沿与 SJW 调整采样节奏
目标都是让各节点在存在时钟偏差与链路延迟时,仍能稳定采样。




8. 工程实践建议
- 先统一波特率和采样点,再排查收发异常
- 优先检查终端电阻(典型 120 欧)与布线拓扑
- 合理规划 ID:把高实时消息放低 ID
- 善用硬件过滤器,降低 MCU 中断负担
- 抓包关注三类信号:仲裁丢失、ACK 异常、错误帧频率
9. 与 CAN FD 的关系
本文主要是经典 CAN(0~8 字节数据段)。
当业务需要更大载荷和更高吞吐时,可考虑 CAN FD:
- 数据段可超过 8 字节
- 仲裁段与数据段可采用不同速率
但迁移前需要确认:控制器、收发器、工具链、整车/系统网络是否都支持 CAN FD。
10. 小结
掌握 CAN 的关键不在死记字段,而在建立三条主线:
- 物理层:差分、拓扑、终端电阻
- 协议层:帧结构、仲裁、错误处理
- 应用层:位时序配置、过滤策略、抓包定位
把这三条打通后,CAN 驱动开发和现场问题分析会容易很多。
参考
- CAN 入门资料(瑞萨电子)
CAN 协议详解:从物理层到帧仲裁与错误处理
https://siky-chen.github.io/posts/can-protocol/ 部分信息可能已经过时









