Chapter 01 · CAN 总线 / 汽车电子

CAN 总线概览

从 Bosch 1986 年的发明,到今天一辆车里数十个 ECU 靠一根双绞线彼此对话——理解 CAN 为什么诞生、多主仲裁如何工作,以及它与其他总线的本质差异。

课程进度6%

关键概念

CAN(Controller Area Network)
控制器局域网,由德国 Bosch 公司于 1986 年为汽车内部电子控制单元通信而设计的串行总线协议。它是一种多主(Multi-Master)广播式总线:所有节点挂在同一对差分线上,任何节点都可以在总线空闲时发起发送,报文不含目标地址而是靠标识符被所有节点收到后各自过滤。1993 年成为国际标准 ISO 11898。
ECU(Electronic Control Unit)
电子控制单元,汽车里的嵌入式计算机节点,例如发动机 ECU、ABS 控制器、车身控制模块 BCM、仪表。一辆现代汽车含 50~150 个 ECU,它们通过 CAN 等总线交换传感器数据和控制指令,是 CAN 网络上的"说话者"。
总线拓扑 (Bus Topology)
所有节点并联挂接在同一条共享传输线上的连接方式。与"点对点"星形布线相比,总线只需一对线就能连接任意数量节点,新增节点无需改动主干。这正是 CAN 取代传统"一功能一根线"线束、大幅减重降本的根本原因。
多主仲裁 (Multi-Master Arbitration)
当多个节点同时想发送时,CAN 通过逐位比较标识符来决定谁获得总线,无需中央仲裁器。这是 CAN 最精妙的设计——它是非破坏性的:竞争失败的节点自动退出并转为接收,获胜报文毫发无损地继续传输,不像以太网 CSMA/CD 那样发生冲突就全部作废重发。
显性位与隐性位 (Dominant / Recessive)
CAN 总线的两种逻辑电平。显性位(逻辑 0)会"压倒"隐性位——只要有一个节点发送显性,总线就呈显性;只有所有节点都发送隐性位(逻辑 1)时总线才是隐性。这种"线与"特性是仲裁能够工作的物理基础:发送隐性却读回显性的节点,即判定自己竞争失败。
标识符 (Identifier / CAN ID)
每个 CAN 报文携带的 11 位(标准帧)或 29 位(扩展帧)编号。它不是节点地址,而是报文内容的标签,同时决定优先级——ID 数值越小优先级越高(因为前导显性位更多,仲裁时胜出)。例如发动机转速报文 ID 设得较小以保证实时性。
面向报文 vs 面向地址
CAN 是面向报文(Message-Oriented)的:发送方广播一条带 ID 的报文,不关心谁接收;每个接收节点用硬件过滤器决定是否收下。这与 UART/SPI 这类"我发给某个具体设备"的面向地址通信截然不同,天然适合多个 ECU 共享同一份传感器数据。
LIN / FlexRay / 车载以太网
与 CAN 配合的其它车载网络。LIN 是单线低速(≤20kbps)主从总线,用于车窗、雨刮等低成本子网;FlexRay 是 10Mbps 时间触发确定性总线,用于线控转向/制动等安全关键系统;车载以太网(100BASE-T1 / 1000BASE-T1)用于摄像头、自动驾驶等大带宽场景。CAN 处于中间位置,是车内应用最广的骨干网络。

汽车电子架构的演进

在 CAN 出现之前,汽车里每个功能都用独立导线连接,随着电子设备增多,线束重达几十公斤、故障率飙升。CAN 用"一根总线连所有"的思路,把这团乱麻理成了清晰的网络。

传统点对点线束 vs CAN 总线架构 ═══════════════════════════════════════════════════════════════ 【传统方式:一功能一根线,线束爆炸】 ┌────────┐ ─── 电压线 ───▶ ┌──────┐ │ │ ─── 转速线 ───▶ │ 仪表 │ │ 发动机 │ ─── 水温线 ───▶ └──────┘ │ ECU │ ─── 车速线 ───▶ ┌──────┐ │ │ ─── 油量线 ───▶ │ 空调 │ └────────┘ ─── 故障线 ───▶ └──────┘ ...几十上百根线,重且易故障 【CAN 方式:所有节点挂一对双绞线】 CAN_H ══╤═══════╤═══════╤═══════╤═══════╤══ │ │ │ │ │ ┌───┴──┐┌───┴──┐┌───┴──┐┌───┴──┐┌───┴──┐ │发动机││ 仪表 ││ ABS ││ 车身 ││ 空调 │ │ ECU ││ ││ ││ BCM ││ │ └───┬──┘└───┬──┘└───┬──┘└───┬──┘└───┬──┘ │ │ │ │ │ CAN_L ══╧═══════╧═══════╧═══════╧═══════╧══ 只需 2 根线,任何节点广播,全网可听
CAN 带来的三大收益

① 减重降本:线束从几十公斤减到几公斤;② 数据共享:车速信号发一次,仪表、空调、ABS 同时可用,不必各拉一根线;③ 易于扩展与诊断:新增 ECU 只需接入总线,且可通过总线做统一故障诊断(OBD/UDS,本教程后半部分详述)。

非破坏性仲裁:CAN 的灵魂

