1. 课程导入

各位同学好,我是老周。在汽车电子这行摸爬滚打了十几年,今天咱们来聊聊ECU刷写这件事。

ECU刷写,说白了就是给汽车的大脑——电子控制单元(ECU)升级或更换软件。你想想看,手机能OTA升级系统,车为什么不能?其实原理差不多,只是车的安全要求高得多。

我个人习惯把ECU刷写理解成“给ECU做手术”。不是换硬件,而是更新它脑子里的程序和数据。这个过程中,我们要通过某种通信协议,把新的软件镜像写到ECU的Flash存储器里。

1.1 刷写场景:产线、售后与OTA

ECU刷写不是只在修车时才做。实际上,一辆车从出生到报废,会经历好几次刷写。我把它分成三大场景:

场景 时机 特点 我踩过的坑
产线刷写 整车下线前 批量、高速、自动化 曾经因为刷写顺序搞反,导致一批车仪表黑屏
售后刷写 4S店维修/召回 单台、诊断仪连接、人工操作 遇到过刷一半断电,ECU变砖的惨案
OTA刷写 车主远程升级 无线、后台、安全要求极高 早期OTA没做完整性校验,有车升级后空调不制冷

核心要点:产线刷写追求速度,售后刷写追求稳定,OTA刷写追求安全。三种场景对刷写策略的要求完全不同。

产线刷写时,一条线一天要刷几百台车,每台车十几个ECU。这时候刷写时间每缩短1秒,都是巨大的成本节约。我见过有的工厂用并行刷写,一次同时刷4个ECU,效率翻倍。

售后刷写就温柔多了。技师用诊断仪连上OBD口,一台一台慢慢刷。但这里有个坑——不同车型的刷写流程不一样。我曾经因为没看清车型配置,用错了刷写文件,结果把ESP的固件刷到了BCM上,那叫一个惨。

OTA刷写是最近几年的热点。车停在家里,手机一点,系统就升级了。听起来很美好,但背后的技术挑战很大。网络不稳定怎么办?刷到一半没电了怎么办?升级失败车还能开吗?这些问题,我们后面会详细讲。

1.2 刷写协议基础:UDS on CAN/DoIP

刷写ECU,总得有个“语言”来沟通吧?这个语言就是UDS(统一诊断服务)。

UDS是一套标准化的诊断协议,定义在ISO 14229里。它规定了ECU和诊断仪之间怎么对话——比如“我要开始刷写了”、“请擦除Flash”、“请写入数据”、“请校验完整性”。

UDS可以跑在不同的物理层上。目前主流的有两种:

  • UDS on CAN:传统方案,基于CAN总线,速度一般(最高1Mbps),但成熟可靠。
  • UDS on DoIP:新方案,基于以太网,速度飞快(100Mbps甚至更高),适合大数据量传输。

我的建议:如果你刚开始学刷写,先从UDS on CAN入手。CAN的报文结构简单,调试工具也多。等把UDS的会话、服务、安全访问搞明白了,再转DoIP会轻松很多。

UDS刷写最核心的几个服务,我列出来给你看:

服务ID 服务名称 作用 注意事项
0x10 诊断会话控制 切换ECU的工作模式 刷写前必须切到扩展会话或编程会话
0x27 安全访问 解锁ECU的刷写权限 需要种子密钥算法,不同ECU算法不同
0x31 例程控制 执行擦除、校验等操作 擦除Flash时不能断电,否则变砖
0x34 请求下载 告诉ECU我要写数据了 要指定地址和长度,不能越界
0x36 传输数据 实际传输刷写数据块 每包数据大小有限制,CAN一般是8字节
0x37 请求退出传输 结束数据传输 必须发送,否则ECU会一直等待

嗯,这里要注意一点。UDS的刷写流程不是随便调用的。它有一个严格的顺序:先切会话,再安全解锁,然后擦除,接着下载,最后校验。顺序乱了,ECU会直接拒绝。

警告:千万不要在擦除Flash的过程中断电!我曾经在实验室里测试,不小心踢掉了电源线,结果那块ECU再也连不上了。后来只能用JTAG重新烧写Bootloader才救回来。

下面这张图,是我自己总结的UDS刷写核心流程。你看一眼,基本就明白刷写是怎么回事了。

UDS刷写核心流程 1. 诊断会话控制 (0x10) 2. 安全访问 (0x27) 3. 例程控制-擦除 (0x31) 4. 请求下载 (0x34) 5. 传输数据 (0x36) 循环 6. 请求退出传输 (0x37) 7. 例程控制-校验 (0x31) 关键说明 • 步骤1-2:建立会话与权限 • 步骤3:擦除目标Flash区域 • 步骤4-6:传输新软件数据 • 步骤7:校验数据完整性 避坑提醒 • 步骤3和7不能断电 • 步骤5每包数据不能超限

你看,整个流程就像过五关斩六将。每一步都有对应的响应码,如果ECU返回了否定响应(NRC),你就得停下来排查问题。

举个例子,安全访问这一步,ECU会先发一个种子(Seed),诊断仪要用密钥算法算出密钥(Key)发回去。如果算法不对,ECU会回复0x35(无效密钥),刷写就进行不下去了。我遇到过最头疼的情况是,同一个供应商的不同项目,种子密钥算法居然不一样,调试时得一个一个试。

至于DoIP,它和CAN上的UDS本质是一样的,只是传输层换成了以太网。DoIP的优势很明显:速度快,能传大文件,而且支持同时连接多个ECU。但缺点也有——对网络环境要求高,延迟不稳定。我在做DoIP刷写时,就遇到过因为交换机缓存不够,导致丢包重传,刷写时间反而比CAN还长的情况。

一句话总结:UDS是刷写的“语言”,CAN和DoIP是“交通工具”。语言一样,但交通工具不同,体验和效率天差地别。

好了,第一章的内容就到这里。ECU刷写不是什么神秘的技术,说白了就是按照UDS的规矩,一步一步把数据写进去。但每一步都有坑,后面我们会一个一个填。