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收发器的配置和故障诊断。
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标准帧为例,展示完整帧格式:
ID分配优化启示:从帧结构可以看出,ID不仅用于标识报文来源/类型,还直接决定了总线仲裁优先级。在后续章节中,我们将深入探讨如何为车载网络中的ECU分配ID,使得高实时性报文(如制动、转向)获得低ID值,同时利用MCU的硬件过滤寄存器(如STM32的CAN_FMR/FIR)实现高效的报文过滤,降低CPU负载。