[UDS] --- UDS概述

简介: [UDS] --- UDS概述

UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是在汽车电子ECU环境下的一种诊断通信协议,在ISO 14229中规定。它是从ISO 14230-3(KWP2000)和ISO 15765-3协议衍生出来的。“统一”这个词意味着它是一个“国际化的”而非”公司特定的”标准。到目前为止,这种通信协议被用在几乎所有由OEM一级供应商所制造的新ECU上面。这些ECU控制车辆的各种功能,包括电控燃油喷射系统(EFI),发动机控制系统,变速箱,防抱死制动系统(ABS),门锁,制动器等。

1 诊断通信基本流程

其实诊断通信的机制很简单,事件驱动型,一问一答。

类比client-server通信方式,诊断仪即客户端,发送request,服务器即ECU,收到request之后进行处理,然后向诊断仪回复response。

有些情况下,我们可能只需要给ECU发送请求,而不需要ECU返回响应,例如用诊断命令雨刷动两下,我们可以通过雨刷的动作来判断诊断指令是否执行成功。这种通信方式是无反馈的,也是允许的。

1.1 响应时间P2 & P2*

Tester给ECU 发送request之后,ECU需要在P2server时间内给出响应

如果ECU当前正在处理别的事情,不能在P2server时间内给出response,ECU会先在P2server时间内给出RC(responde code)为78的报文,告诉Tester我现在正在忙,之后会在P2server时间内给出其他响应报文;
如果P2server
时间内还是不能给出肯定响应或者否定响应,那么给出pending报文,直到ECU可以给出正确的response

2 诊断寻址方式

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

功能寻址可以广播诊断请求Request,同时等待总线上的ECU给与响应。

物理寻址指定发送特定诊断请求Request,等待指定ECU给与响应。

物理寻址:一对一

功能寻址:一对多

3 SI (Service ID)

SID:Service Identifier,诊断服务ID。UDS本质上是一种定向的通信,是一种交互协议(Request/Response),即诊断方(Tester)给ECU发送指定的请求数据(Request),这条数据中需要包含SID,且SID处于该应用层数据的第一个字节。

理论上一个字节的取值范围是0x00-0xFF,实际SID可取值的分布如下表:

4 诊断交互格式

4.1 诊断请求格式:

Diagnostic request的格式可以分为两类:一类是拥有sub-function的,另一类是没有sub-function的,如下面两张图所示。Service ID(以下简称SID)的长度固定为1个字节,代表了这条诊断命令执行的什么功能。sub-function的长度也是1个字节,它通常表示对这个诊断服务的具体操作,比如是启动、停止还是查询这个诊断服务。而后面的parameter则根据各个诊断服务的不同具有不同的内容,长度和格式并没有统一规格,它用于限定诊断服务执行的条件,比如某个诊断服务执行的时间等。parameter的一个重要应用是作为标识符,标识诊断请求要读出的数据内容,我会在后续的文章里详细讲述各个诊断服务的应用。

肯定响应抑制位

子功能参数的取值范围为0x00 - 0x7F。细心的同学应该发现了,子功能参数占用了一个字节,可用的数值范围为0~0xFF。但子功能的最大取值只到0x7F,那么最高位去哪了呢。这个子功能参数的最高位就是诊断服务肯定响应抑制位SuppressPosRspMsgIndicationBit,简写为SPRMIB。

如下是诊断服务子功能参数的格式定义。其中的最高位Bit7就决定了ECU是否需要给出肯定响应。

肯定响应抑制位的作用

ECU收到SPRMIB为1的服务时,不需要给出肯定响应。相反,当ECU收到SPRMIB为0的服务时,需要给出肯定响应。

例如,ECU收到诊断仪发来的Tester Present服务为$02 3E 00时,需要给出$02 7E 00的肯定响应。同样是Test Present服务,如果ECU收到的是$02 3E 80,则无需给出肯定响应。

4.2 诊断响应格式

