前言
UDS(UnifiedDiagnostic Services,统一诊断服务,有时也称增强诊断)指的就是ISO-14229协议。
ISO 14229-1定义了诊断服务,但不涉及网络层及实现手段,只有应用层的内容,因此可在不同的汽车总线(如CAN,LIN,Flexray,Ethernet,K-line和XCP等)上实现。
下列是ISO-14229在OSI模型中的位置。
UDS诊断协议
诊断服务交互机制
基于C/S的诊断通信机制,诊断仪发过来的诊断请求被执行了Tester作为Client发出诊断请求request,车辆ECU作为Server处理该请求并发送诊断响应response(PosResponse/NegResponse),诊断报文是典型的事件触发型报文,有请求才会有响应。
如果ECU收到了Tester发过来的诊断请求,且执行了相关请求,此时ECU会向Tester发送肯定响应PosResponse。
如果ECU因为某种原因无法执行诊断仪发过来的诊断请求,则向诊断仪发送否定响应NegResponse。
服务请求和响应格式
了解机制以后,还需要掌握具体的服务请求和响应格式。
14229-1中目前定义了26种服务,详见如下表格。
如果该服务不支持Subfunction,则请求格式为[SID+具体的数据],对应的肯定响应格式:[(SID+0x40)+ 具体的数据],否定响应格式:[7F+SID+NRC] 。
如果该服务支持Subfunction,则请求格式为[SID+一个字节Subfunction+具体的数据],对应的肯定响应格式:[(SID+0x40)+ Subfunction+具体的数据],否定响应格式:[7F+SID+NRC] 。
NRC是否定响应码,14229-1定义了相关含义。
Suppress Ppositive Response
知道了Subfunction以后,可以在掌握一个概念,肯定响应抑制位。
肯定响应抑制位是在Subfunction里的这个字节的最高位。当肯定响应抑制位置1的时候,ECU的肯定响应的抑制将不再发送。当肯定响应抑制位为0的时候,肯定响应是不被抑制的,目的是可以告诉ECU不要发不必要的Response,从而节约通信资源。这里要注意的是它只是抑制肯定响应,而否定响应是不被抑制的。
结尾
后续将整理服务具体的内容,以及协议里面我认为值得写的内容。
END