第2章 多域控制器硬件架构:中央计算单元(CCU)、智能座舱域(ICD)、自动驾驶域(AD)、车身域(BCM)的硬件组成

好,咱们进入正题。上一章聊了OTA升级的整体框架,这一章得把硬件底子摸清楚。

为什么我坚持要先讲硬件?因为OTA升级说白了,就是给这些硬件“喂”新软件。硬件长什么样、用什么芯片、怎么连的,直接决定了你的升级策略怎么设计。我在项目里见过太多人,上来就写升级逻辑,结果发现某个域控的Flash分区根本不够用——那叫一个尴尬。

2.1 中央计算单元(CCU)的硬件构成

CCU是整个车的“大脑”。我个人习惯把它比作一个超级路由器加服务器的混合体。

2.1.1 核心处理器

CCU通常采用高性能SoC,比如高通SA8295、英伟达Orin或者瑞萨R-Car H3。嗯,这里要注意,选型时不能只看算力,还得看它的安全岛( Safety Island )是否独立。我踩过坑,有一次选了一款没有独立安全核的芯片,结果做功能安全认证时,OTA升级过程中的回滚逻辑怎么都过不了审核。

关键参数表:

芯片型号算力(TOPS)安全岛典型应用
高通SA829530座舱+中央网关
英伟达Orin254自动驾驶+中央计算
瑞萨R-Car H32.5无(需外挂)入门级中央网关

2.1.2 存储与分区

CCU的存储设计,直接决定了OTA能不能“双区备份”。我建议至少分三个区:

  • Bootloader区:只读,负责启动校验。我曾经见过有人把Bootloader也OTA了,结果升级失败直接变砖——血的教训。
  • Active区:当前运行的系统。
  • Standby区:升级目标区。升级时写入这里,成功后切换启动指针。

我的经验:Standby区的大小至少是Active区的1.2倍。为什么?因为压缩包解压后可能比原系统大。别问我怎么知道的,问就是吃过亏。

2.2 智能座舱域(ICD)的硬件组成

ICD是用户直接打交道的域。你想想看,如果座舱升级失败,中控黑屏了,车主第一个骂的就是你。

2.2.1 显示与交互硬件

ICD通常包含:

  • 主控SoC(如高通SA8155)
  • GPU模块(负责渲染)
  • 音频DSP(处理语音交互)
  • 多路显示输出(仪表、中控、HUD)

这里有个坑:多路显示输出意味着升级时不能同时刷新所有屏幕。我做过一个项目,OTA升级仪表固件时,中控还在播放视频,结果仪表黑屏了3秒——用户投诉说“车坏了”。后来我们加了升级时序控制,先冻结中控,再升级仪表。

2.2.2 通信接口

ICD与CCU之间通常走PCIe或千兆以太网。为什么?因为要传输高清地图数据。我记得有一次调试,发现座舱升级包下载速度只有2MB/s,查了半天,原来是CCU和ICD之间的以太网协商成了百兆模式。嗯,硬件工程师把网线压错了。

注意:ICD的OTA升级必须保留“降级通道”。因为座舱软件更新频繁,万一新版本有bug,用户能一键回滚。我见过某车企,座舱升级后空调界面不见了,就是因为没留降级接口。

2.3 自动驾驶域(AD)的硬件架构

AD域是安全等级最高的。说白了,升级失败可能导致车辆失控,所以硬件设计上极其保守。

2.3.1 主控与冗余

AD域通常采用“主-从”或“双主”架构:

  • 主SoC:如英伟达Orin、华为昇腾310,负责感知和规划。
  • 安全MCU:如Infineon TC397,负责监控和降级控制。
  • 冗余存储:两个独立的Flash芯片,分别存A/B系统。

我个人习惯在AD域上做“三区备份”:A区、B区、以及一个“黄金恢复区”。黄金恢复区只存最稳定的基础版本,平时不更新。为什么?因为有一次OTA升级把A/B区都写坏了,要不是有黄金区,那批车就得拖回工厂了。

2.3.2 传感器接口

AD域需要连接摄像头、激光雷达、毫米波雷达。这些传感器的固件升级,必须通过AD域控转发。你想想看,如果升级激光雷达时,车辆还在路上跑——那画面太美我不敢看。所以,AD域的OTA升级必须做“状态机”:

// 伪代码示例:AD域升级状态机
enum UpgradeState {
    IDLE,           // 空闲
    PRE_CHECK,      // 预检(车速、电源、温度)
    DOWNLOADING,    // 下载中
    INSTALLING,     // 安装中(车辆必须静止)
    VERIFYING,      // 校验中
    ROLLBACK        // 回滚
};

if (vehicle_speed > 0) {
    // 车速不为0,禁止进入INSTALLING状态
    state = IDLE;
    log("安全限制:车辆未静止");
}

关键点:AD域的升级包必须带数字签名,且签名算法要用ECC(椭圆曲线)。RSA太慢了,升级包动辄几个GB,RSA验签能卡死你。

2.4 车身域(BCM)的硬件组成

BCM管的是门锁、车窗、灯光、雨刮这些“小东西”。但别小看它,BCM升级失败,车可能锁不上或者打不着火。

2.4.1 微控制器选型

BCM通常用MCU而不是SoC,比如NXP S32K、瑞萨RH850。为什么?因为成本敏感,而且不需要高算力。我建议选带双Bank Flash的MCU,这样OTA时可以一边运行一边写另一个Bank。

MCU型号Flash大小双BankCAN接口
NXP S32K144512KB支持3路
瑞萨 RH850/F1L1MB支持4路
TI TMS5702MB支持2路

2.4.2 网络拓扑

BCM通常挂在CAN或CAN FD总线上。升级时,CCU通过网关把升级包转发到CAN总线。这里有个问题:CAN总线带宽只有1Mbps(CAN FD能到8Mbps),升级一个512KB的固件需要好几秒。我做过一个优化:先把升级包压缩,然后在BCM端解压。压缩率大概能到60%,时间缩短了一半。

避坑指南:我曾经遇到过BCM升级时,CAN总线被其他报文塞满,导致升级包丢帧。解决方案是:升级期间,让BCM发送“总线负载请求”,通知其他节点降低发送频率。

2.5 域间通信与OTA协同

四个域控不是孤立的。CCU作为OTA主控,需要协调ICD、AD、BCM的升级顺序。

2.5.1 通信链路

  • CCU ↔ ICD:PCIe或千兆以太网,用于传输大文件(如地图、UI资源)。
  • CCU ↔ AD:以太网+冗余CAN,用于传输算法模型和传感器固件。
  • CCU ↔ BCM:CAN FD,用于传输车身控制固件。

2.5.2 升级时序

我建议的升级顺序是:BCM → ICD → AD → CCU。为什么?因为BCM最基础,先升级它确保车辆基本功能正常;ICD次之,因为用户能直观看到进度;AD和CCU最后,因为它们涉及安全核心。

警告:绝对不要同时升级两个域。我见过一个项目,同时升级ICD和AD,结果两个域都卡在“等待重启”状态,CCU也死机了——整车变砖。后来我们加了“域间互锁”机制:一个域升级完成并确认后,才能开始下一个。

好了,硬件架构就聊到这儿。下一章咱们会深入每个域的软件分区设计,那才是OTA升级的真正战场。记住一句话:硬件决定了OTA的下限,软件决定了上限。