目录

1. CAN总线历史

2. CAN总线结构

3. CAN总线特点

4. CAN位时序和波特率

5. CAN总线协议

6. CAN各类型帧详解

7. CAN总线优先级及同步

1. CAN总线历史

        CAN 是博世为汽车减线束、简化 ECU 通信而发明的 ISO 标准串行总线,具备多主、高实时、强抗干扰、可靠错误处理等特性,从汽车领域扩展到工业、医疗等多个高可靠性要求的行业。

2. CAN总线结构

一、节点内部结构(核心分层)

每个 CAN 节点都由两层核心模块组成:

  1. 上层:MCU + CAN 控制器
    • MCU:节点的 “大脑”,负责业务逻辑、数据处理与应用层交互。
    • CAN 控制器:实现 CAN 协议核心逻辑(帧封装 / 解析、仲裁、错误检测等),通常集成在 MCU 内部。
    • 信号接口:
      • CAN_TX:MCU → 收发器(发送数据)
      • CAN_RX:收发器 → MCU(接收数据)
  2. 下层:CAN 收发器
    • 作用:电平转换 + 差分驱动,将 CAN 控制器的 TTL 电平信号转换为 CANH/CANL 差分信号并驱动到总线,同时将总线上的差分信号还原为 TTL 电平供控制器读取。

二、总线物理层特性

特性 高速 CAN 低速容错 CAN
拓扑结构 线性总线型,总线两端为开放端点,无闭合回路,禁止首尾相连 线性总线型,总线两端为开放端点,无闭合回路,兼容分支拓扑
传输方式

- 差分信号传输(CANH + CANL 双绞线),抗干扰能力强

- 无专门的时钟线,属于异步通信

- 差分信号传输,强容错能力,兼容单线通信

- 无专门的时钟线,属于异步通信

终端电阻 两端各接 120Ω 终端匹配电阻,用于匹配电缆特性阻抗,消除信号反射 节点内置分布式终端电阻,总线两端接 2.2kΩ 偏置电阻,用于稳定隐性电平,具备阻抗匹配能力
线缆参数 特性阻抗 120Ω,支持高速通信(500kbps~1Mbps) 特性阻抗 120Ω,仅支持低速通信(≤125kbps)
信号完整性 高,适合高速、短距离高实时性场景 低速下稳定性强,具备总线容错能力,适合低速、长距离场景
差分电压・显性(逻辑 0) 电压差 ≈ 2V 典型电压差≈3V,规范下限 > 2V
差分电压・隐性(逻辑 1) 电压差 ≈ 0V 典型电压差≈-5V,规范上限 < 0V

三、网络核心特性与适用场景

维度 高速 CAN(ISO 11898-2) 低速容错 CAN(ISO 11898-3)
核心特性 多主通信,节点平等、支持广播;非破坏性位仲裁,保障高优先级数据低延迟;完善的错误检测与处理机制
波特率范围 最高支持 1Mbps,速率与总线长度强负相关,常用高速区间 500kbps~1Mbps 最高支持 125kbps,专为低速场景设计,常用区间 40kbps~125kbps
传输距离 速率越高传输距离越短:1Mbps → 最大 40m500kbps → 最大 100m 速率越低传输距离越长:125kbps → 最大 500m40kbps → 最大 1000m
典型应用场景 汽车动力 / 底盘控制(发动机、变速箱、ABS);工业自动化(运动控制、机器人);对实时性、高速通信要求高的场景 汽车车身舒适控制(门窗、灯光、空调);低速传感器网络、长距离低速工控;对容错能力、布线灵活性要求高的场景
优势 通信速率高、传输实时性强、高速下信号完整性好 总线容错能力强、布线灵活性高、长距离低速传输稳定性好
局限性 对终端电阻、拓扑布线要求严格,无总线容错能力,总线故障易导致通信中断 不支持高速通信,无法满足高实时性控制场景的需求

四、CAN总线网络图

                                                          图1.高速 CAN 总线标准组网结构图

                                                          图2.低速容错 CAN 总线标准组网结构图

