【嵌入式大厂面经】·CAN总线常见考点(持续更新中···)

目录

[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 值,判断错误状态
  • 逐节点排查:逐个断开节点,确定故障节点

嵌入式面试八股文_时光の尘的博客-CSDN博客

相关推荐
水月天涯1 小时前
ESPHome入门03-温湿度传感器(小白入门:让房间温度湿度实时显示在手机上)
物联网·智能手机·智能家居
国科安芯2 小时前
空间辐射环境下电机伺服系统的抗扰动控制:AS32S601 抗辐射 MCU 在航天机电执行机构中的多场景应用与可靠性评估
单片机·嵌入式硬件·mcu·cocos2d·risc-v
seanliu3 小时前
ESP32 变身 WiFi 智能灯控制器
物联网
国科安芯3 小时前
AS32S601 抗辐射 MCU 在星载高速光通信链路的集成设计与性能验证
网络·单片机·嵌入式硬件·risc-v·安全性测试
行者将至X3 小时前
第一篇:RA-ECO-RA4M2 开发板开箱与开发环境体验评测
单片机·嵌入式硬件
染予3 小时前
将星历算法移植到stm32F427要面临的问题
stm32·单片机·嵌入式硬件
山木嵌入式4 小时前
零基础入门单片机:从核心组成到最小系统全解析
单片机·最小系统·单片机入门
笨笨饿4 小时前
80_聊聊SPI以及它们的变体
linux·c语言·网络·stm32·单片机·算法·个人开发
泓博5 小时前
Raspberry Camera
物联网