欢迎来到纳米网!
首页 > 设计资源 > 汽车电子与智能交通>正文

DTC深度解析:从编码规则到老化机制

作者 | 寒月

小编 | CRYSTAL

DTC作为汽车故障诊断的核心标识,如同车辆的“医疗档案”,可以让工程师精准定位故障。从简单的传感器故障到复杂的网络通信问题,DTC系统通过精密的编码规则、状态管理和老化机制,构建了一套完整的故障生命周期管理体系。本文内容基于ISO14229-1和ISO15031-6规范创建,详细介绍了DTC组成格式、DTC状态位、DTC状态置位的算法、DTC的老化机制。

b1f7da8e-ca6c-11f0-8ce9-92fbcf53809c.jpg

DTC定义

DTC:Diagnostic Trouble Code,诊断故障码,是故障类型的身份ID号码,用于汽车故障时对故障部位及原因的排查。

当ECU检测到一个故障时,其将在存储器中存储对应的一个代码,此代码被称为故障代码。除故障代码外,ECU还可能存储与此故障相关的故障状态、快照信息及扩展信息。


b2031ab6-ca6c-11f0-8ce9-92fbcf53809c.jpg

DTC的组成



基本格式


b20f5588-ca6c-11f0-8ce9-92fbcf53809c.png

其中,DTC High Byte和DTC Middle Byte这两个字节表示故障内码,DTC Low Byte表示故障类型。


01

故障内码与5位标准故障码的对应关系


DTCHighByte、DTCMiddleByte这两个字节表示故障内码,对应5位标准故障码(第一位是字母,后面四位是数字)。

示例:"B123416"这个故障码中的"B1234"为故障内码;最后面的"16"则是DTCLowByte的内容。故障内码与5位标准故障码的位置对应关系如下:

b239ccaa-ca6c-11f0-8ce9-92fbcf53809c.png

●第一位长度2个bit(Bit15~14)是字母,表示故障所属系统;有如下的四种情况:

b246e796-ca6c-11f0-8ce9-92fbcf53809c.png

●第二位长度2个Bit(Bit13~12)是数字,表示故障类型(用的哪种法规);有如下的四种情况:

b2534ffe-ca6c-11f0-8ce9-92fbcf53809c.png

●第三位长度4个Bit(Bit11~8)是数字,表示故障所属的子系统,按照4个Bit解析成1个16进制字符

●第四和第五位长度8个Bit(Bit7~0),分别按照4个Bit解析成2个16进制字符,是数字,表示具体故障对象和类型


02

故障种类和子类型DTCLowByte


DTCLowByte这个字节表示Failure Type Byte(FTB),包含Failure Category和Failure Sub Type两个部分(ISO 15031-6中的DTCLowByte表示Failure Type Byte(FTB),而ISO 14229-1中的DTC LowByte表示ID序号)。具体种类和类型在ISO15031-6中详细定义。

b27a2f52-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中DTCLowByte定义

故障种类:

b28462f6-ca6c-11f0-8ce9-92fbcf53809c.pngb2980a5e-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中故障类型定义


b2a6fc58-ca6c-11f0-8ce9-92fbcf53809c.jpg

基本概念


操作循环(OperationCycle)


各种操作循环是计算周期相关状态信息(如testCompleteThisOperationCycle)的基础,定义了测试的开始和结束条件,OperationCycle开始时开始检测故障,结束时停止检测。

b2b26db8-ca6c-11f0-8ce9-92fbcf53809c.png


确认阈值(Confirmation Threshold)


确认此故障一直存在的Operation Clycle个数,将其认定为历史故障(ConfirmedDTC),在老化(aging)或手动清除前confirmed DTC状态位会一直存储在EEPROM。


老化计数器(AgingCounter)


老化计数器用于特定诊断故障代码的测试都没有失败(testFailed)的连续操作循环的计数。当一个OpreationCycle没有检测到testFailed,AgingCounter就会自加1,同时DTC status的bit0就会清0。该数值应存储于EEPROM。如果在一个操作循环中有任何已失败的测试结果出现,则老化计数器将重置为“0”。


