如果我们说UDS诊断服务是实现人或设备与ECU控制器交流的一种语言,那么诊断服务的响应规则就如同是语法,而SID(Service ID)定义就如同词汇。因此了解响应规则和SID的意义就基本能了解与ECU沟通的方法和含义。本文先来介绍一下响应规则。

1.寻址方式

在总线上往往有着众多ECU设备,作为诊断设备既可以与所有的ECU一起沟通,也可以指定某一个ECU单独沟通。所以寻址方式就有功能寻址(Functionally Addressed)和物理寻址(Physically Addressed)两种。

功能寻址可以广播诊断请求Request,同时等待总线上的ECU给与响应。
在这里插入图片描述
物理寻址指定发送特定诊断请求Request,等待指定ECU给与响应。
在这里插入图片描述因此我们的诊断报文一般会有三个CAN ID,其中DiagRequest(诊断物理请求报文)和DiagState(诊断功能请求报文)是ECU接收来自Client的报文,而DiagRespone(诊断响应报文)是ECU反馈的报文。

例如下图的0x7FF和0x731分别是功能请求报文和物理请求报文,而0x7B1则是诊断响应报文。
在这里插入图片描述

2.请求和响应格式

诊断请求Request

UDS服务中共定义了26个服务请求SID(Service ID),每个SID代表了一类指令。由于有些服务请求还需要表达具体的功能类型,比如是开启还是关闭,是读取还是修改等,因此UDS中还定义了Sub-function来补充SID的意图。另外服务请求有时候还需要告知ECU具体的参数信息Parameter,例如计数信息。因此诊断请求的格式基本上是SID + Sub-function + Parameter三部分组成的,其中SID一个byte,Sub-function一个byte(其中最高位是禁止肯定响应指示位,0则表示需要肯定响应,1则表示禁止肯定响应),Parameter根据具体情况定义。
在这里插入图片描述肯定响应Postive Response

收到Client的诊断请求后,ECU可能反馈肯定响应或者否定响应。肯定响应在诊断请求的SID上+0x40表示确认。例如诊断请求SID为0x10,则肯定响应反馈0x50。
在这里插入图片描述
否定响应Negative Response

当ECU反馈为否应响应时格式为,NR_SI(否定响应服务码0x7F) + SID(否定的请求服务SID)+ NRC(否定响应码,表示否定的理由)。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