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做对比,一致则校验通过,不一致则校验失败。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诊断协议(四)
大家有什么问题欢迎评论区交流,谢谢关注~
欢迎点击下方合集,查看合集中更多文章~