查看原文
其他

AUTOSAR诊断栈分析(三):DTC状态位

快乐的肌肉 汽车MCU软件设计 2024-03-08

目录

1.DTC状态位定义

2.DTC状态位迁移分析

2.1 testFailed2.2 testFailedThisOperationCycle2.3 pendingDTC 2.4 confirmedDTC  2.5 testNotCompletedSinceLastClear2.6 testFailedSinceLastClear  2.7 testNotCompletedThisOperationCycle2.8 warninglndicatorRequested

3.常见DTC 状态位一览

4.小结


1.DTC状态位定义

前面,我们详细描述了在AUTOSAR中Event的状态定义,实际上在AUTOSAR中DEM还支持ISO-14229-1 附录D中定义的UDS状态位,想必这个状态位,各位诊断工程师就非常熟悉了,该状态主要是用于定义DTC(Diagnostic Trouble Code )的状态,具体有如下8位:
bit
描述(缩写)
含义
0
testFailed(TF)置1表示最近一次测试故障
1
testFailedThisOperationCycle (TFTOC)置1表示当前操作循环上报过故障
2
pendingDTC (PDTC)置1表示当前或者上一完成的操作循环上报过故障
3confirmedDTC (CDTC)
置1表示故障已确认,存到NvM中
4
testNotCompletedSinceLastClear (TNCSLC)置1表示自上次清除后未完成测试
5testFailedSinceLastClear(TFSLC)
置1表示自上次清除后又上报过一次故障
6testNotCompletedThisOperationCycle(TNCTOC)
置1表示当前操作循环未完成测试
7
warningIndicatorRequested(WIR)
置1表示请求故障指示灯
值得一提的是,对于bit的使用,每家主机厂的定义都不太一样,有的会用到bit2、有的直接不使用,但是一般都是bit0和bit3配合使用,bit3作为历史故障,特别当bit0置1时,有些主机厂会直接将bit3置位,立即确认故障存储到NvM中。

2.DTC状态位迁移分析

那么回过头来,在DEM中是如何通过设置Event状态来影响UDS DTC status各个bit置位情况?我们挨个来分析。

2.1 testFailed

初始状态下,testFailed为“逻辑0”,开启测试后,分为如下情况:
1. 监视器设置Event状态为PASSED,testFailed = 0;
    示例:Dem_SetEventStatus(eventID,PASSED)
2. 监视器设置Event状态为FAILED,testFailed = 1;
    示例:Dem_SetEventStatus(eventID,FAILED)
3. testFailed = 1的情况下,监视器设置PASSED或调用清除诊断信息
 具体状态迁移如下图描述:值得注意是,该状态置1,DTC相关信息不一定会存到NvM里,还需要结合bit2、3;但是在AUTOSAR中勾选配置项 DemStatusBitStorageTestFailed,bit0的状态会被存到NvM。

2.2 testFailedThisOperationCycle

 这一比特就比较简单了,当前操作循环的测试失败,参考状态迁移如下:与bit0区别在于,该bit是报告当前操作循环里存在过故障,有可能这时候bit0已经置0了,但bit1仍旧置1,表示从当前操作循环或者从上次清故障后已经发现了一次故障。 

2.3 pendingDTC 

pengdindDTC理解起来相对抽象,准确讲它是处于 testFailed和confirmedDTC的一种中间状态。如下图:标准上解读,该bit的设置条件与TFTOC一样,清除条件区别在于TFTCO是操作循环开启后清0,PDTC是需要操作循环完成、至少上报过一次PASS且没有任何失败清0,此外调用故障清除也可以清0。可以这样理解,该bit用于检测到某个故障,但是还没有达到确认条件,因此出现了这么一种中间状态。但实际上开发中,遇到的基本都是粗暴地有testFailed就立即确认。

2.4 confirmedDTC  

该状态位不管是开发还是售后应该都非常熟悉,该状态置位后DTC相关信息都会按指定顺序存到NvM中。既然是要存到NvM中,那么该bit置位的条件就比较严格,如下:
监视器调用 Dem_SetEventStatus(eventID,FAILED)且失败次数已经超过了确认阈值,该bit置1。需要提出的是,在AUTOSAR中有一个特定参数DemEventConfirmationThreshold,该使用case如下:

2.5 testNotCompletedSinceLastClear

该bit从字面意思可以很容易理解,即上次清除后还没有完成测试,因此其状态迁移也比较简单,如下:初始化状态,该位置1,但只要上报过PASS或者FAIL,该位置0。 

2.6 testFailedSinceLastClear  

 通常该bit置1表示自上次清除后至少检测到一次故障。从逻辑1到逻辑0的迁移有三种方式:内存溢出、老化、清DTC。该bit通常与bit4一起使用。

2.7 testNotCompletedThisOperationCycle

 与bit4很像,但是该bit用于指示当前操作循环测试未完成。初始状态或者清除DTC之后,该bit均置1. 

2.8 warninglndicatorRequested

该bit用于请求警告灯指示,在仪表上用的比较多,因此不是所有的DTC都会使用到该bit。该bit一般与bit3协同使用,当故障确认后,该bit也要置1。

3.常见DTC 状态位一览

序号
状态值
含义
1
0x00
monitor在清除DTC和操作循环切换后只上报过passed。
这个状态是最常见的,是未监控到故障的稳定状态
2
0x50
状态清除后未上报过,且本次操作循环也还未上报过状态
3
0x60
状态清除后已经上报过错误,但本次操作循环还未上报过状态,同时,上次上报的错误由于优先级被替换。
这个状态常见于DTC的优先级不够且当前发生的DTC超过20个以后,被替换的情况。
4
0x2B
监测到故障,并且故障正在发生且已经确认
5
0x2A
当前操作循环发生过故障,但已经恢复正常
这里出现confirmedDTC就是之前提到的,一上报就确认,与确认阈值配置有关
6
0x23
当前监控到故障,故障正在发生,但未确认故障。
目前这种状态主要是由于当前在发生故障,但由于DTC优先级不够,未被记录造成。
7
0x22
当前操作循环发生过故障,但已经恢复正常,故障未确认。
目前这种状态主要是由于当前操作循环发生过故障,但由于DTC优先级不够,未被记录造成的

 4.小结

通过前三篇文章,我们对DEM和故障处理有了一个基础认识,但还远达不到做诊断栈开发的程度,还需要熟读标准,结合配置工具和代码进一步熟悉,如果有时间的话,手撸一遍DEM(实在不行就抄)会有新的理解。下一节我们继续聊DEM的去抖处理,这也是做诊断开发必备的知识。



往期回顾:

1.汽车标定

万字长文:汽车标定技术--XCP概述
汽车标定技术--标定量与#pragma的趣事
汽车标定技术--A2L格式分析

2.AUTOSAR

AUTOSAR OS概述(一)
AUTOSAR OS概述(二)

3.汽车网络安全

汽车信息安全--MCU启动常用密码算法
汽车信息安全--常见车规MCU安全启动方案
车载信息安全场景概述

4.汽车功能安全合集


5.汽车虚拟化合集

    汽车ECU虚拟化技术初探(一)

6.杂七杂八

    我为什么开始写技术博客

继续滑动看下一个

AUTOSAR诊断栈分析(三):DTC状态位

快乐的肌肉 汽车MCU软件设计
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存