前言:本篇文章主要介绍在ISO 14229-1标准中定义的UDS服务——$11 ECUReset,其为Tester提供了控制目标ECU强制执行复位的能力。
目录
0 预备知识
从事汽车行业的朋友可能会听到过“15电”、“30电”等行业术语,其实它们分别是指在汽车电气系统中常见的电气连接点标识KL15与KL30,主要用于描述汽车电气系统的不同电源来源:
- KL15:这个标识代表“点火开关供电”(Ignition Switch Power)。当点火开关处于“ON”或“ACC”位置时,KL15端子会提供电源。这通常用于点火系统和一些车内设备,如音响系统、导航仪等,这些设备在点火开关打开时才会有电源供应。
- KL30:这个标识代表“常电供电”(Constant Power)。KL30端子是直接连接到车辆电池正极的,可以提供持续的电源,无论点火开关是否开启。这种电源通常用于需要保持常电源的设备,如汽车的时钟、报警系统、空调系统、灯光或一些带有记忆功能的设备。
1 服务介绍
$11 ECUReset诊断服务即ECU复位服务,Tester可利用该服务请求目标ECU强制执行复位操作。
关键点:
- 在ECU执行复位之前,ECU应先回复肯定响应给Tester
- 在ECU执行复位之后,ECU应该处于默认会话(defaultSession)
- 在ECU回复肯定响应后,到执行复位之前,ECU不应接收任何请求消息,也不应发送任何响应消息
$11服务在汽车研发过程中经常会被用到,其主要应用场景如下所示:
- 通过$11服务重启ECU,使被刷写过新软件的ECU恢复到初始状态
- 通过$11服务重启ECU,使KL30供电的ECU走下电流程从而保存一些只有下电时才能存储的数据
- 通过$11服务重启ECU,使得输入的相关标定参数生效
- 通过$11服务,使KL30供电的ECU快速休眠
2 服务数据格式
2.1 请求数据格式
以下是$11服务的请求数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | ECUReset SID | 0x11 | 必选 |
#Byte2 | sub-function = [resetType] | 0x00 – 0xFF | 必选 |
2.1.1 resetType
resetType是$11服务的sub-function参数,用于指示ECU执行不同类型的复位操作,其具体定义如下表所示:
resetType | 描述 |
---|---|
0x00 | ISO保留 |
0x01 | 硬复位(hardReset) 用于指示ECU模拟直接掉电,然后上电的重启,这可能导致VM和NVM被重新初始化。其主要用于需要ECU彻底复位的场景,如刷写之后的复位。 |
0x02 | 点火开关复位(keyOffOnReset) 用于指示ECU模拟点火开关从off至on的重启。通常NVM里面的数据会被保留,而VM里面的数据将被重新初始化。 |
0x03 | 软重启(softReset) 效果同上,只是复位没有那么彻底。在无需初始化任何数据的情况下,重置PC指针重新运行应用程序,即RAM中的数据不会被重置。 |
0x04 | 使能快速休眠(enableRapidPowerShutDown) 用于指示ECU开启快速休眠功能,该子功能只适用于KL30供电的ECU。 通常情况下,此类ECU在车辆下电后,会在一段时间内进入电源关闭状态。而在使能快速休眠后,此类ECU在车辆下电后,则不会进入电源关闭状态,而是进入休眠状态,这意味着,虽然车辆下电了,但ECU仍然可以被唤醒(由电池供电),但会有一定功耗。 |
0x05 | 抑制快速休眠(disableRapidPowerShutDown) 用于指示ECU关闭以前使能的快速休眠功能。 |
0x06 – 0x3F | ISO保留 |
0x40 – 0x5F | 车辆制造商自定义 |
0x60 – 0x7E | 系统供应商自定义 |
0x7F | ISO保留 |
2.2 肯定响应数据格式
以下是$11服务的肯定响应数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | ECUReset SID + 0x40 | 0x51 | 必选 |
#Byte2 | sub-function = [resetType] | 0x00 – 0x7F | 必选 |
#Byte3 | powerDownTime | 0x00 – 0xFF | 可选a |
- a:该参数只有当resetType = enableRapidPowerShutDown(0x04)时才会出现
2.2.1 resetType
resetType是对应$11服务请求报文中的resetType参数回显
2.2.2 powerDownTime
该参数向Tester指示,当车辆下电后,ECU保持待机状态的最小时间,也即ECU进入休眠状态的最短时间。
该参数长度为一个字节,分辨率为1s。
- 0x00 – 0xFE:0 – 254 秒
- 0xFF:表示故障或时间不可用
2.3 否定响应数据格式
以下是$11服务的否定响应数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | Negative Response SID | 0x7F | 必选 |
#Byte2 | ECUReset SID | 0x11 | 必选 |
#Byte3 | NRC | supportedNRC | 必选 |
supportedNRC的可选值如下表所示:
supportedNRC | NRC define | 描述 |
---|---|---|
0x12 | sub-functionNotSupported | ECU不支持该诊断请求服务的子功能 |
0x13 | incorrectMessageLengthOrInvalidFormat | 诊断请求指令的长度或格式不对 |
0x22 | conditionsNotCorrect | 执行诊断的条件不满足 |
0x33 | securityAccessDenied | 不满足安全策略 |
3 服务通信示例
3.1 ECU硬复位
本例展示了Tester通过$11服务请求ECU执行硬复位(hardReset)的流程,其中,存在以下条件:
- sub-function bit7: SPR = 0
3.1.1 请求报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | ECUReset SID | 0x11 |
#Byte2 | sub-function = [resetType = hardReset ] | 0x01 |
3.1.2 肯定响应报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | ECUReset SID + 0x40 | 0x51 |
#Byte2 | sub-function = [resetType = hardReset ] | 0x01 |