一、服务概述
Client端使用Routine Control服务来执行定义的步骤序列并获取特定序列的相关结果。该服务有极大的灵活性。Service31的典型用途可以包括擦除内存、重置定义的数据、覆盖正常服务控制策略以及控制ECU值随时间变化的功能。
通过Service31可以启动特定序列、停止运行该特定序列、请求运行结果。该服务以往常用于ECU在做Software Update时,应用于检查刷写条件是否满足、传输数据完整性以及独立性检测。
二、报文
1.请求报文定义
第二个字节定义如下:
第3、4字节routineIdentifier表示指定的程序ID;这些特定的程序信息一般由车厂规定释放;一般会在诊断调查表中体现。比如针对ECU的升级,一般需要指定以下几个特定的程序功能(具体ID由车厂规定):
程序名 | 程序名 |
---|---|
CheckProgrammingPreconditions(编程条件检查) | 该程序用于对ECU升级条件(如车速信息等)的判断,在ECU的BootLoader与APP程序中一般都要有该程序功能的定义。一般用于进入编程会话之前 |
CheckAppSwAppDataValidity(检查数据的有效性,如CRC校验) | CheckAppSwAppDataValidity(检查数据的有效性,如CRC校验) |
CheckAppSwAppDataValidity(检查数据的有效性,如CRC校验) | 用于对此次升级要用到的内存空间进行擦除操作。一般用于请求APP数据下载(34服务)之前 |
用于对此次升级要用到的内存空间进行擦除操作。一般用于请求APP数据下载(34服务)之前 | 用于对此次升级要用到的内存空间进行擦除操作。一般用于请求APP数据下载(34服务)之前 |
常用系列
Service 31 01:开始执行Routine DID对应的例程;
Service 31 02:停止运行Routine DID对应的例程;
Service 31 03:请求Routine DID对应的例程运行结果
2.肯定响应
其中,routineStatusRecord是可选参数,用于在执行相应程序动作后,返回ECU相关的信息(如请求31 02服务请求停止时ECU可以通过该参数返回该程序总运行时间等信息);可根据实际需要进行使用;一般较少用到。
3.否定码
4.举例
发送:31 01 AC 05
回复:71 01 AC 05 00