统一诊断服务(UDS)_晓翔仔的博客-程序员资料_uds 库

技术标签: 网络  UDS  汽车安全诊断  tech knowledge  新能源汽车  网络安全  

一、概述

        统一诊断服务(Unified Diagnostic Services),简称UDS。是ISO 15765ISO 14229定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它可在不同的汽车总线(例如CAN、LIN、Flexray、Internet、K-line)上实现,是当前汽车领域广泛使用的一种车载诊断协议标准。
UDS协议的应用层定义是ISO 14229-1,目前大部分汽车厂商均采用UDS on CAN的诊断协议。

二、诊断原理

        根据UDS的诊断协议,汽车上的控制系统需要根据规则化的诊断协议进行故障记录和处理,最终体现为诊断故障代码(Diagnostic Trouble Code,DTC)的方式。例如,网络通信丢失的故障诊断机制:
        自动变速箱控制单元(Transmission Control Unit,TCU)和制动防抱死系统(Antilock Brake System,ABS)是CAN车载网络上的两大电子控制单元,这2个ECU要通过CAN网络进行大量的信息交互。但是由于电磁干扰、串扰、静电等外界干扰或电子控制单元本身控制策略引起的通信停止等原因,2个电子控制单元之间可能会出现通信丢失的现象。
        控制系统需要将故障信息(例如:通信丢失故障信息)诊断出来,以处理通信被破坏时出现丢失帧的故障现象,并记录为DTC。一旦某一控制系统,如TCU监测到一段规定的时间内并没有接收到ABS发来的通信数据,便将此DTC记录下来。外部诊断设备通过规则的诊断通信与控制系统建立诊断通信连接,并选择相应的诊断方式。例如:读取故障信息服务时,就会将此故障信息读出,并在诊断仪中显示出来。

三、UDS诊断服务

根据功能和处理目的被分类为不同的功能单元:

 

具体介绍:

3.1 诊断和通信管理功能单元(Diagnostic and Communication Management)


$10 - 诊断会话控制(DiagnosticSessionControl)
该服务请求ECU从活动会话过渡到其他会话。包含三个子功能:01 - Default、02 - Programming、03 - Extended。


$11 - 电控单元复位(ECUReset)
该服务请求ECU执行复位。ECUReset请求参数的示例包括:hardReset、keyOffOnReset、softReset。


$27 - 安全访问(SecurityAccess)
此服务用于在活动诊断会话中达到更高的安全级别。可能需要SecurityAccess请求来解锁并访问受保护的功能及数据(例如通过DID读取ECU ID信息)。也可以用于从一个会话通过解锁以成功切换到其他会话。


$28 - 通讯控制(CommunicationControl)
该服务请求ECU控制其通信行为。一个典型的示例包括要求CAN总线中的ECU关闭车载通信,以提高诊断通信的效率。


$3E - 待机握手(TesterPresent)
TesterPresent请求通常定期发送,并包含一个功能地址。它指示测试仪仍处于连接状态(存在),并请求ECU保持当前诊断状态(例如,除默认会话之外的其他会话处于活动状态,RoE机制仍处于活动状态)。对这个服务的正响应抑制可以减少总线负载。


$83 - 访问时间参数(AccessTimingParameter)
该请求用于读取和/或修改通信定时参数。


$84 - 安全数据传输(SecuredDataTransmission)
此请求用于传输受加密方法保护的诊断数据。为此,必须实现位于应用程序层与测试仪和ECU的应用程序之间的“安全子层”。数据根据ISO 15764(扩展数据链接安全性)进行处理。


$85 - 诊断故障码设置控制(ControlDTCSetting)
该服务要求ECU停止/恢复DTC的设置。将此服务与车载通信切换 (服务$28通讯控制)相结合,可增加用于Flash编程的速度。


$86 - 事件响应(ResponseOnEvent)
事件响应(RoE)服务请求ECU自动传输指定事件的响应。


$87 - 链路控制(LinkControl)
该服务请求控制通信数据速率。对于CAN,它会影响ISO 11898中规定的数据链路层,从而影响用于板载通信以及诊断通信的数据速率。转换数据速率的请求分为:验证网络上的ECU是否允许特定的数据速率,在验证结果为肯定的情况下请求转换,执行转换。