3. CAN总线特点
特点 详细关键内容
实时性 数据传输延迟低、响应快,通过仲裁机制和帧 ID 优先级保证关键数据优先传输,满足汽车、工业自动化等高实时性需求。
多主机结构 总线上所有节点地位平等,没有主从之分,任意节点都可主动发起通信;同一时刻仅允许一个节点占用总线发送数据。
差分信号传输 采用 CANH、CANL 双绞线进行差分信号传输,依靠两根线的电压差表示数据,抗电磁干扰能力强,适合恶劣电气环境。
非破坏性仲裁 多节点同时发送数据时,根据帧 ID 的优先级竞争总线使用权,高优先级节点正常发送,低优先级节点主动退让,不破坏数据、不产生冲突。
广播通信模式 节点发送的数据会被总线上所有节点接收,便于全网数据共享与同步,简化系统通信结构。
硬件成本低 CAN 控制器集成度高,协议逻辑由硬件实现,无需额外 CPU 参与调度,整体电路简单、成本低,适合大批量部署。
配置灵活 支持多种通信波特率,可根据传输距离、实时性要求灵活调整,能适配从低速传感器到高速车载控制的多种场景。
完善的错误处理 内置 CRC 校验、帧格式检查、应答检测等多重错误识别机制,能自动检测、标注并处理传输错误,提升通信稳定性。
以帧为单位传输 数据以 “帧” 为基本单位,节点没有物理地址,通过不同类型的帧(数据帧、遥控帧等)完成数据交互和控制。
线与逻辑特性 总线电平遵循 “线与” 规则:显性电平(逻辑 0)可以覆盖隐性电平(逻辑 1),这是仲裁机制能够实现的物理基础。
帧 ID 的作用 每个帧有唯一标识符 ID,ID 不代表节点地址,而是表示数据类型,并在总线竞争时决定优先级,ID 越小优先级越高。
硬件滤波功能 每个节点可通过硬件过滤不需要的帧 ID,只接收和处理自身关心的数据,减轻 CPU 负担,提高关键信息响应速度。
半双工通信 同一节点不能同时发送和接收数据;多节点竞争发送时,获胜节点继续发送,失败节点立即切换为接收状态。
异步无时钟线 属于异步通信,没有专门的时钟同步线,所有节点必须使用相同的波特率,依靠位时序和再同步机制保证时序对齐。
4. CAN位时序和波特率

一、整体结构:标称位时间(Nominal Bit Time, NBT)

  • 定义:传输 1 位数据所需的总时间,是计算 CAN 波特率的核心依据。
  • 构成:由 3 个固定段组成,所有段的长度都以 tq(时间片,Time Quantum) 为最小单位。
  • 公式:NBT=(1+m+n)×tq​其中:
    • 1:同步段固定为 1 个 tq
    • m:位段 1(BS1)的 tq 数量
    • n:位段 2(BS2)的 tq 数量

二、三段位时序详细解析

段名 长度 核心作用
SYNC_SEG(同步段) 固定 1 × tq 用于检测总线电平跳变沿,实现节点与总线的初始同步;只有在该段内检测到跳变,才认为时序对齐。
位段 1(BS1) 可配置 m × tq(m=1~16) 定义采样点位置:在 BS1 结束时刻对总线电平进行采样,采样结果即为该位的逻辑值(0/1);再同步时可自动延长,补偿正相位漂移。
位段 2(BS2) 可配置 n × tq(n=1~8) 定义发送点位置:在 BS2 结束时刻完成该位的发送;再同步时可自动缩短,补偿负相位漂移。

                                                             图3. CAN位时序图

5. CAN总线协议

CAN 协议(经典 CAN 2.0A/B)仅实现了 OSI 七层模型的最底两层,上层能力均由配套的行业协议 / 应用逻辑补充:

  • 物理层(OSI 第 1 层):定义 CAN 总线的电气规范,包括线缆特性、差分电平规则、收发器要求、位时序配置等核心硬件相关标准。
  • 数据链路层(OSI 第 2 层):CAN 协议的核心逻辑层,分为 MAC(媒体访问控制)和 LLC(逻辑链路控制)两个子层,实现帧结构封装 / 解析、非破坏性总线仲裁、多重错误检测与自动重传、硬件帧 ID 滤波等核心协议功能。
  • CAN 原生协议完全不涉及 OSI 模型的传输层、会话层、表示层、应用层,这些上层能力,均由具体场景的配套协议补充实现(比如汽车领域的 UDS 诊断协议、ISO TP 传输协议,工业领域的 CANopen、DeviceNet 协议等)。
  • 数据链路层(LLC + MAC 子层)核心功能
子层 核心定位 具体事项
LLC(逻辑链路控制子层) 上层接口与消息管理,为应用层提供数据服务

- 接收消息硬件过滤(通过帧 ID 筛选,仅处理节点需要的消息)

- 过载帧管理与过载通知(告知总线 / 发送节点,接收端未准备好)

- 为上层应用提供数据收发的统一接口

MAC(介质访问控制子层) CAN 协议核心执行层,协议逻辑全硬件实现

- 消息帧封装与解析:完成数据帧、遥控帧、错误帧、过载帧的组帧与解帧

