
目录
[1. 基础概念题](#1. 基础概念题)
[1.1 什么是 CAN 通信协议?它的全称是什么?](#1.1 什么是 CAN 通信协议?它的全称是什么?)
[1.2 CAN 总线有哪些基本信号线?](#1.2 CAN 总线有哪些基本信号线?)
[1.3 CAN 的主从架构有什么特点?](#1.3 CAN 的主从架构有什么特点?)
[1.4 CAN 支持哪些传输速率?](#1.4 CAN 支持哪些传输速率?)
[1.5 CAN 2.0A 和 CAN 2.0B 有什么区别?](#1.5 CAN 2.0A 和 CAN 2.0B 有什么区别?)
[1.6 CAN 有哪几种帧类型?各自的作用是什么?](#1.6 CAN 有哪几种帧类型?各自的作用是什么?)
[1.7 描述 CAN 标准数据帧的结构](#1.7 描述 CAN 标准数据帧的结构)
[1.8 扩展数据帧与标准数据帧有什么区别?](#1.8 扩展数据帧与标准数据帧有什么区别?)
[1.9 远程帧与数据帧有什么区别?](#1.9 远程帧与数据帧有什么区别?)
[1.10 什么是 ACK 场?它是如何工作的?](#1.10 什么是 ACK 场?它是如何工作的?)
[2. 实际应用题](#2. 实际应用题)
[2.1 CAN 的总线仲裁机制是如何工作的?](#2.1 CAN 的总线仲裁机制是如何工作的?)
[2.2 CAN 的错误处理机制是如何工作的?](#2.2 CAN 的错误处理机制是如何工作的?)
[2.3 CAN 节点有哪几种错误状态?](#2.3 CAN 节点有哪几种错误状态?)
[2.4 什么是位填充?为什么需要位填充?](#2.4 什么是位填充?为什么需要位填充?)
[2.4 什么是 CAN 的位时序?它由哪几个部分组成?](#2.4 什么是 CAN 的位时序?它由哪几个部分组成?)
[2.5 CAN 总线为什么采用差分信号传输?](#2.5 CAN 总线为什么采用差分信号传输?)
[2.6 CAN 总线为什么需要终端电阻?](#2.6 CAN 总线为什么需要终端电阻?)
[2.7 什么是 CAN FD?它与传统 CAN 有什么区别?](#2.7 什么是 CAN FD?它与传统 CAN 有什么区别?)
[2.8 什么是 CANopen?它与 CAN 有什么关系?](#2.8 什么是 CANopen?它与 CAN 有什么关系?)
[2.9 CAN 通信失败的常见原因有哪些?](#2.9 CAN 通信失败的常见原因有哪些?)
[2.10 如何排查 CAN 通信问题?](#2.10 如何排查 CAN 通信问题?)
1. 基础概念题
1.1 什么是 CAN 通信协议?它的全称是什么?
CAN 是控制器局域网的缩写,是一种多主异步串行半双工通信协议,专为恶劣环境下的高可靠性数据传输设计。它采用差分信号传输,具有极强的抗干扰能力,支持最高 1Mbps 的传输速率(传统 CAN)和最多 127 个节点。
1.2 CAN 总线有哪些基本信号线?
标准 CAN 总线仅使用两条差分信号线:
- CAN_H:高电平信号线
- CAN_L:低电平信号线
特点:
- 隐性电平:CAN_H 和 CAN_L 电压差≈0V(逻辑 1)
- 显性电平:CAN_H≈3.5V,CAN_L≈1.5V,电压差≈2V(逻辑 0)
- 总线空闲时为隐性电平
- 采用线与逻辑:只要有一个节点发送显性电平,总线就为显性电平
1.3 CAN 的主从架构有什么特点?
CAN 采用多主架构:
- 系统中所有节点地位平等,任何节点都可以主动发起通信
- 同一时间只能有一个节点占用总线
- 通过总线仲裁机制解决多个节点同时发送的冲突
- 没有专门的主设备和从设备之分
1.4 CAN 支持哪些传输速率?
传统 CAN 的传输速率与传输距离成反比:
- 1Mbps:最大传输距离 40 米
- 500kbps:最大传输距离 130 米
- 250kbps:最大传输距离 270 米
- 125kbps:最大传输距离 530 米
- 10kbps:最大传输距离 10000 米
1.5 CAN 2.0A 和 CAN 2.0B 有什么区别?
- CAN 2.0A:支持标准帧,ID 长度为 11 位
- CAN 2.0B:同时支持标准帧和扩展帧,扩展帧 ID 长度为 29 位
- CAN 2.0B 是向后兼容的,支持扩展帧的节点可以接收和发送标准帧
1.6 CAN 有哪几种帧类型?各自的作用是什么?
- 数据帧:用于节点之间传输数据,最常用的帧类型
- 远程帧:用于请求其他节点发送指定 ID 的数据
- 错误帧:用于节点检测到错误时,通知总线上所有节点
- 过载帧:用于接收节点通知发送节点自己尚未准备好接收数据
- 帧间隔:用于分隔数据帧 / 远程帧与前面的帧
1.7 描述 CAN 标准数据帧的结构
标准数据帧(11 位 ID)由 7 个场组成:

- 帧起始 (SOF):1 位显性电平,标志帧的开始
- 仲裁场:11 位 ID + 1 位 RTR(远程发送请求位,数据帧为 0)
- 控制场:1 位 IDE(扩展帧标志,标准帧为 0)+ 1 位 r0(保留位)+ 4 位 DLC(数据长度码,0-8 字节)
- 数据场:0-8 字节数据,低位在前
- CRC 场:15 位 CRC 校验码 + 1 位 CRC 界定符(隐性)
- ACK 场:1 位 ACK 槽 + 1 位 ACK 界定符(隐性)
- 帧结束 (EOF):7 位隐性电平,标志帧的结束
1.8 扩展数据帧与标准数据帧有什么区别?
- 标准帧仲裁场:11 位 ID + RTR 位
- 扩展帧仲裁场:11 位基本 ID + SRR 位(替代远程请求位)+ IDE 位(1)+ 18 位扩展 ID + RTR 位
1.9 远程帧与数据帧有什么区别?
- 远程帧的 RTR 位为 1,数据帧的 RTR 位为 0
- 远程帧没有数据场,DLC 表示请求的数据长度
- 远程帧用于请求数据,数据帧用于发送数据
1.10 什么是 ACK 场?它是如何工作的?
- 发送节点在 ACK 槽发送隐性电平
- 任何正确接收到该帧的节点都会在 ACK 槽发送显性电平
- 如果发送节点在 ACK 槽检测到显性电平,表示至少有一个节点成功接收了该帧
- 如果没有检测到显性电平,发送节点会重发该帧
2. 实际应用题
2.1 CAN 的总线仲裁机制是如何工作的?
CAN 采用非破坏性逐位仲裁机制(CSMA/CD+AMP),这是 CAN 最核心的特性之一:
- 所有节点在发送前先监听总线,总线空闲时才开始发送
- 多个节点同时发送时,每个节点在发送每一位的同时监听总线电平
- 如果一个节点发送隐性电平,但检测到总线为显性电平,说明有其他优先级更高的节点正在发送
- 该节点立即停止发送,转为接收状态
- 优先级最高的节点(ID 数值最小)会继续完成发送,不会受到任何干扰
- 仲裁失败的节点会在总线空闲时自动重发
2.2 CAN 的错误处理机制是如何工作的?
- 错误检测:每个节点都会检测总线上的错误,包括位错误、填充错误、CRC 错误、格式错误和 ACK 错误
- 错误通知:检测到错误的节点会发送错误帧,通知总线上所有节点
- 错误计数:每个节点都有发送错误计数器 (TEC) 和接收错误计数器 (REC)
- 错误状态:根据错误计数器的值,节点会进入不同的错误状态
2.3 CAN 节点有哪几种错误状态?
- 错误主动 (Error Active):TEC<128 且 REC<128,节点可以正常参与总线通信,检测到错误时发送主动错误帧(6 个连续显性位)
- 错误被动 (Error Passive):TEC≥128 或 REC≥128,节点可以参与通信,但检测到错误时发送被动错误帧(6 个连续隐性位),发送完成后需要等待额外的帧间隔
- 总线关闭 (Bus Off):TEC≥256,节点完全脱离总线,不能发送或接收任何数据
2.4 什么是位填充?为什么需要位填充?
位填充是 CAN 协议中的一种同步机制:
- 当发送节点发送了 5 个连续相同的位后,会自动插入一个相反的位
- 接收节点会自动删除这个填充位
- 位填充的范围是从 SOF 到 CRC 场结束
作用:
- 保证总线有足够的电平跳变,用于接收节点的时钟同步
- 防止长时间没有电平跳变导致接收节点失去同步
2.4 什么是 CAN 的位时序?它由哪几个部分组成?
位时序是指 CAN 总线上每一位的时间组成,是 CAN 通信的基础。每一位由 4 个段组成:
- 同步段 (SYNC_SEG):1 个时间量子 (TQ),用于同步总线上的节点,电平跳变发生在这个段
- 传播段 (PROP_SEG):1-8 个 TQ,用于补偿信号在总线上的传播延迟
- 相位段 1 (PHASE_SEG1):1-8 个 TQ,用于补偿相位误差
- 相位段 2 (PHASE_SEG2):1-8 个 TQ,用于补偿相位误差,长度等于 PHASE_SEG1 或更大
2.5 CAN 总线为什么采用差分信号传输?
- 抗干扰能力强:外界干扰会同时作用在两条线上,接收端通过计算电压差来判断逻辑电平,共模干扰会被抵消
- 辐射小:两条线上的电流大小相等、方向相反,产生的电磁场相互抵消
- 传输距离远:可以在恶劣环境下实现长距离传输
- 容错能力强:即使一条线短路或断路,在一定条件下仍能正常通信
2.6 CAN 总线为什么需要终端电阻?
- 吸收信号反射,防止信号在总线两端产生反射波
- 匹配总线阻抗,确保信号质量
- 提高总线的抗干扰能力
2.7 什么是 CAN FD?它与传统 CAN 有什么区别?
| 特性 | 传统 CAN | CAN FD |
|---|---|---|
| 数据长度 | 最大 8 字节 | 最大 64 字节 |
| 波特率 | 仲裁段和数据段相同,最高 1Mbps | 仲裁段最高 1Mbps,数据段最高 8Mbps |
| 帧结构 | 标准帧 / 扩展帧 | 兼容传统 CAN 帧,新增 FD 帧格式 |
| CRC 校验 | 15 位 CRC | 17 位 CRC(≤16 字节)或 21 位 CRC(>16 字节) |
2.8 什么是 CANopen?它与 CAN 有什么关系?
CANopen 是基于 CAN 总线的高层应用层协议,定义了设备之间的通信规则和数据格式:
- CAN 是数据链路层和物理层协议
- CANopen 是应用层协议
- CANopen 广泛应用于工业控制领域,定义了设备模型、对象字典、通信对象等
2.9 CAN 通信失败的常见原因有哪些?
硬件层面:
- 终端电阻缺失或阻值不正确
- CAN_H 和 CAN_L 接反或短路
- 总线拓扑结构不符合要求
- 节点电源不稳定
- 总线长度超过最大传输距离
软件层面:
- 波特率不匹配
- 位时序配置错误
- 过滤器配置错误
- 错误处理不当导致总线关闭
- 数据长度超过最大限制
2.10 如何排查 CAN 通信问题?
- 测量总线电平:总线空闲时,CAN_H 和 CAN_L 电压差应≈0V;发送数据时,电压差应≈2V
- 检查终端电阻:总线两端的终端电阻应为 120Ω,总电阻应为 60Ω 左右
- 使用 CAN 分析仪:抓取总线波形,分析帧结构和错误类型
- 检查错误计数器:读取节点的 TEC 和 REC 值,判断错误状态
- 逐节点排查:逐个断开节点,确定故障节点

