1. CAN总线基础:从起源到物理层

大家好,我是你们这趟CAN总线之旅的向导。做嵌入式硬件十几年,CAN总线算是我打交道最多的通信协议之一。今天咱们先打好地基,聊聊CAN的来龙去脉、协议版本差异,以及物理层那些容易被忽略的细节。

1.1 CAN协议的起源:为什么会有它?

上世纪80年代,汽车里的电子设备越来越多。空调、ABS、发动机控制、仪表盘……每个模块都自己拉一堆线,车身线束又重又贵,故障率还高。德国Bosch公司看不下去了,1986年搞出了CAN(Controller Area Network)协议。

说白了,就是让所有电子模块共用两根线来通信。我早年拆过一台老款宝马,那线束粗得跟手臂似的。后来换用CAN总线,线束重量直接减半。这就是CAN诞生的初衷——省钱、减重、可靠。

核心设计目标:

  • 多主通信:任何节点都能主动发消息
  • 实时性:优先级高的消息不堵车
  • 高可靠性:抗干扰、检错能力强
  • 低成本:两根线搞定所有节点

1.2 CAN 2.0A vs CAN 2.0B:别搞混了

很多新手拿到芯片手册,看到“CAN 2.0A”和“CAN 2.0B”就懵了。其实区别就一个——ID长度。

特性 CAN 2.0A(标准帧) CAN 2.0B(扩展帧)
ID位数 11位 29位
最大节点数 约30~40个(实际) 几乎无限制
兼容性 2.0B控制器可收2.0A帧 2.0A控制器无法收扩展帧
典型应用 简单系统、老设备 复杂网络、车载诊断

我遇到过最坑的一次:客户拿了个2.0A的旧控制器,非要接在2.0B的网络上。结果扩展帧一来,控制器直接罢工。所以选型时一定要确认清楚——你的网络里有没有29位ID的节点?有的话,所有节点都得支持2.0B。

我的习惯:新项目一律选2.0B兼容的控制器。多花几毛钱,省去后期兼容性头疼。

1.3 CAN FD:更快、更狠

传统CAN最高1Mbps的速率,在自动驾驶、OTA升级面前越来越吃力。2012年Bosch又推出了CAN FD(Flexible Data-rate)。

CAN FD和CAN 2.0的区别,我总结为三点:

  • 速率翻倍:数据段最高8Mbps(仲裁段仍用1Mbps)
  • 数据更长:一帧最多带64字节(传统CAN只有8字节)
  • 向下兼容:CAN FD控制器可以收传统CAN帧,反之不行

举个例子:传统CAN刷写一个256KB的固件,按1Mbps算,光传输时间就要2秒多。换成CAN FD,64字节一帧、8Mbps速率,时间能压缩到0.3秒以内。做车载诊断的朋友应该深有体会——等那几秒真的很煎熬。

注意:CAN FD不是所有收发器都支持。选型时如果项目有高速率需求,务必确认收发器支持CAN FD(比如TJA1044、SN65HVD230等)。

1.4 CAN总线物理层特性:两根线的艺术

CAN总线物理层就两根线——CAN_H和CAN_L。但别小看这两根线,里面的门道不少。

1.4.1 差分信号

CAN用差分电压传输信号。显性(Dominant)时,CAN_H比CAN_L高2V左右;隐性(Recessive)时,两线电压差接近0V。

为什么用差分?抗干扰。我做过一个实验:在电机驱动器旁边跑CAN总线,单端信号早就被干扰得不成样子了,差分信号纹丝不动。这就是CAN能在工业环境里活下来的原因。

1.4.2 终端电阻

CAN总线两端必须各接一个120Ω电阻。为什么是120Ω?因为双绞线的特性阻抗大约就是120Ω。不接终端电阻,信号会在总线末端反射,导致通信错误。

我曾经犯过一个低级错误:调试时忘了接终端电阻,结果总线一直报错。查了半天,最后发现是电阻没焊。嗯,从那以后我每次画板子都会在原理图上标红“终端电阻必接”。

1.4.3 总线长度与速率

CAN总线的长度和速率成反比。速率越高,能跑的距离越短。我整理了一个经验表格:

速率 最大总线长度 典型场景
1 Mbps 40 m 车内网络
500 kbps 100 m 工业控制
250 kbps 200 m 楼宇自动化
125 kbps 500 m 远程监控
50 kbps 1000 m 长距离传感

你想想看,如果非要在1Mbps下跑500米,会怎样?信号反射、衰减、位定时错误全来了。所以设计时一定要根据实际距离选速率,别贪快。

1.4.4 共模电压范围

CAN收发器能容忍的共模电压一般在-2V到+7V之间。如果超出这个范围,通信就会出问题。我在一个项目中遇到过:CAN总线跟大功率电机共地,电机启动时地电位瞬间抬升,直接把收发器打坏了。后来加了共模扼流圈和隔离电源才解决。

物理层关键参数速查:

  • 显性电平:CAN_H ≈ 3.5V,CAN_L ≈ 1.5V
  • 隐性电平:CAN_H ≈ 2.5V,CAN_L ≈ 2.5V
  • 终端电阻:120Ω(两端各一个)
  • 共模电压范围:-2V ~ +7V
  • 最大节点数:取决于收发器驱动能力,通常30~110个

1.5 本章知识体系

下面这张图帮你理清CAN总线基础的核心脉络:

CAN总线基础知识体系 CAN总线基础知识体系 CAN总线基础 协议起源 协议版本 物理层特性 Bosch 1986年推出 解决汽车线束过多问题 CAN 2.0A:11位ID CAN 2.0B:29位ID CAN FD:8Mbps + 64字节 差分信号(CAN_H/CAN_L) 终端电阻120Ω 速率与长度成反比 选型前必须理清:你的系统用哪种协议?跑多快?多远?

这张图把CAN总线基础拆成了三个维度:协议起源、协议版本、物理层特性。做选型时,你得先搞清楚这三个问题,后面才能对症下药。

1.6 小结

这一章我们聊了CAN的诞生背景、2.0A/B和CAN FD的区别,以及物理层那些关键参数。说白了,CAN总线能活到现在,靠的就是简单、可靠、低成本。下一章我们会深入收发器内部,看看它到底是怎么工作的。

嗯,今天就到这里。记住我一句话:选型之前,先把基础打牢。否则后面踩的坑,都是要花时间填的。