- 总线访问控制:基于 CSMA/CA 机制,实现非破坏性位仲裁,通过帧 ID 优先级竞争总线使用权

- 位时序控制与同步:实现硬同步、再同步,保证全总线节点的时序对齐

- 错误管理:实现 CRC 校验、位填充校验、ACK 应答校验、格式错误检测,完成故障界定与故障节点主动离线控制

- 自动重传机制:检测到传输错误后,自动触发未被正确接收的消息重传

- 应答机制:处理 ACK 时隙的应答与校验,确认消息是否被总线节点正确接收

  • 物理层核心功能
项目 核心内容
位编码规则 采用 NRZ(不归零)编码,配套5 位强制位填充机制:连续出现 5 个相同逻辑电平(显性 0 / 隐性 1)时,强制插入 1 个相反电平的填充位,避免总线长时间无跳变导致节点同步丢失
位时序定义 标称位时间由 3 段组成(工程通用简化划分):同步段(SYNC_SEG,固定 1tq)+ 位段 1(BS1,可配置)+ 位段 2(BS2,可配置),精准定义总线电平采样点、位数据发送点
同步机制 两级同步保障全总线节点时序对齐:1. 硬同步:仅在数据帧 / 遥控帧的帧起始(SOF)下降沿触发,完成节点初始时钟同步2. 再同步:总线电平跳变时,通过同步跳转宽度(SJW)调整 BS1/BS2 长度,补偿节点时钟相位漂移
标准定义与用户可配置项 1. 标准强制定义项:差分信号电平规范、收发器核心电气特性、位填充规则、位时序基础架构、同步机制等,必须符合 ISO 11898 标准要求2. 用户可配置项:通信波特率(标准支持范围内)、采样点位置(行业推荐区间内)、BS1/BS2/SJW 的 tq 数量、线缆选型、连接器形态等,可根据系统场景灵活设计
6. CAN各类型帧详解

一、帧类型与帧用途

帧类型 帧用途
数据帧 承载节点产生的有效业务数据,以广播方式发送,所有节点可通过 ID 过滤接收,是 CAN 总线中传输用户数据的核心载体。
遥控帧 由节点向总线发送,用于请求对应 ID 的数据帧,实现 “请求 - 响应” 式数据交互,无数据段。
错误帧 当节点检测到总线通信错误时发送,用于向全网通知错误状态,并触发错误恢复与重传机制,保障通信可靠性。
过载帧 当接收节点处理能力不足、无法及时接收新数据时发送,用于通知发送节点暂缓发送,避免数据丢失或处理混乱。
帧间空间 位于连续帧之间的间隔段,用于分隔不同帧,为节点提供处理、采样与再同步的缓冲时间,防止帧间干扰,保证总线时序稳定。

二、数据帧

                                                               图4. 数据帧的构成

段名称 标准帧内容(含电平) 扩展帧内容(含电平) 功能说明
帧起始 SOF 1 位 显性电平 1 位 显性电平 标志帧开始,产生电平跳变,让所有节点同步。
仲裁段 11 位 ID RTR(显性)IDE(显性) 11 位基本 ID SRR(隐性)IDE(隐性)18 位扩展 ID RTR(显性) 用于总线仲裁,ID 越小优先级越高;RTR = 显性表示数据帧;IDE 区分标准 / 扩展帧。
控制段 r0(显性)4 位 DLC r1、r0(显性)4 位 DLC DLC 表示数据长度 0~8 字节;保留位固定为显性
数据段 0~64 位(0~8 字节) 0~64 位(0~8 字节) 存放要传输的实际数据。
CRC 段 15 位 CRC 序列CRC 界定符(隐性) 15 位 CRC 序列CRC 界定符(隐性) 校验传输错误;界定符固定隐性
ACK 段 ACK 槽(发送端发隐性,接收端覆盖为显性)ACK 界定符(隐性) ACK 槽(发送端发隐性,接收端覆盖为显性)ACK 界定符(隐性) 发送端发隐性,只要有节点正确接收,会把 ACK 槽拉成显性,表示应答成功。
帧结束 EOF 7 位 隐性电平 7 位 隐性电平 标志帧结束,固定 7 位隐性。

三、遥控帧

                                                             图5. 遥控帧的构成