老化阈值(Aging Threshold)


在制造商或法规规定的操作循环内,特定诊断故障代码的测试未出现“失败”结果,这个规定的操作循环的次数就称为老化阈值。DTC的Confirmed状态位将会被清除,同时DTC从non-volatile内存中清除。也就是说此故障已经完成了老化,可以自愈。


b2bc725e-ca6c-11f0-8ce9-92fbcf53809c.jpg

DTC状态位


从汽车ECU中读取储存的DTC故障码时,除了故障码本身,还可以读出很多其它的信息,包括优先级、发生次数计数器、发生时的里程和时间,以及本节中所讲的状态位(DTC status)。

这个状态位包含1个byte,这里面的8个bit都有各自的含义,但是这8个bit不一定都要使用,各个主机厂可以根据自己的需求使用其中的几个,也可以全部使用。下图是UDS对DTC status这8个bit的定义。

b2c685be-ca6c-11f0-8ce9-92fbcf53809c.png


bit0:testFailed(当前故障)


通常来说,ECU会周期地检测故障是否存在,如果在最近一次的测试中,测试结果为失败,则相应DTC的这一个状态位就要被置1,表示出错。但是它不一定被ECU存储到non-volatile memory中,只有当pendingDTC或confirmedDTC被置1时DTC才会被存储。当错误消失或者诊断仪执行了清除DTC指令时,testFailed会再次被置0。

testFailed状态位置位算法:

b2d380de-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中testFailed状态位置位示意图

● 置1:表示该DTC此时发生了故障

● 清0:a)testPass;b)14服务清除DTC


bit1:testFailedThisOperationCycle


这个bit用于标识某个DTC在当前的OperationCycle中是否出现过testFailed置1的情况,即是否出现过错误。OperationCycle的起始点是ECU通过网络管理唤醒到ECU通过网络管理进入睡眠,对于没有网络管理的ECU,这个起始点就是KL15通断。通过bit0我们无法判断某个DTC是否出现过,比如,当前testFailed=0,说明当前这个DTC没有出错,如果testFailedThisOperationCycle=1的话,就说明这个DTC在当前这个OperationCycle中出过错,但是当前错误又消失了。

testFailedThisOperationCycle状态位置位算法:

b2de6d46-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中testFailedThisOperationCycle状态位置位示意图

● 置1:在当前的操作循环内,该DTC发生过故障

● 清0:a)开启新的操作循环;b)14服务清除DTC


bit2:pendingDTC


根据规范的解释,pendingDTC=1表示某个DTC在当前或者上一个OperationCycle中是否出现过。pendingDTC位其实是位于testFailed和confirmedDTC之间的一个状态,有的DTC被确认的判定条件比较严苛,需要在多个OperationCycle中出现才可以被判定为confirmed的状态,此时就需要借助于pendingDTC位了。pendingDTC=1的时候,DTC就要被存储下来了。如果当前OperationCycle中故障发生,pendingDTC=1,但是在下一个OperationCycle中,故障没有了,pendingDTC仍然为1,再下一个OperationCycle中,故障仍然不存在,那么pendingDTC就可以置0了。

pendingDTC状态位置位算法:

b2eba0e2-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中pendingDTC状态位置位示意图

● 置1:原本无故障,但在上一次或当前操作循环中出现一次测试结果为Failed

● 清0:a)在上一个操作循环和当前操作循环均未发生故障(pending被置位后,需要连续两次OperateCycle没有监测到故障);b)14服务清除DTC

bit3:confirmedDTC(历史故障)

当confirmedDTC=1时,则说明某个DTC已经被存储到ECU的non-volatile memory中,说明这个DTC曾经满足了被confirmed的条件。但是请注意,confirmedDTC=1时,并不意味着当前这个DTC仍然出错,如果confirmedDTC=1,但testFailed=0,则说明这个DTC表示的故障目前已经消失了。

