17、多ECU协同升级:车载以太网与DoIP协议、UDS诊断服务(0x34/0x36/0x37)、网关路由与优先级管理、跨域升级时序控制

多ECU协同升级,说白了就是让车上几十个脑子(ECU)一起换系统。这事儿比手机升级复杂得多。手机就一个处理器,车上有网关、座舱、智驾、车身控制……每个ECU都有自己的固件,升级顺序错了,车可能就趴窝了。

我个人习惯把多ECU升级拆成三个核心问题:怎么传数据怎么刷写怎么协调。咱们一个一个聊。

17.1 车载以太网与DoIP协议

传统CAN总线带宽只有1Mbps,刷个几百兆的座舱系统得等半小时。以太网一上来,直接干到100Mbps甚至1Gbps。DoIP(Diagnostics over IP)就是基于以太网的诊断协议,它把UDS诊断报文封装在TCP/IP包里。

我在项目中遇到过一个问题:DoIP的端口号是13400,但很多工程师不知道它其实支持同时多个连接。一个连接用来发诊断请求,另一个用来收事件通知,互不干扰。

DoIP的核心流程:

  • 车辆发现:诊断仪发广播,ECU回复自己的IP和VIN
  • 路由激活:诊断仪请求激活,ECU返回激活状态
  • 诊断通信:通过UDS over DoIP发送请求/响应

你想想看,如果不用DoIP,每个ECU都得单独接一根线。有了以太网,所有ECU都挂在同一个网络里,网关负责把诊断报文路由到目标ECU。

17.2 UDS诊断服务:0x34/0x36/0x37

这三个服务是刷写的核心。我刚开始做OTA时,总把0x34和0x36搞混。后来记住一句话:0x34是握手,0x36是传数据,0x37是结束

服务ID 名称 作用
0x34 Request Download 告诉ECU我要刷写了,协商数据格式和大小
0x36 Transfer Data 分块传输固件数据,每块最大4096字节
0x37 Request Transfer Exit 通知ECU数据传完了,开始校验和安装

避坑指南:我曾经在0x34的请求里忘了设置正确的内存地址,结果ECU把固件刷到了校准数据区,车机直接黑屏。0x34的请求报文里有个memoryAddress字段,一定要和ECU的Flash分区表对齐。

0x36的块大小也很关键。以太网环境下,我建议每块设成4096字节。太大容易丢包重传,太小又浪费带宽。嗯,这里要注意:0x36的响应里有个blockSequenceCounter,ECU用这个来检测丢包。如果连续丢两块,ECU会直接中止刷写。

17.3 网关路由与优先级管理

网关是升级的大脑。它负责把DoIP报文从以太网侧路由到CAN、LIN甚至FlexRay总线。每个ECU都有自己的物理地址和逻辑地址,网关维护一张路由表。

我在项目中遇到过一个问题:同时升级座舱ECU和网关ECU,结果网关把自己刷死了,所有路由都断了。后来我们加了一条规则:网关必须最后升级,或者升级网关时保留一个最小路由表。

优先级管理原则:

  • 安全相关ECU(如制动、转向)优先级最高,必须最先升级
  • 网关ECU优先级最低,避免升级过程中断路由
  • 娱乐ECU可以后台升级,不影响驾驶安全

说白了,优先级管理就是决定谁先谁后。我见过一个方案:把ECU分成三个优先级组。第一组是安全ECU,第二组是车身控制,第三组是座舱和娱乐。同一组内的ECU可以并行升级,不同组必须串行。

17.4 跨域升级时序控制

跨域升级是最头疼的。座舱域、智驾域、车身域,每个域都有自己的升级策略。时序控制的核心是依赖关系

举个例子:智驾域的摄像头ECU升级后,图像处理ECU也必须升级,否则协议不兼容。这种依赖关系必须在升级前就定义好。

我建议的时序控制流程:

  1. 云端下发升级包,车端先做依赖检查
  2. 按优先级分组,每组内并行升级
  3. 每组升级完成后,做功能验证
  4. 所有组都完成后,做整车级验证

我曾经在时序控制上栽过跟头。有一次升级顺序是:先升级座舱,再升级智驾。结果座舱升级后,智驾域的网络配置变了,智驾ECU连不上网关。从那以后,我坚持在升级前做全车网络拓扑快照,升级完成后做一致性校验。

多ECU协同升级时序控制流程 云端OTA平台 车端网关(主控) 依赖检查 & 分组 优先级排序 网络拓扑快照 并行升级(同组ECU) 功能验证 & 一致性校验

这张图展示了我常用的时序控制流程。注意看,依赖检查和网络拓扑快照是并行进行的,这样可以节省时间。升级完成后,功能验证是必须的,不能跳过。

我的经验:跨域升级最容易出问题的是时序窗口。比如座舱域升级需要5分钟,智驾域需要3分钟,如果同时开始,座舱域还没结束,智驾域已经完成了,这时候智驾域可能因为座舱域的网络变化而出错。我建议用栅栏机制:所有ECU都到达同一个状态后,再统一进入下一步。

嗯,最后说一句。多ECU协同升级没有银弹。每个车型的ECU拓扑都不一样,依赖关系也不同。我见过最复杂的项目有80多个ECU需要协同升级,光依赖图就画了三天。但核心思路不变:先安全、后娱乐、网关最后、验证不能省

公众号:蓝海资料掘金营,微信deep3321