在汽车诊断领域,统一诊断服务(Unified Diagnostic Services,简称UDS)协议扮演着至关重要的角色。这一协议由ISO 14229系列标准定义,主要用于汽车电子控制单元(Electronic Control Unit,简称ECU)之间的诊断通信。通过UDS协议,诊断工具可以向ECU发送请求消息,ECU则根据请求执行相应的操作并返回响应消息。本文将详细解析UDS协议中的服务ID(Service ID,简称SID)、诊断请求以及否定响应码(Negative Response Code,简称NRC)的回复机制。

打开网易新闻 查看更多图片

一、服务ID(SID)

在UDS协议中,服务ID(SID)是区分不同诊断服务的唯一标识符。每个服务都有一个特定的SID,通过SID可以明确知道诊断工具请求ECU执行的具体服务。ISO 14229-1标准定义了26种服务,这些服务被分为六大类:诊断和通信管理类、数据传输类、存储数据传输类、输入输出控制类、例程功能类和上传下载类。

常用的服务ID包括:

  • 10:诊断会话控制(Diagnostic Session Control)

  • 11:ECU复位(ECU Reset)

  • 14:清除诊断信息(Clear Diagnostic Information)

  • 19:读取故障码信息(Read DTC Information)

  • 22:通过ID读数据(Read Data By Identifier)

  • 27:安全访问(Security Access)

每种服务都有其特定的用途和操作方式,例如,10服务用于控制诊断会话的模式,11服务用于请求ECU执行复位操作,而19服务则用于读取ECU中的故障诊断码(DTC)。

二、诊断请求

诊断请求是诊断工具向ECU发送的请求消息,用于请求执行某个特定的服务。诊断请求消息由三个主要部分组成:SID、子功能(Sub-function)和实际数据。其中,SID用于标识要执行的服务,子功能则进一步细化服务的操作类型(如启动、停止等),实际数据则用于限定服务执行的条件或参数。

诊断请求的格式根据服务类型的不同而有所差异,但总体遵循统一的格式规范。例如,对于带有子功能的服务,请求消息由1个字节的SID、1个字节的子功能(实际上是1位抑制正响应标志位SPR和7位子功能位)以及不定长的实际数据组成。抑制正响应标志位(SPR)用于指示ECU是否需要发送正响应消息,以减少不必要的通信开销。

三、NRC回复解析

当ECU收到诊断请求后,如果服务执行成功,则返回正响应消息;如果执行失败,则返回负响应消息。负响应消息由两部分组成:SID和NRC。SID用于标识响应的服务,NRC则指示服务执行失败的具体原因。

在UDS协议中,NRC用一个字节表示,每个取值都对应一种不同的错误类型。常见的NRC包括:

  • 0x11:服务不支持

  • 0x12:子功能不支持

  • 0x7F:当前会话下服务不支持

  • 0x7E:当前会话下子功能不支持

  • 0x22:请求数据错误

NRC的优先级对于诊断工具来说非常重要,它决定了在多个错误同时发生时,ECU应优先回复哪个NRC。一般来说,NRC的优先级从高到低排列,例如,0x11(服务不支持)的优先级高于0x7F(当前会话下服务不支持)。

在实际应用中,诊断工具需要根据ECU返回的NRC快速判断服务执行失败的原因,并采取相应的措施。例如,如果NRC为0x11,表示请求的服务在ECU中不被支持,此时诊断工具可能需要更换服务请求或通知用户检查ECU的配置。

结语

UDS协议中的服务ID、诊断请求及NRC回复机制共同构成了汽车诊断通信的核心框架。通过深入理解这些机制,诊断工具可以更加高效、准确地与ECU进行通信,从而快速定位并解决车辆故障。随着汽车技术的不断发展,UDS协议也将在未来继续发挥重要作用,为汽车诊断领域带来更多便利和创新。