2. 车载电子电气架构基础

在车载 Linux 电源与低功耗系统工程中,理解整车电子电气架构(E/E Architecture)是设计电源管理策略的前提。电源模式如何定义、由谁仲裁、通过哪些网络传播、最终唤醒或休眠哪些 ECU,都取决于架构的拓扑与节点角色。本节从节点类型、网络拓扑、电源模式三个维度建立整体认知框架。

一、核心节点类型与职责

现代整车 E/E 架构由若干类节点构成,它们在电源管理中扮演不同角色:

  • ECU(电子控制单元):最小功能节点,如车窗控制器、座椅控制器、传感器节点。通常由 MCU 驱动,具备本地休眠能力,通过 CAN/LIN 收发报文。
  • 域控制器(Domain Controller):按功能域聚合,如动力域、底盘域、座舱域、智驾域。域内 ECU 通过 CAN/LIN/以太网汇聚到域控制器,域控制器承担域内电源策略的协调与网关转发。
  • 中央计算平台(Central Computing Platform):跨域集中计算,运行 Linux/QNX 等富操作系统,承载座舱、智驾、车控融合应用。它是整车电源状态的主要决策者之一,也是低功耗设计中最复杂的节点。
  • 网关(Gateway):连接不同网段(CAN、CAN FD、LIN、以太网),完成协议转换、报文路由与网络隔离。网关是电源模式报文跨网段传播的关键枢纽。
关键认知:电源模式不是单一节点说了算,而是由中央计算平台/域控制器仲裁,经网关分发到各网段,再由各 ECU 本地执行休眠或唤醒。

二、整车网络拓扑与电源传播路径

典型拓扑为“中央计算平台 + 域控制器 + 网关 + 末端 ECU”的分层结构。电源模式信号(如 KL15、KL30、网络管理报文 NM)沿拓扑自上而下传播,唤醒事件则自下而上上报。下图展示了一个简化的分层拓扑与电源信号流向:

中央计算平台 Linux/QNX · 电源仲裁 · 应用融合 网关 Gateway 协议转换 · 报文路由 · 网段隔离 座舱域控制器 CDC 智驾域控制器 ADC 动力/底盘域控 PDC / CDC 车窗 ECU LIN 座椅 ECU CAN 雷达 ECU 以太网 摄像头 ECU 以太网 BMS CAN FD 电源模式下发 电源模式/休眠指令下发 唤醒事件上报 域控制器 末端 ECU

图中蓝色实线表示电源模式与休眠指令的下发路径,橙色虚线表示唤醒事件的上报路径。可以看到,网关是跨网段传播的必经节点,而域控制器是域内电源策略的执行与汇聚点。

三、电源模式与整车状态机

整车电源模式通常包括:OFF(全关)、ACC(附件)、ON(点火)、RUN(运行)、SLEEP(休眠)、WAKE(唤醒中)。这些模式由 BCM 或中央计算平台仲裁,通过硬线(KL15/KL30)与网络管理报文(NM)双通道传播。

电源模式 典型触发条件 网络状态 Linux 侧动作
OFF 钥匙拔出、下电指令 NM 停发,总线静默 保存上下文,进入关机流程
ACC 钥匙转至 ACC 档 部分网段唤醒 启动非安全相关服务
ON / RUN 点火、车辆行驶 全网络活跃 全功能运行,禁止休眠
SLEEP 无唤醒源、定时到达 NM 停发,进入低功耗 冻结进程,关闭外设时钟
WAKE CAN 唤醒帧、硬线、RTC NM 恢复发送 恢复时钟,重建网络连接

四、典型场景:远程唤醒与休眠竞态

场景:车辆停放后进入 SLEEP,T-Box 收到远程控车指令,需要唤醒座舱域控制器与中央计算平台。此时电源管理链路为:T-Box 发出 CAN 唤醒帧 → 网关识别并转发 → 域控制器唤醒 → 中央计算平台唤醒 → 应用处理指令 → 处理完成后重新评估休眠条件。

该场景中常见的竞态问题是:多个唤醒源同时到达,或应用尚未处理完而网络管理计时器已超时,导致误休眠。解决思路是引入“唤醒保持锁”(Wake Lock)与“休眠投票”机制,由各节点上报是否允许休眠,中央计算平台统一仲裁。

误区:认为“总线无报文就等于可以休眠”。实际上,某些 ECU 可能仍在本地执行任务,或存在未释放的 Wake Lock。必须结合网络管理状态与本地任务状态共同判断。

五、低功耗设计对架构的依赖

从电源与低功耗工程视角看,架构决定了三件事:

  1. 谁有权决定休眠:中央计算平台或域控制器作为仲裁者,末端 ECU 只有请求权。
  2. 唤醒路径有多长:跨网段唤醒需经过网关,路径越长,唤醒延迟越大,需在时序设计中预留余量。
  3. 静态电流分布在哪里:每个 ECU 的休眠漏电流叠加,网关与域控制器通常是静态电流大户,需重点优化。
# 查看 Linux 侧网络管理状态示例
cat /sys/class/net/can0/operstate
ip -details link show can0 | grep -i state

# 查看唤醒源
cat /proc/acpi/wakeup 2>/dev/null
dmesg | grep -i "wakeup\|resume"