mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1528 字
4 分钟
CAN 协议详解:从物理层到帧仲裁与错误处理
2024-02-22

CAN 协议详解:从物理层到帧仲裁与错误处理#

1. CAN 是什么#

CAN(Controller Area Network)是面向实时控制场景的串行总线协议,最早由 Bosch 提出,已标准化为 ISO 体系。

它的核心设计目标是:

  • 多节点可靠通信
  • 抗电磁干扰
  • 实时性可预测
  • 在复杂控制系统里减少线束

典型应用包括汽车电子、工业控制、船舶、医疗设备等。

车载网络示意

2. CAN 总线结构与物理层#

2.1 双线差分与显性/隐性#

CAN 使用两根信号线 CAN_HCAN_L,通过电压差表达逻辑电平:

  • 隐性位(Recessive):逻辑 1
  • 显性位(Dominant):逻辑 0

总线具备“线与”特性:如果有节点发送显性位,最终总线表现为显性位。这个机制是 CAN 位仲裁的基础。

闭环结构 CAN 网络

开环结构 CAN 网络

双绞线类型

显性/隐性电平

ISO11898 与 ISO11519-2 物理层差异

节点组成示意

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 对应关系#

ISO/OSI 基本参照模型

CAN 在 OSI 中的分层定义

5.2 ISO 标准化版本#

CAN 协议与 ISO11898/ISO11519-2 范围

物理层子层差异示意

物理层差异对照表

5.3 其他标准规范#

CAN 相关标准规格

车载协议按速率分类

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 段理解:

  1. SOF:帧起始(1 位显性)
  2. 仲裁段:ID + RTR 等,决定优先级
  3. 控制段:DLC 与控制位
  4. 数据段:0 到 8 字节
  5. CRC 段:15 位 CRC + 界定符
  6. ACK 段:ACK Slot + ACK Delimiter
  7. EOF:帧结束(7 位隐性)

数据帧总览

SOF(标准格式)

SOF(扩展格式)

仲裁段

控制段(标准)

控制段(扩展)

数据段

CRC 段

ACK 段

EOF 段

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

远程帧结构图 1

远程帧结构图 2

远程帧结构图 3

远程帧结构图 4

错误帧结构

过载帧结构

帧间隔结构

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/
作者
Siky
发布于
2024-02-22
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00