乐于分享
好东西不私藏

UDS诊断协议(十七)ECU软件刷写流程(更新)

UDS诊断协议(十七)ECU软件刷写流程(更新)
之前介绍的ECU软件刷写流程,大家比较关注。今天补充一下流程图和一些具体描述,更新一下。感兴趣的朋友可以收藏转发。
ECU刷写流程主要包括预编程步骤、编程步骤、后编程步骤三个部分:
预编程步骤,主要用来做软件刷写前的数据通道打通、软件刷写环境的检查和准备;
编程步骤,是软件刷写的主要步骤,包含了ECU内存中旧数据的擦除、新软件数据的下载、下载数据的完整性校验;
后编程步骤,主要作用是软件刷写完成后车辆状态的恢复,确保整车ECU恢复到正常工作状态。
我们以一段实际CAN报文log来详细介绍下整个刷写流程。(本示例为基于内存地址管理的ECU、通过CAN总线刷写、不包含自回滚机制)
预编程步骤
预编程步骤流程图
1、刷写前通过22服务读取ECU的软件版本号、零件号等信息进行状态确认。可选的步骤,根据实际需求来定。
2、功能寻址10 03,让整车ECU都进入扩展会话,为后续发送28、85等服务做准备。另外,为了维持ECU的扩展会话,诊断仪需周期发送3E 80,一般2~4秒为周期发送。
3、通过31例程服务对被刷写ECU的编程条件进行检查,确保软件刷写过程的安全。具体检查内容自定义,一般包括车速、电压等。
4、功能寻址发送85 02,关闭所有ECU的故障码设置功能,防止软件刷写过程中ECU误报故障码。
5、功能寻址发送28 03 01,禁用非诊断通信。让CAN总线带宽尽量全部用于诊断刷写,提高刷写速度。

编程步骤

编程步骤流程图
1、物理寻址给被刷写ECU发送10 02。被刷写ECU会将内存中的刷写请求标志位置1,然后重新初始化,初始化后进入BOOT软件的编程会话中。
2、物理寻址发送27服务,解锁被刷写ECU的安全访问保护,为后续数据传输相关服务做准备。
3、物理寻址发送2E服务,写入指纹信息,包括诊断仪编号、刷写时间等,用于后期刷写记录查询。可选步骤。
4、通过34/36/37服务下载flash driver(内存擦写的驱动程序,只有激活该驱动才能对ECU内存中旧的软件进行擦除)。下载完成后使用31例程服务进行完整性校验,保证数据传输完整。
关于数据完整性校验的方法,不同厂家选择不同,例如CRC32循环冗余校验算法、SHA256哈希算法等标准算法,或者厂家自定义的算法。总体思路是:
①将原始软件包根据算法计算出的校验值1,存放在软件包数据中,或者软件包的附加信息中;
②刷写时,ECU将下载到的软件包数据根据同样算法计算出校验值2;
③诊断仪提取软件包中的校验值1,通过31服务完整性校验例程发给ECU;
④ECU将校验值2和校验值1做对比,一致则校验通过,不一致则校验失败。
5、物理寻址31服务,擦除待刷写部分内存的数据。
6、通过34/36/37服务进行数据下载。
7、下载完成后使用31例程服务进行完整性校验,保证数据传输完整。
8、将所有软件包都下载完成后,使用31服务进行软件兼容性验证。可选步骤。
有些ECU中不止一个软件层级,比如同事存在应用软件、标定软件等等,兼容性验证用来确保各个软件层级版本相匹配,避免功能异常。具体验证方法一般由ECU软件厂家自定义。

后编程步骤

后编程步骤流程图
1、功能寻址11 01,整车所有ECU硬复位,重新进入应用软件的默认会话,解除DTC设置的抑制和非诊断报文收发的抑制。
总结
以上,所有CAN总线类型的ECU软件刷写都可参考以上流程,不同厂家具体步骤有所不同,但万变不离其宗。
CANFD类型的ECU,每帧报文携带的数据更多,主要是传输层和数据链路层有差别,但涉及的诊断服务流程都是一样的。后面讨论传输层和数据链路层时再细聊。
-----------------------------------------------------

刷写流程中涉及的诊断服务,我们前面文章都介绍过具体的请求和响应格式,敬请翻阅~

UDS诊断协议(十二)详解上传下载功能单元中的0x34、0x36、0x37服务

UDS诊断协议(十一)详解例程控制-0x31服务

UDS诊断协议(六)-0x28服务、0x3E服务和0x85服务

UDS诊断协议(五)

UDS诊断协议(四)

大家有什么问题欢迎评论区交流,谢谢关注~

欢迎点击下方合集,查看合集中更多文章~