段名称 标准遥控帧内容(含电平) 扩展遥控帧内容(含电平) 功能说明
帧起始 SOF 1 位 显性电平 1 位 显性电平 标志帧开始,通过电平跳变实现节点同步,启动一帧传输。
仲裁段 11 位 ID RTR(隐性)IDE(显性) 11 位基本 ID SRR(隐性)IDE(隐性)18 位扩展 ID RTR(隐性) 用于总线仲裁,ID 越小优先级越高;RTR = 隐性表示这是遥控帧;IDE 用于区分标准帧与扩展帧。
控制段 r0(显性)4 位 DLC r1、r0(显性)4 位 DLC DLC 表示期望对方返回的数据长度(0~8 字节);保留位固定为显性
数据段 无数据段 无数据段 遥控帧只用于请求数据,不携带任何数据
CRC 段 15 位 CRC 序列CRC 界定符(隐性) 15 位 CRC 序列CRC 界定符(隐性) 对帧内容进行错误校验;界定符固定为隐性
ACK 段 ACK 槽(发送端隐性,接收端覆盖为显性)ACK 界定符(隐性) ACK 槽(发送端隐性,接收端覆盖为显性)ACK 界定符(隐性) 接收节点正确收到后,将 ACK 槽拉为显性,表示应答成功。
帧结束 EOF 7 位 隐性电平 7 位 隐性电平 标志一帧传输结束,固定 7 位隐性电平。

四、错误帧

                                                           图6. 错误帧的构成

段名称 错误帧内容 功能说明
错误标志 6 位显性电平(错误主动)6 位隐性电平(错误被动) 节点检测到错误后发送,强制破坏总线电平,通知全网出现传输错误。
错误界定符 8 位隐性电平 标志错误帧结束,让总线恢复稳定,为后续正常通信做准备。

五、过载帧

                                                        图7. 过载帧的构成

段名称 过载帧内容 功能说明
过载标志 6 位显性电平 接收节点来不及处理数据时发送,通知发送节点暂停发送,避免数据丢失。
过载界定符 8 位隐性电平 标志过载帧结束,使总线回到空闲状态,等待恢复正常传输。

六、帧间隔

                                                            图8. 帧间隔的构成

段名称 内容(电平) 功能说明
帧间空间 3 位 隐性电平 用于分隔连续的数据帧 / 遥控帧,保证总线时序不重叠,给节点留出处理缓冲时间。
延迟传送 8 位 隐性电平 仅被动错误节点在发送完一帧后额外增加的延迟段,发送暂时停止,避免频繁占用总线。
总线空闲 隐性电平,长度不限(可为 0) 总线无任何传输,处于空闲状态;任何需要发送的节点,都可在此阶段开始发送数据。
7. CAN总线优先级及同步

(1)优先级的决定

一、核心定义

CAN 总线仲裁机制:用于解决多个节点同时发送数据的冲突,通过仲裁段电平对比,确定优先级,分配总线发送权,核心原则 ——显性电平优先级 > 隐性电平

二、仲裁核心规则(分点清晰,必记)

  1. 总线空闲态:总线为隐性电平,最先开始发送消息的节点,直接获得发送权
  2. 多节点同时发送:
    • 从仲裁段第一位开始,逐位对比各节点发送的电平;
    • 前几位电平均相同时,继续对比下一位;
    • 第一次出现电平互异时,发送显性电平的节点获得发送权,发送隐性电平的节点立即转为接收状态
  3. 数据帧与遥控帧(同 ID、同格式):
    • 数据帧 RTR 位 = 显性电平,遥控帧 RTR 位 = 隐性电平;
    • 优先级:数据帧 > 遥控帧
  4. 标准帧与扩展帧(11 位基础 ID 相同):
    • 标准帧 IDE 位 = 显性电平,扩展帧 IDE 位 = 隐性电平;
    • 优先级:标准帧 > 扩展帧

(2)错误的种类

错误种类 错误内容 错误检测的帧 / 段范围 检测单元
位错误

发送节点对比自身输出电平与总线电平,不一致时判定位错误;

例外场景:・仲裁段发隐性读到显性 → 视为仲裁丢失,非位错误

・ACK 槽发隐性读到显性 → 视为正常应答,非位错误

数据帧、遥控帧(SOF ~ EOF) 发送单元
填充错误 需执行位填充的段内,出现连续 6 位相同电平,违反 “连续 5 位同电平必须插入反向填充位” 规则 数据帧、遥控帧(SOF ~ CRC 序列) 发送单元、接收单元
CRC 错误 接收节点重新计算的 CRC 结果,与帧中携带的 CRC 序列不匹配 数据帧、遥控帧(CRC 序列段) 接收单元
格式错误

固定格式段(CRC 界定符、ACK 界定符、EOF)电平不符合协议规范;

例外:DLC = 9~15 不视为格式错误

