在学习了这么多的服务之后,我们就可以正式开始学习程序烧写流程这一环节了。根据ISO14229提供的文档或者网上的很多资料都能知道,程序烧写可以分为三大流程:预编程阶段,编程阶段,后编程阶段。本文也是根据这三大流程进行一步步的分析的。
预编程阶段
预编程阶段的功能是使ECU进入到刷写状态。首先我们要进入到扩展模式,使用的是10服务中的03子服务进入到扩展模式。
切换扩展模式: 02 10 03 XX XX XX XX XX (10表示切换模式,03表示扩展模式)
之后设置禁止故障码,则使用的是85服务中的02子服务来关闭ECU存储DTC的功能。
禁止故障码: 02 85 02 XX XX XX XX XX (85表示DTC,02表示OFF)
之后是使用28服务的03子服务表示关闭非刷写数据流,同时使用01参数表示关闭的通讯类型为普通应用报文。(预编程的必须进行的三步,其他步骤可选)
关闭刷新数据: 03 28 03 01 XX XX XX XX (28表示通讯控制,03表示关闭接收和发送,0x1代表普通应用报文)
编程阶段
编程阶段要对原来的程序进行擦除,如图,首先要进入编程(刷新)模式。
切换编程模式: 02 10 02 XX XX XX XX XX (10表示切换模式,02表示编程模式)
进入编程模式之后,就需要进行解锁了。解锁的步骤就是向控制器发生请求“seed”,然后控制器回复“seed”对应的数据。诊断仪对回复的数据加上自己预设的密码之后再回复给控制器,控制器校验成果后就可以进入下一步了。安全校验需要算法才能进行,因此具体怎么回复不同控制器都不一样。参考文章
安全校验: 02 27 05 XX XX XX XX XX XX (27表示安全服务,05表示seed)
在完成安全验证之后,就要对控制器的应用区进行擦除了。擦除使用的是0x31服务。值得注意的是,在这里需要使用到多帧传输模式。多帧传输中,首诊的前两位被ISO15765占用了。同时有一个addressAndLengthFormatIdentifier,用于指示后面两个部分所占用的字节,高4bit表示memorySize所占的字节长度,低4bit表示memoryAddress
擦写控制器 10 0D 31 01 FF 00 44 XX (10中的1表示首帧,后面的D表示有效数据位数为13位,31表示31号服务,01表示开启服务,FF与后面的00表示擦除服务,44翻译成中文为地址与数据标识,XX表示地址的高两位)
连续帧 21 XX XX XX YY YY YY YY (XX表示地址,YY表示数据的大小)
在擦除完数据后,就是开始传输数据了,首先我们要设置上传数据的大小以及地址。
请求上传数据 10 0B 34 00 44 XX XX XX (10中的1表示首帧,后面的D表示有效数据位数为11位,34表示请求上传数据服务,00表示数据格式未加密,,44翻译成中文为地址与数据标识,XX表示地址高位)
连续帧 21 XX YY YY YY YY (XX表示地址,YY表示数据从高到底的大小)
这时候控制器会回复一串数据,用来表示块大小,表示一次性能够上传多少组数据。
之后便是使用36服务进行传输数据 了,这一部分涉及到大量的数据,因此在这里也无法完全写出来。使用完36服务后再通过37服务进行检查后就完成数据传输。(34服务可以一次性请求,然后通过多帧传输不停传输数据就好)
数据校验 02 37 00 (37表示进行数据校验,00表示校验mode)
以上就是编程阶段的数据代码简介,如果有什么问题,以后再进行补充。
后编程阶段
后编程阶段功能就是重启控制器然后将诊断对话切换为正常模式。