confirmedDTC状态位置位算法:

b2f685d4-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中confirmedDTC状态位置位示意图

● 置1:满足confirmed条件(几个连续的操作循环检测到故障),此时该DTC已被存储至EEPROM中

● 清0:a)当操作循环次数已满足老化阈值;b)14服务清除DTC;c)故障记忆溢出


bit4:testNotCompletedSinceLastClear


这个bit用于表示,自从上次调用了清除DTC的服务之后,是否成功地执行了对某个DTC的测试(不管测试结果是什么,只关心是否测了)。因为很多DTC的测试也是需要满足某些边界条件的,并不是ECU上电就一定会对DTC进行检测。

testNotCompletedSinceLastClear状态位置位算法:

b3058c3c-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中testNotCompletedSinceLastClear状态位置位示意图

● 置1:自从清DTC之后还没有完成过针对该DTC的测试

● 清0:自从清DTC之后已经完成过针对该DTC的测试

bit5:testFailedSinceLastClear


这个位与bit1:testFailedThisOperationCycle有些类似,后者表示某个DTC在当前的OperationCycle中是否出现过testFailed置1的情况,而testFailedSinceLastClear表示的是在上次执行过清除DTC之后某个DTC是否出过错。

testFailedSinceLastClear状态位置位算法:

b3150f2c-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中testFailedSinceLastClear状态位置位示意图

● 置1:自上次清除诊断信息以来,DTC测试至少返回了一次失败的结果

● 清0:a)满足老化阈值;b)故障记忆溢出;c)清除DTC后

bit6:testNotCompletedThisOperationCycle


这个位与bit4:testNotCompletedSinceLastClear类似,后者表示自从上次调用了清除DTC的服务之后,是否成功地执行了对某个DTC的测试。而testNotCompletedThisOperationCycle则表示在当前OperationCycle中是否成功地执行了对某个DTC的测试。

testNotCompletedThisOperationCycle状态位置位算法:

b3229d86-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中testNotCompletedThisOperationCycle状态位置位示意图

● 置1:a)指示DTC测试在当前操作循环内尚未运行完毕;b)14服务清除DTC

● 清0:测试运行并且通过或失败;

bit7:warningIndicatorRequested


某些比较严重的DTC会与用户可见的警告指示相关联,比如仪表上的报警灯,或者是文字,或者是声音。这个warningIndicatorRequested就用于此类DTC。如果这个DTC不支持警告指示,则这个位永远置0。

warningIndicatorRequested状态位置位算法:

b32f5ac6-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中WarningIndicatorRequested状态位置位示意图

● 置1:ECU请求激活警告指示

● 清0:ECU不请求激活警告指示


b340ce6e-ca6c-11f0-8ce9-92fbcf53809c.jpg

DTCAging(DTC老化)


DTC诊断故障代码一旦生成,将会一直保留,直到通过发送诊断指令清除,或者通过诊断故障代码老化机制确定此故障不复存在。当一直处于TestPassed,可将这个DTC清除掉,这个过程的结果被称为self-healing,而这个过程,我们就叫做DTC的老化。

在诊断自恢复过程中,往往会定义30个或40个循环周期作为自恢复的条件。原因是:在一个相对较长的过程中,如果车辆没有发生这个故障,可以认为这个故障是一个偶发的现象,也可以认为现在的车辆处于一个相对稳定的状态,因而,可以将这个故障码清除。


DTC AgingCounter例子


b34e0f5c-ca6c-11f0-8ce9-92fbcf53809c.png

ISO 14229-1中DTC AgingCounter示例

1

DTCAging计数器在完成测试未失败的第一个操作循环后递增为1,DTCAging计数器开始计数的条件是:testFailed=0,PendingDTC=0,ComfiredDTC=1。

2

pendingDTC=0的条件是在一个操作循环后测试完成且未失败(testNotCompletedThisOperationCycle=0,tesetFailed=0,tesetFailedThisOperationCycle=0)。如果ECU不支持掉电顺序(即在关闭点火开关时立即断电),则将无法检测到操作循环的结束。因此,在下一个操作循环开始时将pendingDTC设置为零也是有效的。

3

DTCAging计数器在完成测试未失败的第二个操作循环后递增为2。testNotCompleted-ThisOperationCycle=0,tesetFailed=0。

4

DTCAging计数器继续递增,因为测试在这些操作循环中没有失败。tesetFailed=0。

5

当完全满足老化标准时(例如,DTCAging计数器达到特定值),confirmedDTC设置为零,DTC会从内存中清除掉。

6

DTCAging计数器达到最大值(例如40),此时confirmedDTC被清除。

7

车辆制造商有责任指定testFailedSinceLastClear位是否通过老化标准或由于故障存储器溢出而重置。


通过本文的系统性介绍,我们全面解析了DTC从编码规则、状态管理到老化清除的完整生命周期。DTC不仅是简单的故障代码,更是连接车辆故障现象与根本原因的桥梁。掌握DTC的运作机制,就如同拥有了诊断汽车电子系统的“解码器”,能够从海量故障数据中提取有价值的信息,为故障排查、系统优化和品质提升提供坚实的数据支撑。

北汇信息在汽车诊断领域拥有深厚的技术积累,依托与多家主流OEM的长期合作,深入理解DTC在实际车型中的应用与诊断需求,积累了丰富的故障诊断测试经验。如您有相关测试或诊断开发需求,欢迎随时与我们联系。


参考文献:

[1] Road vehicles — Unified diagnostic services (UDS) — Part 1:Application layer

[2] Road vehicles — Communication between vehicle and external equipment for emissions-related diagnostics Part 6: Diagnostic trouble code definitions

猜你喜欢

  • 艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    在消费电子持续追求轻薄化与长续航的当下,背光系统能效成为关键瓶颈。传统方案在轻载场景效率低下,散热性能不足,严重制约设备续航并带来可靠性风险。数模龙头艾为电子推出新一代升压型WLED驱动芯片——AW9967FSR,以科学先进的热管理技术,打造卓越的散热...

    2025-12-01
  • Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    该服务器支持跨AI平台获取可信产品信息,简化工作流程、加速设计并提高生产力 为进一步兑现公司为嵌入式工程师开发AI解决方案的承诺,Microchip Technology Inc.(微芯科技公司)今日推出模型语境协议(MCP)服务器。作为AI接口,MCP服务器可直接连接兼容的AI...

    2026-01-23
  • Microchip第22届中国技术精英年会北京站成功闭幕,下一站深圳

    Microchip第22届中国技术精英年会北京站成功闭幕,下一

    Microchip第22届中国技术精英年会(MASTERs)北京站于今日圆满落幕!来自各地的技术专家、行业伙伴和客户齐聚一堂,共同探讨前沿技术与创新应用。活动伊始,Microchip大中华区副总裁Edward Ho先生为本站致开幕词,欢迎各位嘉宾的到来,并分享了对行业发展的展望...

    2026-01-23
  • 国星半导体车规级LED芯片获2025年广东省名优高新技术产品

    国星半导体车规级LED芯片获2025年广东省名优高新技术

    近日,广东省高新技术企业协会正式发布《2025年第二批广东省名优高新技术产品名单》,国星半导体自主研发的车规级LED芯片与垂直LED芯片两大系列产品成功入选。该认定严格围绕技术创新性、质量稳定性、市场成熟度及产业化能力四大维度进行评审,是广东省...

    2025-12-02
  • 云英谷科技荣登2025中国半导体企业影响力百强,专注OLED显示驱动芯片

    云英谷科技荣登2025中国半导体企业影响力百强,专注OLED

    11月14日,世界集成电路协会(WICA)主办的“2025全球半导体市场峰会”在上海成功召开。本次峰会发布了2026全球半导体市场趋势展望暨2025中国半导体企业影响力百强及集成电路新锐企业50强报告。云英谷科技股份有限公司荣登“2025中国半导体企业影响力百...

    2026-01-23
^