Service Identifier
Service Identifier,诊断服务标识符,简称为SID,一字节的无符号整数,用来指代某个诊断服务。诊断协议为每个诊断服务都分配唯一SID,因此更方便协议的软件实现。同时,在开发过程中沟通更加方便。比如,ReadDataByIdentifier服务是去按照ID去读诊断数据,直接说22服务会更加便捷。 Data Identifier
简称DID,2个字节无符号整数的ID,用来标识ECU中存储的某个诊断数据单元。它的好处是当要读取某个单元的诊断数据时,只要读对应的DID就可以,不必知道数据的具体地址。即使当ECU中的数据地址发生变化时,改变DID和地址单元的映射关系即可,对于使用者来说DID屏蔽了具体实现细节,而将重点放在了数据本身。 Negative Response Code
可以简称为NRC,或者叫负响应码,是一个字节的无符号整数。它是诊断协议为每种执行失败的诊断服务分配的失败原因代号。 Sub-function
有些诊断服务可以支持不同的诊断子服务,sub-function就是用来定义这种子服务的,它将某一个服务细分为更为具体的服务,是一个字节的无符号整数。比如ECU Reset这个服务就有0x01,0x02,0x03等sub-function指代具体的reset方式。
1 什么是UDS
UDS(Unified Diagnostic Services,统一诊断服务)诊断协议是用于汽车行业诊断通信的需求规范,由ISO-14229系列标准定义。应用于OSI七层模型的应用层(第7层),它只规定了与诊断相关的服务需求,并未涉及通信机制,所以,它可以在不同的汽车总线(例如CAN, LIN, Flexray, Ethernet 和 K-line)上实现。
ISO 14229-1 定义了诊断服务,只有应用层,不涉及网络及实现。
ISO 14229-3定义了UDS在CAN总线上的实现。
诊断通信用于建立诊断仪与ECU之间的通信连接,并负责将ECU中的诊断结果输送到诊断仪中。 2 UDS的作用
UDS的作用非常广泛,几乎跟随ECU软件开发的全过程。
诊断仪发送报文“85 02”要求EMS关闭故障管理 ,如果是肯定应答则EMS会回复“C5 02”,表示已经关闭故障管理;如果是否定应答,EMS会回复“7F 85 22”,表示没有关闭故障管理,原因是条件不正确。
值得一提的是,在物理寻址和功能寻址情况下,Negative Response有所不同。
在物理寻址情况下,只要是Negative Response就应该按照规定格式发送。而在功能寻址情况下,有一点特殊,对于NRC为0x11(service not supported)、0x12(subfunction not supported)、0x31(request out of range)这三种情况,功能寻址是不会发送response的。