1.1刷写包含以下三个步骤:预编程,编程,后编程
1.2预编程步骤
此步骤是保证能够正常进入编程(10 02)会话下。
(1)如果无特殊要求,只保证刷写能够正常进行,直接从10 03(扩展会话)进入10 02(编程会话),不需要加入其他诊断服务。
(2)如果需要确保刷写过程中,不影响其他ECU,则需要加入28,85,31服务进行。
? ? ? ? 28服务禁止总线上报文输出,减低总线负载,保证刷写过程正常进行(总线负载较高时,刷写可能无法正常运行,诊断ID优先级较低,可能存在无法发送)。
? ? ? ?85服务禁止DTC状态位更新,刷写过程中,APP报文无法发送,可能会触发通信类DTC,此情况是在刷写过程中不期望遇到,使用85服务可以禁止DTC状态位更新,可不引入新的DTC。
? ? ? 31服务主要是保证,在异常情况下,不能够执行刷写操作。(此过程可选)
1.3编程步骤
此步骤是保证能够将S19/Bin/Hex文件正确下载进入ECU。
(1)在刷写过程中,可以写入指纹信息,来记录版本刷写日志(此过程可选)
(2)刷写主要过程分为:擦除内存,请求下载,软件下载,请求刷写退出,以及检查版本校验
(3)软件下载完成后,需要使用11服务进行复位(从10 02(编程会话)进入10 01(默认会话))
1.4后编程步骤
此步骤是保证软件下载之后,能够将之前85,28服务所关闭的功能打开(针对所刷写的ECU来说,在编程步骤结束后此功能立刻恢复;针对其他ECU来说使用后编程步骤,恢复之前所禁止功能)
2.1预编程步骤
2.1.1 10服务
10 03:主要是给31,28,85,以及进入10 02提供环境。
2.1.2 85服务
85 02:禁止DTC标志位更新。
2.1.2 28服务
28 03 01:禁止总线上APP报文发送,这一步应该在85 02之后执行,禁止DTC更新。
2.1.3 10服务
10 02:从扩展会话进入编程会话,给刷写提供会话环境。
2.2编程步骤
2.2.1 27服务
27 xx(xx:boot下定义的解密等级):请求seed,
27 xx+1 yy yy ……(yy:根据seed计算的key)
请求:27 01?
返回:67 01?xx?xx?xx?xx(返回4byteseed)
请求:27 02?xx?xx?xx?xx(根据seed计算的4byte?key)
返回:67 02
2.2.2 34服务
34 00 44 xx xx xx xx(4byte 地址) yy yy yy yy(4byte?数据长度):请求擦除所需要下载的区域
请求:34 00 44 01 01 01 01 11 11 11 11(请求擦除起始地址:01010101,长度为11111111的区域)
返回:74 40?xx?xx?xx?xx(4byte?可下载数据最大长度,根据40的来判断后面使用字节)
2.2.3 36服务
36 xx(xx:请求下载的块序列号):请求数据下载?
块序列请求模式:36 01~36 FF,36 00~36 FF(后续以36 00~36 FF进行循环)?
请求:36?xx(xx:01~FF,00~FF)
响应:76?xx
2.2.4 37服务
37:请求下载退出
2.2.5 31服务
31 01 xx xx(RID) yy yy yy yy(校验值):判断刷写过程中,上位机传输与ECU中下载数据是否一致
请求:31 01 FF FF 01 01 01 01
返回:71 01 FF FF
2.2.6 11服务
11 01:刷写完成后,使用11 01进行硬复位,从而进入app中运行软件
2.3后编程步骤
2.3.1 10服务
10 03:为后续28 ,85提供会话环境
2.3.2 28服务
28 00 01:恢复APP通讯
2.3.3 85服务
85 01:开启DTC状态位更新,此步骤要在28服务之后,确保在刷写中不产生新的DTC
以上是UDS刷写步骤,执行完成可将软件刷写入ECU中。