1.ECU的启动顺序
ECU上电或者复位后,Bootloader代码首先被执行。Bootloader执行基本的初始化,检查是否有外部重编程请求。如果没有外部重编程请求,检查应用程序的状态。如果应用程序有效,ECU执行应用程序,如果应用程序无效,ECU继续执行Bootloader,且Bootloader的默认会话被激活。
1.诊断会话
传统ECU的诊断会话包括默认会话模式,扩展会话模式和编程模式。
ECU在扩展会话执行有效的应用程序,编程会话请求可激活Bootloader,因此,应用程序应设置外部重编程请求标志并复位,复位后直接进入Bootloader的编程会话。
Bootloader不支持从编程会话切换至扩展会话。
2.升级步骤
ECU的刷新升级列分为预编程步骤、编程步骤和后置编程步骤三个步骤
2.1.预编程步骤
1. ECU重编程前需要禁止DTC设置和网络常规通信,因此,使用功能寻址发送扩展会话诊断$10$03请求使网络中所有ECU进入扩展会话。
2.重编程前需要检查系统的重编程条件。此例程控制服务用于检查系统的状态是否为安全状态。此诊断服务必须响应。(例如:重编程条件要求车速为0Km/h、ECU处于正常工作电压状态下,其他编程条件由车厂确定,ECU实现。)
3.重编程过程中为了避免误报故障,应该关闭网络中所有ECU的DTC检测和存储功能。使用功能寻址发送DTCSettingType为“OFF”的ControlDTCSetting诊断服务请求。
4.通信控制服务用于禁止网络上所有ECU非诊断报文的发送和接收。因此,使用功能寻址发送此诊断服务。
5.通过标识符读取数据是可选服务,用于获取ECU相关信息。
2.2. 编程步骤
编程步骤用于编程一个或多个逻辑块,此步骤的所有诊断服务都使用物理寻址。如果编程步骤中发生错误,则应重新执行完整序列。
1. 当ECU运行在应用程序的扩展会话中,收到诊断会话控制服务($10 $02)后应判断是否允许跳转到编程会话,具体是判断是否已经执行例程控制 “预编程条件检查”($31 $01 )并且响应为肯定响应,如果不是,ECU应拒绝进入编程会话,如果是,应用程序应设置外部重编程请求标志并发送否定响应,然后,ECU通过复位的方式跳转到Bootloader,并Bootloader发出肯定响应,肯定响应发送成功后激活Bootloader的编程会话。当ECU运行在Bootloader程序的扩展会话中,收到诊断会话控制服务($10 $02)后直接回复肯定响应,并进入编程会话。
2.在Flash重编程之前,需要经过ECU安全认证。安全访问服务子功能$11请求种子,使用$12发送密钥。
3.通过$2E$F184写入指纹信息应存储在ECU的非易失性存储器中。该指纹信息使用“通过标识符写数据”服务写入ECU。
4.例程控制-启动擦除内存$31 $01 $FF00。
5.逻 辑 块 的 所 有 段 的 数 据 通 过 $34(RequestDownload),$36(TransferData),$37(RequestTransferExit)服务下载到ECU。
6.通过$31 $01 $0201 启动完整性校验例程,确保下载数据的完整性(真实性)。
7.发送 $31 $01 $FF01启动编程依赖性检查。例程执行后,需将检查结果反馈给DPC或者诊断仪.
2.1.后置编程步骤
1.发送$11 $01进行ECU 复位.ECU复位服务用于结束Flash重编程使ECU进入正常的操作模式。
2.进入扩展模式发送$10$03.
3.发送$28 $00 $01诊断服务,恢复网络正常通信。
4.发送$85 $01诊断服务,恢复网络正常DTC设置。
5.发送$10 $01诊断服务,使网络上的ECU返回默认会话。