2. 座舱电子电气架构:从分布式到域集中再到中央计算平台的演进

聊座舱架构演进,我习惯先画一条时间线。十年前做车载娱乐系统,那会儿的架构说白了就是「各自为政」——收音机管收音机,导航管导航,空调面板管空调。每个功能模块都有自己的MCU,自己的内存,自己的通信线。你想想看,一个座舱里塞了七八个ECU,线束重得像捆电缆。

我在2015年参与过一个合资车型的座舱项目,光是仪表盘和中控之间的CAN总线信号定义就写了200多页。那时候最头疼的是加一个新功能——比如「倒车时自动降低媒体音量」,你得协调三个ECU的供应商改软件,联调周期至少两个月。嗯,这就是分布式架构的典型痛点。

2.1 分布式架构:功能孤岛时代

分布式架构的核心特征,就是「一个功能一个盒子」。每个ECU独立运行,通过CAN/LIN总线交换信号。

ECU 功能 处理器 通信方式
收音机模块 AM/FM接收、CD播放 8位MCU LIN
导航模块 地图渲染、路径规划 ARM Cortex-A CAN
仪表盘 车速、转速显示 16位MCU CAN
空调面板 温度控制、风量调节 8位MCU LIN
蓝牙模块 电话、音频流 专用DSP UART

这种架构的好处是——每个ECU的失效范围被隔离了。收音机坏了不影响空调。但坏处更明显:

  • 线束噩梦:一辆中端车的座舱线束总长超过2公里,重量15-20公斤
  • 软件升级困难:每个ECU的固件更新需要专用工具,OTA?不存在的
  • 算力浪费:每个ECU的CPU利用率通常不到30%,但峰值算力又不够
  • 功能协同成本高:跨ECU的功能开发周期以月为单位
我曾经踩过的坑: 在某项目里,仪表盘需要显示导航的「下一路口」信息。导航模块通过CAN发送文本,仪表盘解析后显示。结果导航模块的CAN报文周期是100ms,仪表盘的显示刷新周期是50ms——两个周期对不齐,导致文字闪烁。最后不得不在仪表盘侧加了一个软件缓冲区,才把问题压下去。这种问题在分布式架构里太常见了。

2.2 域集中架构:算力开始聚合

大概2017年左右,行业开始意识到「算力集中」是趋势。高通820A、瑞萨R-Car H3这些高性能SoC的出现,让一个芯片能同时跑多个操作系统。于是「域控制器」的概念出现了——把座舱里所有功能集中到一个或两个高性能计算单元上。

我参与的第一个域控项目,是把仪表、中控、空调、蓝牙、环视五个功能合并到一个SoC上。硬件上用了瑞萨R-Car H3,软件上跑了一个Hypervisor,上面挂三个虚拟机:一个跑QNX做仪表,一个跑Android做中控,一个跑Linux做空调控制。

域集中架构的关键变化:
  • 从「多个ECU」变成「一个域控 + 多个区域IO模块」
  • 从「CAN/LIN信号交互」变成「以太网 + SOME/IP服务通信」
  • 从「各自独立开发」变成「统一软件平台」
  • 从「硬件升级」变成「软件OTA」

但域集中也不是完美的。我遇到过最典型的问题是——功能安全隔离。仪表盘需要ASIL-B等级,中控娱乐只需要QM等级。在同一个SoC上,怎么保证仪表盘的实时性不被中控的Android应用抢走?

解决方案是硬件虚拟化。ARM的GICv3中断控制器支持硬件中断隔离,再加上Hypervisor的调度策略,可以把仪表盘的vCPU绑定到专用核上,并且设置最高优先级。但说实话,调优过程很痛苦——我记得有一次仪表盘的CAN报文接收延迟从1ms飙到了8ms,查了两天才发现是Android侧的一个GPU驱动占用了内存带宽。

2.3 中央计算平台:终极形态