数据帧、遥控帧(CRC 界定符、ACK 界定符、EOF) 接收单元
ACK 错误 发送节点在 ACK 槽内未检测到任何接收节点发出的显性应答电平,判定无节点正常接收该帧 数据帧、遥控帧(ACK 槽段) 发送单元

(3)错误帧的输出

  • 位 / 填充 / 格式 / ACK 错误:检测到后立即在下一位启动错误标志输出。
  • CRC 错误:需等待到ACK 段结束后才输出错误标志,避免干扰正常接收应答流程。

(4)位时序

段名称 核心作用 Tq 长度范围
同步段(SS) 实现多节点时序同步,要求电平跳变发生在此段内,是通信同步的起点。 1 Tq
传播时间段(PROP_SEG) 补偿总线信号传播延迟与节点内部收发延迟,保证总线电平能稳定到达各节点。 1~8 Tq
相位缓冲段 1(PBS1) 当信号边沿未落在 SS 段时,用于补偿同步偏差,是再同步的前半段。 1~8 Tq
相位缓冲段 2(PBS2) 吸收节点时钟偏差,与 PBS1 共同完成同步误差补偿;可调整范围受 SJW 限制。 2~8 Tq
再同步补偿宽度(SJW) 定义再同步时可对 PBS 段加减的最大 Tq 数;SJW 越大,可容忍的时钟偏差越大。 1~4 Tq

(5)取得同步的方法

CAN 协议采用 NRZ(不归零)编码 进行通信,不附加专门的同步信号或时钟脉冲

  • 发送端:按自身位时序连续发送数据;
  • 接收端:通过总线上的电平跳变边沿实现同步接收。

由于收发单元间存在时钟频率误差,且传输路径(电缆、驱动器等)会引入相位延迟,导致同步偏差;因此接收端会通过 硬件同步(硬同步)再同步 机制动态调整位时序,以此抵消误差、保障数据可靠接收。

(6)硬件同步

  • 触发场景:总线上检测到 隐性→显性 的电平边沿(通常是帧起始 SOF)。
  • 核心动作:接收单元将该边沿强制对齐到 同步段(SS) 的起点,重置自身位时序计数器,实现与发送端的硬同步
  • 本质:这是 CAN 节点的首次同步机制,用于在帧开始时让所有节点对齐到同一个时序起点,保证后续传输的稳定。

                                                                  图9. 硬件同步

(7)再同步

场景 1:边沿滞后(出现在 PTS/PBS1 之间)

  • 现象:隐性→显性的电平边沿滞后于 SS 段,落在 PTS 或 PBS1 段内(图中延迟 2Tq,SJW=2)。
  • 调整动作:在 PBS1 后插入 SJW 长度(2Tq)增加 PBS1 的总长度
  • 目的:延长位时间,“等待” 滞后的信号边沿,将采样点拉回正确位置,避免采样过早。

场景 2:边沿超前(出现在 PBS2 中)

  • 现象:隐性→显性的电平边沿超前于 SS 段,落在 PBS2 段内(图中提前 2Tq,SJW=2)。
  • 调整动作:在 PBS2 中减去 SJW 长度(2Tq)缩短 PBS2 的总长度
  • 目的:压缩位时间,“提前” 对齐信号边沿,避免采样过晚导致误读。

                                                                    图10. 再同步

(8)调整同步的规则

规则类别 具体规则 详细解释
基础通用规则 1. 每个位时间内仅进行一次同步调整2. 仅当「上次采样点总线值」与「边沿后总线值」不同时,该边沿才可用于同步调整 1. 防止同一时间段内多次调整时序,避免通信时序混乱2. 只有真实的电平跳变(有效边沿)才触发同步,过滤无效电平波动
硬件同步规则 总线空闲且检测到隐性→显性的边沿时,必须执行硬件同步 总线空闲时,隐性→显性边沿代表帧起始(SOF),所有节点必须强制对齐时序,保证帧起始同步一致
再同步规则(总线非空闲时) 1. 检测到隐性→显性的有效边沿(满足基础规则)时,执行再同步2. 发送单元观测到自身输出的显性电平延迟时,不执行再同步3. 帧起始至仲裁段期间,多节点同时发送导致的延迟边沿,不执行再同步 1. 正常通信中,通过再同步补偿时钟 / 传输误差2. 发送端自身延迟不属于同步偏差,不触发再同步,避免误补偿3. 仲裁段延迟边沿属于仲裁失利,而非同步误差,不触发再同步

CAN 总线的高阶应用可看 SAE J1939 协议详解:SAE J1939 协议实战详解|PGN 计算 / ID 拆解 / 多包传输 / 报文解析全攻略 _j1939协议自动分配名-CSDN博客

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