当两个节点同时开始发送,它们逐位广播自己的标识符,同时监听总线上的实际电平。由于显性位(0)会压过隐性位(1),发送隐性却听到显性的节点立刻明白:有更高优先级的报文在竞争,于是自动退出、转为接收。整个过程中获胜报文没有任何损坏,也没有时间浪费。

逐位仲裁示例:三个节点同时发送 位序: SOF ID10 ID9 ID8 ID7 ID6 ... ───────────────────────────────────────── 节点A ID=0x0F3: 0 0 0 0 1 1 ← ID7 发1读到0,退出 节点B ID=0x0E5: 0 0 0 0 1 0 ← 同上,ID7 发1读到0,退出 节点C ID=0x0C1: 0 0 0 0 0 0 ← 全程胜出,继续发送 ✓ ───────────────────────────────────────── 总线实际电平: 0 0 0 0 0 0 (显性压倒隐性 = 线与) 规则: 发"隐性1"却读回"显性0" ⇒ 我输了 ⇒ 立即转接收 ID 数值越小 ⇒ 前导显性越多 ⇒ 优先级越高
为什么说"ID 小 = 优先级高"

仲裁从标识符最高位开始逐位比较。数值小的 ID 意味着高位有更多的 0(显性),在比较中更容易保持"发 0 读 0"的胜出状态。所以设计网络时,把最紧急的报文(如刹车、故障保护)分配更小的 ID。注意:ID 全 0 是最高优先级,但实际会为特殊帧保留。

CAN 与其它总线对比

总线拓扑线数速率仲裁/寻址典型应用
UART点对点2(TX/RX)≤数 Mbps无仲裁,双方约定调试串口、GPS
SPI主从星形4+片选数十 Mbps主控用片选寻址Flash、传感器
I2C总线2(SDA/SCL)≤3.4Mbps7/10位从机地址板内传感器/EEPROM
LIN总线1(单线)≤20kbps主从轮询车窗、雨刮、灯光
CAN总线2(差分)≤1Mbps多主非破坏性仲裁动力/车身/底盘骨干
CAN FD总线2(差分)≤8Mbps同 CAN高数据量 ECU
FlexRay总线/星2~410Mbps时间触发确定性线控转向/制动
车载以太网点对点2(双绞)100M~1GbpsMAC 地址+交换摄像头、ADAS

CAN 的优势

  • 多主,无需中央控制器
  • 非破坏性仲裁,实时性强
  • 差分信号抗干扰能力强
  • 内建错误检测与故障界定
  • 成本低、生态成熟

CAN 的局限

  • 经典 CAN 速率上限 1Mbps
  • 数据场最多 8 字节
  • 带宽不足以传视频/点云
  • 非确定性延迟(低优先级可能长期被压制)
  • 大数据场景需 CAN FD 或以太网

整车网络:分域架构

现代汽车不是只有一条 CAN,而是按功能划分成多个网段(域),彼此通过网关互联。不同域的实时性与带宽需求不同,因此速率各异。

典型整车网络拓扑(分域 + 网关) ┌─────────────────────┐ │ 中央网关 Gateway │ │ (跨域转发/诊断入口) │ └──┬────┬────┬────┬────┘ ┌────────────┘ │ │ └────────────┐ 高速 CAN 500k 高速 CAN CAN FD LIN/以太网 【动力总成域】 【底盘域】 【车身域】 【信息娱乐】 ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │发动│ │变速│ │ABS │ │ BCM│ │中控│ │机 │ │箱 │ │ESP │ │门窗│ │屏 │ └────┘ └────┘ └────┘ └────┘ └────┘ 诊断口(OBD-II) ── 接入中央网关 ── 外部诊断仪 动力/底盘: 实时性要求最高,500kbps 高速 CAN 车身 : 门窗灯光等,CAN 或 CAN FD 舒适子网: 座椅/后视镜等,LIN 低速降本 娱乐/ADAS: 大带宽,车载以太网
网关的作用与安全边界

网关不仅做协议/速率转换,还是安全隔离的关键:它按白名单转发报文,防止娱乐域的问题波及动力域。近年针对车联网的攻击往往先攻破 T-Box/娱乐系统,再试图穿透网关向动力 CAN 注入报文——因此网关的报文过滤与诊断权限控制是车辆网络安全的第一道防线。

本章小结

CAN 是 Bosch 于 1986 年发明、1993 年标准化为 ISO 11898 的多主广播式串行总线,用一对差分双绞线取代了传统"一功能一根线"的庞大线束,实现减重、数据共享与易扩展。它的核心机制是非破坏性逐位仲裁:显性位(0)压倒隐性位(1),发隐性读回显性的节点自动退出,ID 数值越小优先级越高,获胜报文无损继续传输。CAN 是面向报文而非面向地址的——报文携带标识符作为内容标签,接收节点靠硬件过滤器决定收发。相比 UART/SPI/I2C 的板内通信、LIN 的低速主从、FlexRay 的确定性时间触发、以太网的大带宽,CAN 在实时性、抗干扰、成本之间取得平衡,是动力总成域与车身域的骨干网络。整车网络采用分域架构,多条不同速率的总线经中央网关互联,网关同时承担协议转换与安全隔离职责。

⚒️ 配套开发者工具箱 · JSON / 正则 / 时间戳 / Cron 等 17 款免费在线工具