故障码的全称是Diagnostic Trouble Code,简称DTC,它是故障的编号,与实际故障之间存在映射关系。
一、故障码定义
在开发初期,通常会根据软件或硬件的功能设计相应的错误码。这些错误码能够帮助诊断系统中可能出现的大多数故障,例如硬件的短路或开路,以及软件功能的执行失败等。在开发阶段,如果有可用的串口,可以通过串口打印来显示这些错误码。但是,一旦产品开始量产,车辆上通常就不再具备这种条件了。
现代汽车通常都配备了总线系统,即ECU之间的通信依赖于成熟的总线系统,如CAN总线和以太网等。这些总线支持UDS诊断,因此可以将错误码映射到UDS诊断的DTC上。通过UDS服务,可以读取与错误相关的信息,包括状态和系统快照等。
故障码的格式会根据不同的应用场景有不同的规范要求。例如,SAE J2012的格式有两种:一种是15031-6定义的常见格式,另一种是较新的27145定义的格式,目前还未见其实际应用。1939格式是商用车使用的故障码格式,在UDS中较为少见。11992-4是拖车使用的诊断协议,应用非常有限。而14229-1的格式则是最为常用的,因为它定义了四个字节的灵活性,具体内容可以根据实际情况自由填充。在实际OEM应用中,最常用的表示方法是SAE_J2012-DA_DTCFormat_00,尽管大多数选择的是ISO_14229-1_DTCFormat_01,但也会采用J2012的格式。
无论采用哪种格式,故障码最终都是由4个字节组成。
SAE_J2012-DA_DTCFormat_00的格式相对简单,一个DTC由四个字节构成。前两个字节描述了故障的种类,如故障器件、功能、位置等,第三个字节指出故障的类型,例如短路或开路,而最后一个字节代表故障状态,比如是当前正在发生或仅仅是之前发生过的。
J1939格式与商用车协议有关,包括SPN和FM等信息,但具体格式在此不详述。
27145格式是较新的内容,它可以映射至DA_DTCFormat_00或J1939格式,其中包含相应的对应关系,这部分内容如果有人感兴趣,将在后续有时间时另开章节详细说明。
二、故障码的存储
在汽车UDS诊断中,故障码的存储通常要求保存在NVM(Non-Volatile Memory)中,这意味着即使断电,故障码也不会丢失。由于芯片上的NVM容量有限,许多OEM会设定一个最小存储数量的限制,只要能够保存的DTC数量不小于这个数量即可。当故障码数量超过限制时,通常采用FIFO(先进先出)策略来管理这些数据。
除了故障码,还可以读取一些状态信息和快照数据,这些信息也会与故障码一起保存。常见的存储信息包括快照和扩展信息。
快照记录了故障发生时车辆的状态信息,例如车速、蓄电池电压、挡位等。快照提供了故障发生时的环境数据,有助于在后续问题分析中快速查找原因,并准确复现当时的车况。快照数据的格式与22服务的DID一致,一个DID号对应一组数据。
扩展信息则记录了故障本身的一些详细信息,如故障发生的次数或某些操作循环计数。扩展信息提供了故障的历史数据,通过这些信息可以辅助分析故障的发生频率以及是否有历史原因导致故障的发生。
三、故障码的读取
故障码读取是通过UDS的19服务实现的。该服务下有多个子功能,每个子功能对应不同的读取内容。以下是几个常用的19服务子功能:
-
01 reportNumberOfDTCByStatusMask:报告与状态掩码匹配的DTC数量。使用这个子功能时,不会响应实际的DTC内容,只会响应与请求的状态掩码相匹配的DTC数量。
-
02 reportDTCByStatusMask:这是最常用的子功能,通常用于读取与请求的状态掩码相匹配的DTC。
-
04 reportDTCSnapshotRecordByDTCNumber:通过该子功能可以读取指定DTC的快照信息,即故障发生时的一些状态信息。
-
06 reportDTCExtDataRecordByDTCNumber:通过该子功能可以读取指定DTC的扩展数据,即DTC自身的一些属性。
-
0A reportSupportedDTC:该子功能用于读取控制器支持的所有DTC,主要作用是检索所有的DTC,以确认其与定义的一致性,同时也可以查询每个DTC的状态。
以上是比较常见的19服务子功能,后面会逐个进行详细讲解。请大家持续关注,点赞和收藏。