随着OTA的普及,以及最近几年车载行业的蓬勃发展,越来越多的ECU都在支持刷写升级,刷写分为CAN/CANFD刷写、路由刷写、DoIP刷写等(LIN刷写除外);然而无论是哪种刷写模式几乎都无法避开$34、$36、$37这三个服务,因此今天我们暂不讲完整的刷写流程,先来认识一下这3个服务的功能用途及组成。
34服务
功能:获取DUT支持的单次刷写命令的最大长度
命令格式(请求&应答):
诊断请求:
#1:34服务
#2:dataFormatIdentifier,一般使用默认值00;高四位表示Compression Method,第四位表示Encryping Method;一般都未使用,使用默认值
#3:addressAndLengthFormatIdentifier,高四位(bit7-4)memorySize代表长度;低四位(bit3-0)表示memory Address的长度。
#4:memoryAddress,开始刷写(下载)的起始位置地址
#5:memorySize,从开始刷写到刷写结束的文件长度。
肯定应答:
#1:对34服务肯定应答74
#2:lengthFormatIdentifier,高四位表示参数maxNumberOfBlockLength的长度,低四位为保留位。
#3...:maxNumberOfBlockLength,表示用户每次传输数据的请求中包含的最大字节数。
否定应答:
36服务
功能:诊断刷写进行数据传输
命令格式(请求&应答):
诊断请求:
#1:36服务
#2:blockSequenceCounter,变化规律为36 01 - 36 02 ··········· 36 FF 36 00 - 36 01 ········ 36 FF - 36 00 - 36 01 ········ 36 FF ···········直到刷写结束。
#3 ··· n:transferRequestParameterRecord,代表每次要刷写到DUT的数据内容。
肯定应答:
#1:对36服务肯定应答76
#2:blockSequenceCounter,对应36服务请求的blockSequenceCounter。
例如:36 01 + data
76 01肯定应答
否定应答:
37服务
功能:请求结束刷写
命令格式(请求&应答):
诊断请求:
#1:37服务
#2 ··· n:transferRequestParameterRecord,由主机厂定义,一般只需发送37即可,不带任何参数,不过实际情况可能要根据各个主机厂定义。
肯定应答:
#1:对37服务肯定应答77
#2 ··· n:transferRequestParameterRecord,由主机厂定义,一般只需发送37即可,不带任何参数,不过实际情况可能要根据各个主机厂定义。
例如:37
77 肯定应答
否定应答: