1. CAN总线基础回顾

1.1 CAN协议概述

控制器局域网(Controller Area Network,CAN)是一种由Bosch公司在1980年代开发的串行通信协议,最初面向汽车电子系统,现已广泛应用于工业自动化、医疗设备、航空航天等领域。CAN协议的核心设计目标是:在恶劣电磁环境下实现高可靠性、实时性强的多主节点通信。

关键特性:
  • 多主总线:任何节点在总线空闲时均可发起通信,无主从依赖。
  • 基于优先级的仲裁:通过标识符(ID)的隐性/显性位实现无损逐位仲裁,高优先级报文优先发送。
  • 短帧结构:数据场最多8字节(CAN 2.0),保证实时性和错误检测效率。
  • 强大的错误处理:包含CRC校验、位填充、格式检查、应答确认等多层错误检测机制。
  • 差分信号传输:CAN_H和CAN_L双线差分,抗共模干扰能力强。

1.2 CAN 2.0A / B 标准

CAN 2.0规范分为A和B两个部分,核心区别在于标识符(ID)的长度和帧格式支持。

特性 CAN 2.0A(标准帧) CAN 2.0B(扩展帧)
ID长度 11位 29位(11位基本ID + 18位扩展ID)
帧格式标识 IDE位 = 0 IDE位 = 1
最大报文数 211 = 2048 229 ≈ 5.36亿
仲裁场宽度 12位(ID + RTR) 32位(基本ID + SRR + IDE + 扩展ID + RTR)
兼容性 所有CAN控制器均支持 需控制器支持CAN 2.0B passive或active
典型应用 动力总成、车身控制 诊断(UDS)、多ECU复杂网络
工程提示:在车载网络设计中,标准帧(11位ID)常用于高优先级、周期性报文(如发动机转速、车速),扩展帧(29位ID)多用于诊断通信(ISO 15765-2)或需要大量节点标识的复杂网络。MCU外设驱动开发时,必须根据CAN控制器硬件支持的帧类型配置过滤寄存器。

1.3 CAN FD 简介

CAN FD(Flexible Data-Rate)是CAN 2.0的演进标准,由Bosch和业界联合推出,旨在突破传统CAN的带宽瓶颈。CAN FD在物理层和数据链路层做了关键改进,同时保持与CAN 2.0的兼容性。

对比项 CAN 2.0 CAN FD
最大数据场长度 8字节 64字节
传输速率(数据段) 固定(最高1 Mbps) 可变(仲裁段≤1 Mbps,数据段最高8 Mbps)
帧格式 标准帧 / 扩展帧 FD帧(FDF位=1),兼容标准/扩展ID
CRC算法 15位CRC 17位(≤16字节)或21位(>16字节)CRC
位填充规则 固定填充 数据段采用更高效的填充规则
向后兼容 — CAN FD节点可与CAN 2.0节点共存于同一总线
开发注意:虽然CAN FD物理层与CAN 2.0兼容,但MCU外设驱动开发时需特别注意:CAN FD控制器必须支持可变速率切换(BRS位)和更大的数据缓冲区。在报文过滤和ID分配优化中,CAN FD的64字节数据场意味着单个报文可承载更多信号,过滤策略需从“ID级”细化到“数据场偏移级”。

1.4 CAN总线物理层特性

CAN总线物理层定义了电气特性、信号编码和总线拓扑,直接影响MCU外设驱动中CAN收发器的配置和故障诊断。

CAN总线物理层拓扑结构 ECU 1 MCU + CAN控制器 ECU 2 MCU + CAN控制器 ECU 3 MCU + CAN控制器 CAN收发器 CAN收发器 CAN收发器 CAN_H CAN_L 120Ω 120Ω 物理层关键参数 隐性电平:CAN_H ≈ 2.5V,CAN_L ≈ 2.5V(差分≈0V) 显性电平:CAN_H ≈ 3.5V,CAN_L ≈ 1.5V(差分≈2V)

1.5 物理层关键参数与驱动影响

参数 典型值 对MCU驱动的影响
总线长度 ≤40 m @ 1 Mbps 驱动需配置正确的位时序(TSEG1/TSEG2/SJW)以匹配传播延迟
终端电阻 120Ω(两端各一个) 收发器驱动能力需匹配;缺少终端电阻会导致信号反射
共模电压范围 ±12V(ISO 11898-2) 驱动初始化时需检测总线状态(Bus-Off恢复策略)
位编码 NRZ + 位填充(每5个相同位插入1个反相位) 硬件自动处理,但驱动需关注填充错误状态寄存器
显性/隐性逻辑 显性=0(主导),隐性=1(被动) ID仲裁优先级:ID值越小,优先级越高(显性位优先)
驱动开发要点:在MCU外设驱动中,CAN物理层配置通常通过CAN控制器内部的位时序寄存器(BTR)完成。以STM32 bxCAN为例,需要设置BRP(波特率预分频器)、TS1/TS2(时间段)和SJW(同步跳转宽度)。错误的位时序配置是导致CAN总线通信失败的常见原因,尤其在混合使用CAN 2.0和CAN FD节点的网络中。

1.6 报文帧结构速览

理解CAN报文帧结构是后续进行报文过滤和ID分配优化的基础。以下以CAN 2.0A标准帧为例,展示完整帧格式:

CAN 2.0A 标准数据帧结构 SOF ID (11位) RTR IDE r0 DLC 数据场 (0~8字节) CRC ACK EOF IFS 1位 11位 1位 1位 1位 4位 0~64位 15位 2位 7位 3位 ID字段在仲裁过程中决定报文优先级:ID值越小,显性位越多,优先级越高
ID分配优化启示:从帧结构可以看出,ID不仅用于标识报文来源/类型,还直接决定了总线仲裁优先级。在后续章节中,我们将深入探讨如何为车载网络中的ECU分配ID,使得高实时性报文(如制动、转向)获得低ID值,同时利用MCU的硬件过滤寄存器(如STM32的CAN_FMR/FIR)实现高效的报文过滤,降低CPU负载。