到了2020年以后,特斯拉的HW3.0、英伟达的Orin、高通的Snapdragon Ride这些平台开始量产。座舱和智驾开始走向融合——一个中央计算平台,同时处理座舱交互、自动驾驶、车身控制、网关路由。

为什么会有这个趋势?说白了,数据需要统一。你想想看,自动驾驶需要摄像头数据,座舱的DMS也需要摄像头数据。如果两个系统各装各的摄像头,成本翻倍,数据还不能共享。中央计算平台让所有传感器数据进入同一个「数据管道」,谁需要谁订阅。

// 中央计算平台的典型软件架构
// 以AUTOSAR Adaptive为基础

// 服务接口定义(ara::com)
class IVehicleStateService {
public:
  // 获取当前车速(来自底盘域)
  virtual float GetVehicleSpeed() = 0;
  
  // 获取驾驶员状态(来自座舱域)
  virtual DriverState GetDriverState() = 0;
  
  // 获取导航路径(来自座舱域)
  virtual NavigationPath GetNavigationPath() = 0;
};

// 中央决策逻辑示例
void CentralPlanner::PlanHMIResponse() {
  float speed = vehicleStateService->GetVehicleSpeed();
  DriverState driver = vehicleStateService->GetDriverState();
  
  if (speed > 80.0f && driver == DISTRACTED) {
    // 高速且驾驶员分心 - 自动降低娱乐音量
    hmiService->SetMediaVolume(0.3f);
    // 同时触发语音提醒
    hmiService->PlayTTS("请集中注意力驾驶");
  }
}
我的建议: 如果你正在设计中央计算平台,一定要提前规划好「数据优先级」。不是所有数据都需要实时处理。比如空调温度设置可以容忍200ms延迟,但碰撞预警必须在10ms内响应。我习惯用一张「数据流优先级矩阵」来管理——把每个数据流的延迟要求、带宽需求、安全等级都列清楚,再决定走哪个通信通道。

2.4 三种架构的对比

我整理了一张对比表,方便你快速理解三者的差异:

维度 分布式 域集中 中央计算
ECU数量 8-15个 2-4个 1-2个
主处理器 MCU(8/16位) SoC(ARM A系列) SoC + GPU + NPU
通信骨干 CAN/LIN CAN FD + 以太网 千兆/万兆以太网
软件架构 裸机/RTOS Hypervisor + 多OS AUTOSAR Adaptive
OTA能力 无/有限 支持 全量OTA
功能安全 单ECU隔离 虚拟化隔离 硬件分区 + 软件隔离
线束重量 15-20kg 8-12kg 3-5kg
开发周期 12-18个月 8-12个月 6-10个月

从这张表你能看出来——每一次架构演进,都是在做「减法」和「加法」。减法是把硬件数量减下来,加法是把软件复杂度加上去。

座舱电子电气架构演进路线 阶段一:分布式架构 2010-2016 收音机ECU 导航ECU 仪表ECU 空调ECU CAN/LIN总线互联 阶段二:域集中架构 2017-2021 座舱域控制器(CDC) 区域IO模块 区域IO模块 以太网 + SOME/IP 阶段三:中央计算 2022-至今 中央计算平台(CCU) 座舱功能 智驾功能 AUTOSAR Adaptive 核心演进趋势 1. 硬件:从多个ECU → 一个高性能SoC 2. 通信:从CAN/LIN → 千兆以太网 3. 软件:从裸机/RTOS → Hypervisor → AUTOSAR Adaptive 4. 升级:从物理刷写 → 全车OTA 5. 安全:从功能隔离 → 硬件虚拟化 + 软件沙箱 6. 数据:从信号级交互 → 服务级订阅/发布

最后说一句——架构演进不是一蹴而就的。我见过一些团队,一上来就想做中央计算平台,结果连域控的虚拟化都没调明白。我的建议是:先吃透域集中架构,把Hypervisor、SOME/IP、OTA这些基础能力建好,再往中央计算走。步子迈大了,容易扯着。