汽车UDS诊断之清除诊断信息服务(0x14)深度剖析
作者:互联网
ClearDiagnosticInformation就是清除诊断信息服务,简单说客户端可以利用此服务来清除一个或多个服务端内存中的诊断信息。
目录
服务 | 描述 |
ClearDiagnosticInformation | 客户端请求服务端清除内存中的诊断信息。 |
1.英文术语
英文术语 | 翻译 |
ClearDiagnosticInformation | 清除诊断信息 |
ClearDiagnosticInformation Request SID | 清除诊断信息请求SID ISO14229定义此值为0x14 |
ClearDiagnosticInformation Positive Response SID | 清除诊断信息响应SID ISO14229定义此值为(0x14+0x40) |
2.缩写表
缩写 | 解释 |
SID | 服务标识符 |
Cvt | 约定值 C 有条件的 U 用户选项 |
NRC | 否定响应码 |
3.服务描述
清除诊断信息服务就是可以用来清除服务端相应诊断信息的操作,这个相应诊断信息是与groupOfDTC参数是对应的。
譬如:groupOfDTC[] = 0xFFFF33表示的是排放组,那么对应的诊断信息就是跟排放相关的,那么软件就需要将所有与排放相关的诊断信息清除;groupOfDTC[] = 0x000100此编号表示某一特定DTC,假设某一控制器厂家将此DTC定义为换挡位置传感器高于最大值,那么软件就需要将与换挡位置传感器高于最大值相关的诊断信息清除。
那么最重要的一点就是我们需要清除哪个地方的诊断信息呢?
- 如果服务端支持只存在RAM中,那么我们只要清掉RAM中的相关诊断信息就好了。
- 如果服务端支持诊断信息在内存中有多个副本,譬如:RAM中的一个副本(诊断信息)和EEPROM(考虑到下电保存)中一个副本(诊断信息),那么程序在运行过程中就存在RAM和EEPROM两个地方储存了诊断信息。则服务端应清除读取DTC信息状态报告服务(0x19)使用的副本,也就是这里的RAM中的一个副本。
那么为什么不顺便也更新一下EEPROM呢?
因为本身就有备份策略,在电源锁存阶段会触发更新其他副本,我们的EEPROM就是在这个阶段重新被RAM的副本数据更新了。
注:在电源锁存阶段如果受到干扰的情况下(例如:在电源锁存阶段电池断开),可能导致数据不一致。
3.1.诊断信息
在这个服务中的诊断信息就是与DTC相关的信息,包含以下:
- DTC状态字节(statusOfDTC);
- 捕获的DTC快照数据(DTCSnapshotData),此快照信息就是记录当时发生故障的一些状态信息,譬如:报过压故障,就会记录当时的电压值,报过流故障,就会记录当时的电流值;
- 捕获的DTC扩展数据(DTCExtendedData);
- 其他与DTC相关的数据,如:标志、计数器、定时器等。
3.2.groupOfDTC
4.请求消息定义
请求消息定义 | ||||
A_Data字节 | 参数名称 | Cvt | 字节值 | 助记符 |
#1 | 清除诊断信息请求SID | M | 0x14 | CDTCI |
#2 #3 #4 | groupOfDTC[] = [ groupOfDTCHighByte groupOfDTCMiddleByte groupOfDTCLowByte] | M M M | 0x00-0xFF 0x00-0xFF 0x00-0xFF | GODTC_ HB MB LB |
4.1.请求消息子功能定义
该服务不使用子功能参数。(肯定也没有抑制肯定响应位,因为没有子功能参数)
4.2.请求消息数据参数定义
请求消息数据参数定义 |
定义 |
groupOfDTC 此参数包含3字节的值,即groupOfDTCHighByte、groupOfDTCMiddleByte、groupOfDTCLowByte三字节,指的是要清除的DTC组(例如,动力、车身、底盘)或特定DTC。该参数特定组的值和范围定义在ISO14229-1附件D-D.1。 |
5.肯定响应消息定义
肯定响应消息定义 | ||||
A_Data字节 | 参数名称 | Cvt | 字节值 | 助记符 |
#1 | 清除诊断信息响应SID | M | 0x54 | CDTCIPR |
5.1.肯定响应消息数据参数定义
该服务在肯定响应消息中不使用数据参数。
6.否定响应消息定义
否定响应消息定义 | |||||
A_Data字节 | 参数名称 | Cvt | 字节值 | 助记符 | |
#1 | 否定响应SID | M | 0x7F | SIDNR | |
#2 | 清除诊断信息请求SID | M | 0x14 | SIDRQ | |
#3 | 否定响应码 | M | 0xXX | NRC_ |
6.1.否定响应码
此服务支持的否定响应码 | ||
否定响应码 | 描述 | 助记符 |
0x13 | 消息长度错误或格式无效 如果消息的长度错误,则应发送此否定响应码。 | IMLOIF |
0x22 | 条件不正确 如果服务端不满足条件,就无法清除储存在服务端中的DTC相关信息,则应返回此NRC。 | CNC |
0x31 | 请求超出范围 如果服务端不支持指定的groupOfDTC参数,则应返回此NRC。 | ROOR |
0x72 | 通用编程失败 如果服务端在写入存储器(根据地址写)时检测到错误,则应返回此NRC。 | GPF |
6.2.NRC评估序列
7.服务使用示例
7.1.示例#1-清除“排放相关系统”诊断信息
7.1.1.步骤1:请求清除排放相关诊断信息
客户端向单个服务端发送清除诊断信息请求消息。
清除诊断信息请求消息 | ||||
消息方向 | 客户端→服务端 | |||
消息类型 | 请求 | |||
A_Data字节 | 描述(所以值为16进制) | 字节值 | 助记符 | |
#1 | 清除诊断信息请求SID | 0x14 | CDTCI | |
#2 #3 #4 | groupOfDTC[] = [ groupOfDTCHighByte groupOfDTCMiddleByte groupOfDTCLowByte] | 0xFF 0xFF 0x33 | DTCHB DTCMB DTCLB |
注:groupOfDTC[] = 0xFFFF33,此DTC表示在ISO14229中定义表示的是排放组。
清除诊断信息响应消息 | ||||
消息方向 | 服务端→客户端 | |||
消息类型 | 响应 | |||
A_Data字节 | 描述(所以值为16进制) | 字节值 | 助记符 | |
#1 | 清除诊断信息响应SID | 0x54 | CDTCIPR |
7.1.2.操作汇总
步骤1:请求清除排放相关诊断信息
图解:
操作 | CAN报文 | 实体 | |||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ||
清除诊断信息请求 | 0x04 | 0x14 | 0xFF | 0xFF | 0x33 | 客户端 | |||
肯定响应 | 0x01 | 0x54 | 服务端 |
到这里我们的0x14服务基本学完了。
以上解释有没有解决大家的疑惑,如果还是觉得有疑惑的地方,欢迎大家踊跃提出,一起分享,共同进步!!!
有CSDN号的也可以帮忙点个关注,我会陆续更新其它UDS服务。
标签:UDS,定义,响应,清除,0x14,信息,诊断,服务端 来源: https://blog.csdn.net/qq_40242571/article/details/120737515