本篇文章主要介绍在ISO 14229-1标准中定义的UDS服务——$85 ControlDTCSetting,其为Tester提供了控制目标ECU恢复/停止DTC记录的能力。
目录
1 服务介绍
$85服务用于让ECU停止或恢复对DTC状态位的更新。当用$19 ReadDTCInformation服务的特定子功能读取ECU的DTC信息时,DTC状态位被记录于该服务的肯定响应的statusOfDTC参数中。
在正常情况下,ECU的故障检测功能模块会根据故障检测结果实时更新每个DTC的状态(记录在对应的DTC状态位中),而$85服务则可用来停止或恢复DTC状态位更新。
关键点:
- 该服务支持功能寻址,可控制单个ECU或多个ECU的DTC状态位更新。
- 当ECU接受了子功能DTCSettingType = off的$85服务诊断请求时,ECU应暂停对DTC状态位的任何更新,即冻结DTC状态位。
- 该服务需要在非默认诊断会话下执行,若ECU因诊断会话超时或reset等原因重新回到了默认诊断会话,则该服务的功能也会恢复到默认值,即恢复对DTC状态位更新。
- 若client对ECU发送$85服务的停止DTC状态位更新的诊断请求时,ECU已处于停止DTC状态位更新状态,则其应回复肯定响应; 若client对ECU发送$85服务的恢复DTC状态位更新的诊断请求时,ECU已处于恢复DTC状态位更新状态,则其应回复肯定响应。
- 当ECU收到了$14 ClearDiagnosticInformation服务请求后,即使其处于停止DTC状态位更新状态,也需要重置ECU的DTC状态位。
- 当通过$85服务控制ECU停止DTC状态位更新时,ECU的故障检测功能模块应正常工作,其仅不在继续更新DTC状态。
该服务通常和$28 CommunicationControl服务一起使用。例如,在进行ECU刷写之前,为了获得更快的数据传输速度,可以用$28服务把该ECU的所有通信关闭,但此时因收不到相关报文,ECU和其对手件ECU会没必要地存储很多DTC,这时就可以使用$85服务停止ECU对DTC状态位更新,刷写完成之后再重新恢复ECU对DTC状态位更新即可。
2 服务数据格式
2.1 请求数据格式
以下是$85服务的请求数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | ControlDTCSetting SID | 0x85 | 必选 |
#Byte2 | sub-function = [DTCSettingType] | 0x00 – 0xFF | 必选 |
#Byte3 – #ByteN | DTCSettingControlOptionRecord[] = [parameter#1 : parameter#n] | 0x00 – 0xFF | 可选 |
2.1.1 DTCSettingType
DTCSettingType是$85服务的sub-function参数,用于指示ECU应停止或恢复对DTC状态位的更新,其具体定义如下表所示:
DTCSettingType | Description |
---|---|
0x00 | ISOSAEReserved |
0x01 | on 此参数用于指示ECU恢复对DTC状态位的更新 |
0x02 | off 此参数用于指示ECU停止对DTC状态位的更新 |
0x03 – 0x3F | ISOSAEReserved |
0x40 – 0x5F | 车辆制造商规定 |
0x60 – 0x7E | 系统供应商规定 |
0x7F | ISOSAEReserved |
2.1.2 DTCSettingControlOptionRecord
该record是用户可选的,当控制DTC状态位更新停止或恢复时,用于将数据传递给ECU,该数据可以指示要停止或恢复的DTC列表等其他有关信息。
2.2 肯定响应数据格式
以下是$85服务的肯定响应数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | ControlDTCSetting SID + 0x40 | 0xC5 | 必选 |
#Byte2 | sub-function = [DTCSettingType] | 0x00 – 0x7F | 必选 |
2.2.1 DTCSettingType
DTCSettingType是对应$85服务请求报文中的DTCSettingType参数回显。
2.3 否定响应数据格式
以下是$85服务的否定响应数据格式:
字节序 | 参数 | 字节值 | 说明 |
---|---|---|---|
#Byte1 | Negative Response SID | 0x7F | 必选 |
#Byte2 | ControlDTCSetting SID | 0x85 | 必选 |
#Byte3 | NRC | supportedNRC | 必选 |
supportedNRC的可选值如下表所示:
supportedNRC | NRC define | 描述 |
---|---|---|
0x12 | sub-functionNotSupported | ECU不支持该诊断请求服务的子功能 |
0x13 | incorrectMessageLengthOrInvalidFormat | 诊断请求指令的长度或格式不对 |
0x22 | conditionsNotCorrect | 执行诊断的条件不满足 |
0x31 | requestOutOfRange | 诊断请求参数超出范围或DID/RID不支持 |
3 服务通信示例
3.1 停止DTC状态位更新
本例展示了Tester如何通过$85服务停止ECU对DTC状态位的更新,其中,存在以下条件:
sub-function bit7: SPR = 0
3.1.1 请求报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | ControlDTCSetting SID | 0x85 |
#Byte2 | sub-function = [DTCSettingType = off] | 0x02 |
3.1.2 肯定响应报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | ControlDTCSetting SID + 0x40 | 0xC5 |
#Byte2 | sub-function = [DTCSettingType = off] | 0x02 |
3.2 恢复DTC状态位更新
本例展示了Tester如何通过$85服务恢复ECU对DTC状态位的更新,其中,存在以下条件:
sub-function bit7: SPR = 0
3.2.1 请求报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | ControlDTCSetting SID | 0x85 |
#Byte2 | sub-function = [DTCSettingType = on] | 0x01 |
3.2.2 肯定响应报文
字节序 | 参数 | 字节值 |
---|---|---|
#Byte1 | ControlDTCSetting SID + 0x40 | 0xC5 |
#Byte2 | sub-function = [DTCSettingType = on] | 0x01 |