(转发)浅谈电动汽车ISO-14229 UDS诊断协议

ISO-14229标准的也称为UDS(Unified Diagnostic Services),是一种面向汽车电子控制单元(ECU,Electronic Control Unit)的统一诊断服务,不仅用于诊断汽车故障,还用于刷写软件等应用场景,可以说是目前汽车电子领域应用最广泛的技术协议之一。

UDS简单来说是一种Client/Server的通信服务,即Tester(诊断仪)向ECU发送诊断服务请求(Request),ECU则向Tester发送对应服务请求的响应(Response)。较为复杂的是,ISO-14229标准针对每种诊断服务定义了不同的子功能、寻址方式、参数等,其响应报文不是唯一的,对于初学者可能感到困扰。个人最近接触了基于CAN总线的UDS诊断协议(UDS on CAN),并总结了本文,供大家一起探讨。

一、ISO-14229标准基本知识

(1) 服务ID(SID,Service Identifier)

ISO-14229标准定义了25种不同的诊断服务,为区分具体的诊断服务,使用1个字节的服务ID作为服务的唯一识别码。当我们想表达一个具体的诊断服务时,有时候直接说出它的服务ID比起全称会更加简洁有效。表1所示是ISO-14229标准定义的诊断服务汇总列表。当然,并不是所有的诊断服务需要支持,标注有*符号为常用诊断服务。

表1 UDS诊断服务汇总

(2) 子功能(Sub-function)

有些诊断服务支持子功能,以细分为更具体的服务类型。比如,0x11服务用于ECU复位,子功能01和03可分别解释为硬件复位和软件复位。前面提到的表1中标注了$符号的服务表示支持子功能。值得注意的是,当子功能所占的1字节最高位(正响应抑制位)置1时,其正响应不需要回复。

(3) 参数(Parameter)

用于描述诊断服务的额外信息(如Data Identifier),多见于子功能不支持的服务,但子功能支持的服务不一定都有参数信息。

扫描二维码关注公众号,回复: 15837512 查看本文章

(4) 寻址模式(Addressing Type)

Tester发送Request的目标ECU地址根据以下方式指定:

①物理寻址(Physical Address):即一对一通信,用于Tester已知需要诊断的ECU;

②功能寻址(Functional Address):即一对多通信,用于Tester向所有ECU请求诊断服务。

(5) 负响应码(Negative Response Code)

当请求服务执行失败时,ECU向Tester反馈的失败原因代号,简称NRC。表2列出了常见的负响应码。

表2 常见负响应码

二、诊断数据分析

(1) 报文基本格式

诊断报文格式的主要区分于服务是否带子功能,如表3所示。明显的规律是正响应报文的SID字段在其请求报文的SID基础上增加了0x40,而负响应帧都含有0x7F和NRC负响应码。

表3 报文基本格式

(2)多帧报文传输

当报文超过8个字节时,则需要将报文拆分成多帧,依次使用首帧、流控帧和连续帧进行传输,该部分知识可参考ISO-15765标准定义的传输层协议内容。

(3) 响应机制总结

ECU主要根据诊断服务请求报文<SID> + <Sub-Function> + <Parameter>各字段进行响应动作:

①物理寻址模式时,ECU处理请求报文的一般过程如图4所示(含正负响应过程)。只有当所有处理流程顺利执行时,ECU才会回复正响应;否则,ECU回复含有负响应码的错误。

②功能寻址模式时,多数情况下,ECU只回复正响应,负响应不予回复。

更具体的响应机制请见于本文最后的查阅附表总结,限于篇幅,这里不再逐个解释。

猜你喜欢

转载自blog.csdn.net/gonggong11qqqww/article/details/124966471