《UDS协议从入门到精通》系列——图解0x85:控制DTC的设置
Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快速了解他们。(各服务介绍持续更新中…)
学习UDS基础知识以及其他相关内容?>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<
一、简介
1.1 功能简述
关于DTC(diagnostic trouble code,诊断故障码)的具体含义可以先浏览0x19服务。在正常情况下,服务端(目标ECU)的故障检测功能模块会根据故障检测结果实时更新每个DTC的状态。而该服务就是让目标ECU停止或者恢复DTC状态位的更新。
1.2 常见应用场景
这个服务通常和0x28服务一起使用,比如在开始写参数之前,为了获得更快的传输速度我们使用0x28服务把所有ECU的通信给关闭了,但此时很多ECU由于收不到相关报文,会没必要地存储很多DTC,这时如果我们使用0x85服务把ECU存储DTC的功能暂时性地禁用掉,则不会产生这种麻烦。
最常见的应用场景就是在用UDS进行ECU软件刷写时,由于刷写通常是针对某一个ECU单独进行的,此时其他ECU正常工作,因此应当通过功能寻址发送给其他各个ECU请求他们停止更新/记录DTC状态,待刷写完成后再启用状态更新即可。
1.3 注意事项
① 当目标ECU接收到0x85请求后,如果控制信息是请求关闭DTC状态更新,则目标ECU应该立即停止DTC的状态更新。即从此刻起,DTC的状态信息保持不变,无论是发生了新的故障,还是已有的故障有了新的状态,目标ECU中的DTC数量、状态信息都不会更新。如果控制信息是启用更新,那么如果先前是关闭状态,就立即恢复到正常的状态,如果先前就是启用更新的状态,则保持状态不变。
② 无论是启用还是禁用状态更新,目标ECU在正确处理请求之后都要给出肯定响应,如果无法正确处理,需要给出否定响应并明确响应失败的NRC。
>>>>>>>>>>>>>>> 一些使用提示 <<<<<<<<<<<<<<<:
- 该服务需在非默认会话状态下才受支持,当ECU重回到默认回话模式时,该服务的功能就会恢复到默认状态,即恢复启用DTC更新状态。
- 虽然该服务控制DTC状态更新的使能/失能,但并不影响通过0x14服务(ClearDTCInformation)请求清除故障信息。
- 如果某event没有对应DTC(没有mapping DTC),那0x85请求不会对这个event做任何处理,因为该服务基本对象是DTC 。
- 如果某event触发安全行为,这时执行0x85请求以及0x14请求清除了DTC,那这个安全行为可能就失效了,这种情况下建议触发的安全行为不应该被同步抑制。
二、数据包格式
2.1 服务请求格式
DTCSettingType取值及含义如下表所示:
DTCSettingType | 含义 |
---|---|
0x00 | 保留 |
0x01 | 启用DTC状态更新 |
0x02 | 禁用DTC状态更新 |
0x03 - 0x3F | 保留 |
0x40 - 0x5F | 整车厂商自定义 |
0x60 - 0x7E | 系统供应商自定义 |
0x7F | 保留 |
DTCSettingControlOptionRecord:一般这个参数不使用,可以设置为传递需要控制的DTC列表之类的。
2.2 服务响应格式
2.2.1 肯定响应
DTCSettingType的取值与请求中的值保持一致即可。
2.2.2 否定响应
可能出现的NRC及其含义如下:
NRC | 含义 |
---|---|
0x12 | 子功能参数不受支持 |
0x13 | 消息长度错误 |
0x22 | 不满足请求标准/条件 |
0x31 | 参数错误,请求中携带的数据是无效的 |