Diagnostic response分为positive和negative两类。positive response意味着诊断仪发过来的诊断请求被执行了,而negative response则意味着ECU因为某种原因无法执行诊断仪发过来的诊断请求,而无法执行的原因则存在于negative response的报文中。

肯定响应格式

肯定响应(Positive Response)格式为:(SID+0X40)+Subfunction(子功能)+数据

例如:

请求0X10服务,Subfunction(子功能)为0X02

肯定响应第1个字节为0X50,第2个字节为0X02

否定响应格式

否定响应(Negative Response)格式为:0X7F+SID+NRC

例如:

请求0X10服务,否定响应第1个字节为固定的0X7F,第2个字节为0X10,第3个字节为NRC

NRC是否定响应码,可以根据返回的NRC判断是什么原因导致的否定响应

下面是实际的canoe诊断肯定响应和否定响应的截图:

相关文章
|
安全
[UDS] --- TesterPresent 0x3E
[UDS] --- TesterPresent 0x3E
571 1
|
传感器 安全 内存技术
[UDS] --- RoutineCommunicationControl 0x31
[UDS] --- RoutineCommunicationControl 0x31
1137 1
|
边缘计算 网络协议 网络架构
DoIP看这篇就够了,吐血整理
DoIP看这篇就够了,吐血整理
DoIP看这篇就够了,吐血整理
|
监控 网络架构
CAN-TP传输协议详解
CAN-TP传输协议详解
CAN-TP传输协议详解
|
存储 安全 算法
一文理解UDS安全访问服务(0x27)
一文理解UDS安全访问服务(0x27)
一文理解UDS安全访问服务(0x27)
|
数据格式
一文读懂A2L文件和ASAP2 Studio的使用
一文读懂A2L文件和ASAP2 Studio的使用
一文读懂A2L文件和ASAP2 Studio的使用
|
11月前
|
人工智能 安全 JavaScript
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS纯血鸿蒙新特性
HarmonyOS 3.1引入了Stage模型,增强ArkTS语言、应用程序框架、Web、ArkUI等子系统能力。新增功能包括Ability框架的Stage开发模型、ArkUI组件能力提升、应用包管理接口、公共基础类库支持Buffer读写、Web服务文档预览及编辑、图形图像编解码支持等。从API 9开始,Stage模型成为主要开发模型,支持更灵活的应用生命周期管理和窗口调度,提供更好的组件与窗口弱耦合体验。此外,HarmonyOS NEXT开发者预览版实现了全面自研,被称为“纯血鸿蒙”,具备自主可控、高度弹性、更强的安全性和隐私保护特性。
714 21
|
传感器 算法 安全
CAN 帧中 CRC 场的作用
CAN帧中的CRC场用于检测数据传输错误,通过计算发送数据的校验码并在接收端进行验证,确保数据的完整性和准确性。
|
前端开发 JavaScript Java
屎上最全vue-pdf+Springboot与aspose-words整合,开箱即用
本文详细介绍了如何通过Spring Boot与Aspose Words整合实现Word模板的填充及转换为PDF,并在前端使用Vue和javadog-vue-pdf实现PDF预览与下载。主要内容包括:实现Spring Boot与Aspose Words的整合,完成Word模板填充并转换为PDF;前端Vue集成javadog-vue-pdf进行PDF预览及下载。文章提供了详细的步骤说明,包括下载依赖、配置代理、代码示例等,并展示了最终成果。
870 7
屎上最全vue-pdf+Springboot与aspose-words整合,开箱即用
|
存储 网络协议 算法
UDP & TCP 超详解
本文详细介绍了UDP与TCP协议的相关知识。首先阐述了UDP协议结构,包括其报文格式、各字段含义及其CRC校验和机制。接着深入探讨了TCP协议,涵盖其协议结构、确认应答机制、超时重传策略、三次握手与四次挥手过程,以及滑动窗口、流量控制和拥塞控制等关键技术。最后分析了TCP在异常情况下的处理机制,如进程崩溃、主机关机、掉电和网线断开等情况。
502 6

热门文章

最新文章