3.2 数据传输功能单元(Data Transmission)


$22 - 通过ID读数据(ReadDataByldentifier)
该服务请求读取由DID参数标识的数据记录值。DID用于标识特定的本地数据记录。数据标识符0xF224可以包含诸如电池电压,歧管绝对压力,空气质量流量,车辆大气压以及计算出的负载值之类的数据。


$23 - 通过地址读内存(ReadMemoryByAddress)
该服务请求读取指定内存范围的当前值。请求参数是内存地址和内存大小。用于请求参数的字节数在addressAndLengthFormatldentifier中指定。


$24 - 通过ID读比例数据(ReadScalingDataByidentifier)
该服务请求ECU将缩放信息值传输到测试仪。测试人员使用定标信息值来转换数据。这项服务的实施增加了ECU软件的实用性。作为替代,测试器可以将缩放比例信息存储在数据库中。


$2A - 通过周期ID读取数据(ReadDataUyPeriodicidentifier)
该服务请求定期发送数据记录值。所请求的数据的传输速率由传输模式参数设置,例如“中等速率发送”,例如300 ms。


$2C - 动态定义标识符(DynamicallyDefineDataldentifier)
该服务允许测试人员在ECU中动态定义新的数据标识符,其中包含对静态定义的标识符和/或内存地址的引用。测试人员随后可以通过服务请求2A(readDataByPeriodicIdentifier)读取此动态定义的数据记录。动态定义的标识符的一个优点是, 一次服务可以请求传输很多的的数据记录。


$2E - 通过ID写数据(WriteDataByldentifier)
通过此服务,可以将由标识符(DID)指定的数据记录写入ECU存储器。


$3D - 通过地址写内存(WriteMemoryByAddress)
该服务允许将数据记录直接写入ECU的内存。请求参数是内存地址和内存大小以及数据记录。用于参数内存地址和内存大小的字节数在addressAndLengthFormatidentifier中指定。

3.3 存储数据传输功能单元(Stored Data Transmission)


$14 - 清除诊断信息(ClearDiagnosticInformation)
清除(复位)DTC格式,它可以改变DTC的状态。此服务允许在一个或多个ECU中清除错误存储器的内容。因此,可以使用物理地址或功能地址来请求服务。3个FF代表清除所有DTC。例如:
请求:14 + FF + FF + FF;
响应:54 。


$19 - 读取故障码信息(ReadDTCInformation)
诊断故障代码(DTC)用于编码和识别检测到的与排放有关和与排放无关的故障。DTC通常为三个字节,OBD II占用两个字节。该服务从一个或多个ECU请求DTC信息的状态。因此,该服务可以用物理地址或功能地址查询。测试人员可以请求与DTC关联的已存储数据记录,也称为“DTC快照”。DTC快照包含故障发生时的特定数据值。

3.4 输入输出控制功能单元(Input & Output Control)


$2F - 通过标识符控制输入输出(InputOutputControlByIdentifier)
该服务主要用于代替输入信号的值和/或控制ECU的输出。通常,此服务会绕过ECU的应用程序软件并直接触发输出电路,然后直接读取连接到输入电路的传感器。

3.5 例行程序功能单元(Remote Activation of Routine)


$31 - 例行程序控制(RoutineControl)
该服务用于维护和停止ECU内部例行程序。可以读取例程的结果以进行分析。该例行程序由两个字节的例行程序identifier标识。

3.6 上传下载功能单元(Upload & Download)


$34 - 请求下载(RequestDownload)
此服务启动从测试仪到ECU的数据传输。当ECU准备从测试仪接收数据时,它会发送肯定响应,其中包含用于后续数据传输的可用块大小(每个传输数据请求的数据字节数)


$35 - 请求上传(RequestUpload)
此服务启动从ECU到测试仪的数据传输。当ECU准备好将数据发送到测试仪时,它会发送一个肯定的响应,其中包含用于后续数据传输的块大小(每个传输数据请求的数据字节数)


