一、UDS介绍
UDS即统一诊断服务,是汽车电子系统的诊断协议。UDS诊断就像汽车的“医生”,用一套标准的“问诊语言”和车辆对话,帮技师快速找到故障原因。
参考:《UDS协议从入门到精通(UDS速查手册)》(完结撒花版)_obdonuds-优快云博客
1、为什么需要UDS?
汽车有几十个ECU,比如发动机、变速箱、ABS等。如果某个部件出现问题,传统方法像“盲人摸象”,而UDS相当于给汽车装了一个“体检系统”,直接问汽车哪里不舒服。
2、它怎么工作?
“问诊”方式:用诊断仪(类似医生的听诊器)通过车载通讯(比如CAN)给车机发指令。
“症状”反馈:车机回复标准化的“故障码”,如“P0172(混合气过浓)”,而不是工程师才懂的乱码。
高级功能:不仅能读懂故障,还能远程升级软件、重置系统、甚至测试某个零件是否正常。
3、实例
车机仪表盘故障灯亮起,技师用诊断仪连上车,UDS告诉他“变速箱传感器异常,最近10次出现的记录时间是XXX,建议检查线路或更换传感器。”
4、关键特点
统一标准:不同品牌的车用同一套“语言”。
深度访问:能访问到刹车系统、气囊等核心模块(普通OBD权限低)。
双向通信:不仅能读数据,还能对车下指令(比如打开空调)。
二、常用术语
1、Service ID
标蓝部分为常用服务。
2、诊断请求
诊断过程的请求响应模式:由诊断仪发送诊断请求,ECU在收到诊断请求后进行处理,然后发回诊断响应给回诊断仪(凡是能发送诊断请求的软件工具都可以称为诊断仪)。
诊断请求和诊断响应的本质是一段符合UDS协议规范的16进制的报文。
UDS规定每个诊断请求报文的组成:1Byte的SID+1Byte的sub-function+不定长的实际数据数据
UDS规定每个诊断的响应可以分为两种情况:肯定响应与否定响应。
肯定响应:一次成功的请求响应,首字节必须为这次请求的SID+40。
否定响应:一次失败的请求响应,首字节是7F,第二个字节是这次失败请求的SID,第三个字节是表示本次失败原因的否定响应码。
3、否定响应码
否定响应码:negative response code(NRC)
当一次UDS诊断请求响应失败的时候,ECU会返回一个否定响应码,它用于指示服务执行失败的原因。NRC用一个字节表示,每个取值对应不同的错误类型。
4 、UDS诊断的请求和响应的寻址
以CAN总线为例。CAN总线挂载着数十个甚至上百个ECU,基于CAN协议,对于UDS的诊断请求报文,诊断仪是如何发送给ECU的呢?精准地找到想要诊断的ECU呢?ECU又是如何将诊断响应的报文返回给诊断仪的呢?
在UDS协议中,除了规定26个服务的那些服务细节,还规定了诊断请求和响应报文发送时必须要指明寻址信息(包括源地址、目标地址)。
假设一个汽车仪表的ECU,给它事先设定好了总线上发出CAN报文ID为701的报文,那就代表诊断仪是发送给这个仪表ECU自己的诊断请求报文 。
基于CAN总线,UDS诊断通信的报文(就是CAN报文)通过CAN协议传输,请求和响应的地址信息就是CAN报文的ID;请求和响应的服务信息就是CAN报文中的数据域的字节。在车企中,会为总线上的每个ECU都设定一个唯一的UDS诊断请求的CAN报文ID,以及一个唯一的UDS诊断响应的CAN报文ID。
如上图:假设总线上有A、B、C三个ECU,A的车企设定的诊断请求的CAN报文ID就是701,诊断响应的CAN报文ID是709。
诊断仪发送一帧ID为701的诊断CAN报文就只有ECU A进行处理并响应,这就是物理寻址; 诊断仪发送一帧ID为7DF的诊断CAN报文,所有ECU都会处理并响应,这就是功能寻址。企业里一般把功能寻址的ID设定为7DF。
三、UDS服务详述
1、诊断会话
诊断会话就是车辆诊断时,诊断工具和ECU之间建立的“对话模式”,不同模式有不同的权限和能执行的操作。目的是保障安全、防止误操作,同时节省ECU资源。
常见的诊断会话类型:
(1)默认会话(基础模式)
ECU启动后的默认模式,只能做基本操作(如读取故障码、重置ECU等)。
(2)扩展会话(高级模式)
执行高级操作(如清除故障码、读取传感器实时数据、解锁ECU、控制输入输出等)。诊断工具发送指令“进入扩展会话”,可能需要安全验证(类似输入密码)。
(3)编程会话(“手术模式”)
刷写ECU程序或更新软件(比如升级车载系统),必须通过严格的身份验证(如密钥匹配)。
注意:
ECU一上电就处于默认会话
会话最大超时时间
进入编程会话的前提是必须先进入扩展会话
2、10服务
每种会话都有一个编号:默认会话是01;扩展会话是03;编程会话是02。
普通超时时间:P2
扩展超时时间:P2Ex