$36 - 数据传输(TransferData)
此服务用于在测试仪和ECU之间(下载)或在ECU和测试仪之间(向上)传输数据。如果需要一个以上的transferData请求来传输数据,则使用blockSequenceCounter对传输次数进行计数。计数器允许在传输损坏后重复传输块。因此,在出现通信问题时,不必再次传输完整的数据


$37 - 请求退出传输(RequestTransferExit)
该服务用于终止transferData服务。完整的数据传输从requestDownloadrequestUpload服务开始,再由几个transferData服务继续,并由requestTransferExit服务完成。


$38 - 请求文件传输(RequestFileTransfer)
该服务用于终止transferData服务。完整的数据传输从requestDownloadrequestUpload服务开始,再由几个transferData服务继续,并由requestTransferExit服务完成。

四、否定响应码

UDS中定义的否定响应代码非常多,但常用的只有以下这些:

ServiceNotSupported/服务不支持($11 )

当诊断仪发送的请求消息中服务标识符无法识别或不支持时,ECU应发送该响应码

SubFunctionNotSupported/不支持子功能($12 )

该响应码表明请求的动作不能执行的原因是ECU不支持请求消息中的服务特定参数。如果诊断仪已经发送了一请求消息,并且该请求消息包含能识别且支持的服务标识符,但子功能要么无法识别要么不支持,此时ECU应(shall)发送此响应代码

IncorrectMessageLengthOrInvalidFormat/不正确的消息长度或无效的格式($13)

该响应码表明请求的动作不能执行的原因是ECU接收到的请求消息长度与特定服务规定的长度不匹配或者是参数格式与特定服务规定的格式不匹配。

conditionsNotCorrect/条件不正确($22)

该响应码表明请求的动作不能执行的原因是ECU的状态条件不允许。

requestSequenceError/请求序列错误($24)

该响应码表明请求的动作不能执行的原因是ECU收到一个非预期的请求消息序列或诊断仪发送的消息。

requestOutOfRange/请求超出范围($31)

该响应码表明请求的动作不能执行的原因是ECU检测到请求消息包含一个超出允许范围的参数或者是不支持或者激活会话模式下不支持的数据标识符/例程标识符的访问。应(shall)允许诊断仪在ECU内部进行读数据、写数据或通过数据调整功能的服务使用该响应代码。

securityAccessDenied/安全访问拒绝($33)

用在需要安全访问但没通过安全访问的情况。

invalidKey/密钥无效($35)

该响应码表明ECU不允许通过安全访问的原因是诊断仪发送的密钥与ECU内存中的密钥不匹配。

generalProgrammingFailure/一般编程失败($72)

该响应码表明在不可擦除的内存设备中进行擦除或编程时ECU检测到错误发生。

requestCorrectlyReceived-ResponsePending/正确接收请求消息-等待响应($78)

该响应码表明诊断仪请求的消息被ECU正确接收且请求消息中所有参数有效,但是将执行的动作未完成且ECU未准备好接收其它请求。一旦完成所请求的服务,ECU应(shall)发送一肯定响应消息或发送否定响应吗不为78的否定响应消息。

subFunctionNotSupportedInActiveSession/激活会话不支持该子服务($7E)

该响应码表明请求的动作不能执行的原因是当前会话模式下ECU不支持请求的子服务。

serviceNotSupportedInActiveSession/激活会话不支持该服务($7F)

该响应码表明请求的动作不能执行的原因是当前会话模式下ECU不支持请求的服务。
 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33163046/article/details/127057492

智能推荐

标准WPS框架下的空间信息处理服务部署方法_weixin_30906671的博客-程序员资料

笔者第一篇博客里面曾介绍过将专题图制作功能发布为WPS,但随着后面的研究,才发现那时候发布的不是真正WPS框架下的服务,而只是通过Servlet将其发布为可调用的网络服务,所以今天再具体介绍一下真正的WPS服务到底如何发布。WPS(Web Processing Service)是OGC组织制定的空间信息处理服务的标准规范,旨在以标准化的方式在网络上共享空间信息处理功能。WPS主要用来处理空间数...

AI推理单元_普通网友的博客-程序员资料

AI推理单元推理服务供了一套面向 MLU(Machine Learning Unit,机器学习单元)设备的类似服务器的推理接口(C++11标准),以及模型加载与管理,推理任务调度等功能,极大地简化了面向MLU平台高性能深度学习应用的开发和部署工作。概述推理服务在软件栈中的位置,如下图所示:推理服务共包含以下3个模块的用户接口:• Model: 模型加载与管理• Processor: 可自定义的后端处理单元• InferServer: 执行推理任务基本概念本文描述推理服务中所涉及的具体概念

【[学习笔记----数据结构15-图的基本数据操作]】_不一样的水果的博客-程序员资料_图 删除顶点v及其相关的边

基本数据操作ADT  图(Graph)Data       顶点的有穷非空集合和边的集合Operation          CreateGraph(*G,V,VR):V点集,VR边弧集的定义构造图G          DestroyGraph(*G):图存在则销毁          LocateVex(G,u):若图G中存在顶点u,则返回图中的位置        

SSD物体检测(附源代码,可以直接运行)_Tom Hardy的博客-程序员资料_物体检测算法的源代码

关于SSD算法,可直接参考SSD物体检测论文解析 这里只给出SSD物体检测源代码,代码基于谷歌开源的Object Detection Api,可以直接运行。import numpy as npimport osimport six.moves.urllib as urllibimport sysimport tarfileimport tensorflow as tfimpo...

随便推点

关于上一篇博客中WebView 的问题(android)_larryzhao234的博客-程序员资料

在上一篇博客中[url]http://serryzhao.iteye.com/blog/882510[/url]界面是好了,但是在2.1上运行时,在特定的情况下是有问题的,所谓特定情况 首先 在同一个Activity中。 其次 同一个webView引用生成多个网页。会出现的情况就是,当你重新生成了网页后 发现html中的input为text时候不能再次输入了。但在1.5...

c#开发wps插件(3)部署_weixin_30387663的博客-程序员资料

上一篇,我们完成了具体的开发工作,但是最终必须得部署到客户机器上。所以,部署方面,我花费了一些时间去研究,现在总结下。上一篇中,我为什么建议开发人员安装wps专业版呢?因为装了专业版,方便我们开发,安装过程中会顺便把 office PIA安装到GAC中。否则,我们还得手动安装PIA,这个过程极其繁琐。 啥是PIA?说白了,就是office 或者wps提供给开发者的接口,学...

Nginx+uWSGI+Django部署web服务器_铁乐与猫的博客-程序员资料_django web的框架和nginx uwsgi

Nginx+uWSGI+Django部署web服务器Nginx+uWSGI+Django部署web服务器环境说明前言搭建项目Django部署编辑luffy/luffy/settings.py编辑luffy/app01/views.py编辑luffy/luffy/urls.py运行并测试uWSGI部署测试运行uWSGI使用uWSGI运行django项目uWSGi热...

【Linux入门到精通系列讲解】Centos 7软件安装的三种方式_李响Superb的博客-程序员资料

centos 软件安装的三种方式Linux下面安装软件的常见方法:一、yum 替你下载软件 替你安装 替你解决依赖关系 点外卖 缺少的东西 外卖解决1、方便 简单2、没有办法深入修改yum install -y tree二、rpm 自己下载软件包 自己安装 自己解决依赖 半成品 缺少的东西 自己解决1、安装 解决依赖复杂rpm -ivh treexxxxxxxxxxx.rpm三、编译 自己下载软件包 自己安装 自己解决依赖 自己做 按照自己口味 按照需求1、自定义2、过程复杂...

liunx 添加永久路由最有效方法之一_linux route 永久路由_格格巫 MMQ!!的博客-程序员资料

redhat和centos添加永久路由的方法:vi /etc/sysconfig/static-routes(该文件默认可能没有,自行创建)添加以下任意一条参数即可,两种写法不同但效果一样1.any net 192.168.5.0/24 gw 192.168.2.52.any net 192.168.5.0 netmask 255.255.255.0 gw 192.168.2.5添加后无论发生设备重启还是网络服务重启都会自动添加路由,也就是永久已验证!在 /etc/sysconfig/networ

推荐文章

热门文章

相关标签