总目录《UDS协议从入门到精通UDS速查手册》完结撒花版前言一、UDS简介1.1 从汽车诊断说起1.2 两种常见的诊断协议OBD UDS二、相关术语介绍2.1 Service IDSID2.2 诊断请求Diagnostic Request2.3 正响应/负响应Positive/Negative Response2.3.1 正响应报文格式2.3.2 负响应报文格式2.4 负响应码Negative Response Code - NRC三、UDS服务详述3.1 诊断和通信管理类3.2 数据传输类3.3 存储数据传输类3.4 IO控制类3.5 例程功能类 - 调用ECU内部预置函数3.6 上传下载类四、写在最后本专栏仅用于讲解UDS协议于2024年6月24日已将所有UDS服务讲解更新完毕。博主能力有限专栏文章中不免有疏漏之处欢迎并感谢众多同学提出宝贵意见博主会仔细查阅相关内容并及时修正。另外结合部分同学建议后续将添加对实际工况下UDS日志的分析、UDS中对OTA相关内容的梳理、以及对UDS协议中会话层时间参数的讲解这些文章将陆续更新在新专栏车载系统开发精品文章集锦中欢迎关注共同学习进步。博主已开通同名公众号通过文末或主页二维码关注博主将为你推送最新、最细、最硬核的车载系统知识和嵌入式开发知识前言汽车软件开发/测试工作中不免涉及到UDS协议。实际上该协议的应用不仅仅局限于最常见的汽车故障检测工作中比如4S店对汽车故障的快速定位在车载ECU间的通信、数据传输、ECU软件的升级刷写等场景中都有着广泛的应用。经查阅各类资料和网络文章仔细阅读14229-1协议标准集众多网友、博主以及自己对该协议的理解在本专栏针对UDS 14229-1中定义的全部26种服务作详细阐述并以图示方式给出直观的通信示例可以作为一部中文UDS手册便于随手查询。一、UDS简介1.1 从汽车诊断说起汽车诊断是指对汽车进行故障检测和定位的过程它是确保汽车安全和性能的重要环节。在汽车维修和开发工作中诊断工具是必不可少的设备。通过诊断工具技师可以读取车辆的故障码进而定位故障原因。汽车软件开发或者测试人员也可以通过诊断工具连接到汽车的电子系统读取和解析车辆的实时数据。而汽车诊断协议就是指诊断工具与车辆之间的通信协议。目前市场上最常见的两种汽车诊断协议是OBDOn-Board Diagnostics和UDSUnified Diagnostic Services。Tip诊断工具也就是下文常提到的Tester它可以是任何实现了通信协议的东西比如可以是一个实现了UDS协议的上位机软件、实际的硬件设备4S店的诊断仪甚至是一个实现了UDS协议的系统中的测试脚本。在过去的几十年里汽车诊断系统经历了巨大的变革和发展。起初汽车诊断主要依靠人工检测和经验判断来发现问题。随着科技的进步电子系统在汽车中的应用越来越广泛汽车诊断也逐渐走向了自动化和数字化。从最初的简单故障指示灯到现在的复杂电子控制单元ECU和诊断协议的应用汽车诊断技术已经取得了长足进步。1.2 两种常见的诊断协议OBD UDSOBD和UDS是两种常见的诊断协议它们在目标和应用领域上存在一些区别。OBD协议主要用于监测车辆的排放情况通过读取车辆的故障码来判断是否符合排放标准。而UDS协议则更加全面和灵活在各个ECU上是一种通用型的协议。OBDOn-Board Diagnostic主要用于跟汽车排放系统相关的ECU电子控制单元汽车上的板级控制器的诊断。OBD协议分为两种OBD-I和OBD-II。OBD-I是由美国为当时制造的加州汽车所制定的排放法规随后这套法规被逐渐标准化于是又提出了OBDII标准包括标准化的车载ECU数据诊断接口SAE-J1962也就是现在常说的OBD接口、标准化的诊断解码工具SAE-J1978、标准化的诊断协议ISO 9141-2、ISO 14230-4、ISO 15765-4、标准化的故障码定义SAE-J2012、ISO 15031-6、标准化的维修服务指南SAE-J2000OBD-II在1996年开始实施目前已经成为全球汽车行业的标准。因此OBD标准可以看作一系列标准的集合是具有强制标准需要参照的是由法规要求的其最初目的是环保用于汽车排放系统相关的ECU上。UDSUnified diagnostic servicesUDSUnified Diagnostic Services是一种通用的汽车诊断协议由欧洲汽车制造商协会ACEA和日本汽车制造商协会JAMA共同制定。它与OBD最大的区别就在于“Unified“上是面向整车所有ECU的。单就UDS而言它只是一个应用层协议ISO 14229-1不关心应用层以下的实现比如执行该协议的应用层程序不关心通过何种物理传输方式实现与ECU硬件的通信因此它既可以基于CAN线通信去实现也能在Ethernet上实现。并且UDS提供的是一个诊断服务的基本框架定义了一系列的诊断服务和通用化的诊断流程主机厂和零部件供应商可以根据实际情况选择实现其中的一部分或是自定义出一些私有化的诊断服务来所以基于UDS协议的诊断又常常被称为Enhanced diagnosic增强型诊断。可见UDS不是法规要求的没有统一实现标准可以基于该协议提供的诊断请求及响应格式进行二次开发。简言之UDS服务主要用于诊断设备TesterClient和ECUServer之间的诊断通信诊断设备Tester发送诊断请求requestECU给出诊断响应response通过这种“一问一答”的形式让目标ECU执行一些期望的操作而UDS就是为不同类型诊断功能的request和response定义了统一的内容和格式。二、相关术语介绍2.1 Service IDSID在UDS协议中Service IDSID是指服务标识符用于标识要执行的服务。每个服务都有一个唯一的SID在诊断会话中通过SID来区分要执行/响应哪种服务请求。14229-1中定义了26种服务并将这些服务分为6大类诊断和通信管理类、数据传输类、存储数据传输类、输入输出控制类、例程功能类、上传下载类。Tip表格中标黄部分为常用的服务其他的不常用。大类SID (Hex)诊断服务名服务Service诊断和通信管理类10诊断会话控制Diagnostic Session Control11ECU复位ECU Reset27安全访问Security Access28通讯控制Comunication Control3E待机握手Tester Present83访问时间参数Access Timing Parameter84安全数据传输Secured Data Transmission85控制DTC的设置Control DTC Setting86事件响应Response On Event87链路控制Link Control数据传输类22通过ID读数据Read Data By Identifier23通过地址读取内存Read Memory By Adress24通过ID读比例数据Read Scaling Data By Identifier2A通过周期ID读取数据Read Data By Periodic Identifier2C动态定义标识符Dynamically Define Data Identifier2E通过ID写数据Write Data By Identifier3D通过地址写内存Write Memory By Adress存储数据传输类14清除诊断信息Clear Diagnostic Infomation19读取故障码信息Read DTC Infomation输入输出控制类2F通过ID控制输入输出Input/Output Control By Identifier例程功能类31例行程序控制Routine Control上传下载类34请求下载Request Download35请求上传Request Upload36数据传输Transfer Data37请求退出传输Request Transfer Exit38请求文件传输Request File Transfer2.2 诊断请求Diagnostic Request诊断请求是指诊断工具向车辆发送的请求消息用于请求执行某个服务。诊断请求消息由三个部分组成SID、子功能和实际数据。其中SID用于标识要执行的服务至于子功能指的是这个服务还能更进一步的划分或者具有启动/暂停之类的子功能。尽管服务类型不尽相同但UDS针对这些服务定义了统一的诊断请求包的格式每个诊断请求由1个Byte的SID 1个Byte的 sub-function实际上是1bit spr 7bit sub-function具体解释看下文 不定长的实际数据构成其格式如下所示Tipspr存在的目的是告诉ECU针对某个服务请求是否需要发送正响应数据用于减少ECU发送不必要的响应节约系统资源spr1 抑制正响应即ECU不给出正响应spr0 需要ECU给出正响应如果某个服务没有sub-function即没有第二个字节那默认是要发正响应的。2.3 正响应/负响应Positive/Negative Response诊断工具向车辆发送服务请求后如果服务执行成功则返回的响应消息称为正响应反之返回的响应消息称为负响应。2.3.1 正响应报文格式正响应报文的字节组成格式如下所示——举个最简单的例子0x10-诊断会话控制服务目标ECU诊断仪目标ECU诊断仪诊断仪发送请求byte1的10是SIDbyte2的01是sub-function且可知Bit 7是0即不抑制正响应目标ECU给出响应byte1是SID0x40 50byte2是sub-funtion10 01150 012——再举个不带sub-function的例子0x22-通过DID读数据目标ECU诊断仪目标ECU诊断仪诊断仪发送请求byte1的22是SIDbyte2和byte3是DID数据ID由于没有sub-function,因此默认需要目标ECU给出正响应目标ECU给出响应byte1的62是SID0x40byte2和byte3是DIDbyte4是读到的数据22 F1 86162 F1 86 0122.3.2 负响应报文格式负响应消息由两部分组成SID和负响应码NRC。SID用于标识响应的服务负响应码指示服务执行失败的原因。负响应报文的字节组成格式如下所示——还是拿0x10-诊断会话控制服务来举例目标ECU诊断仪目标ECU诊断仪诊断仪发送请求现在sub-function是05了假设系统不支持这个sub-function目标ECU给出响应byte1是代表负响应的固定值0x7F10为SID12为NRC指代sub-function not supported错误10 0517F 10 1222.4 负响应码Negative Response Code - NRC在UDS协议中负响应码用于指示服务执行失败的原因。NRC用一个字节表示每个取值都对应一种不同的错误类型。NRC码含义NRC码含义0x01 - 0x0f暂保留0x78收到请求延迟响应0x10未知错误服务被拒绝0x79 - 0x7d暂保留0x11不支持该服务请求0x7e当前会话下子功能不支持0x12不支持子功能0x7f当前会话下服务不支持0x13消息长度或格式错误0x80暂保留0x14请求信息长度超出0x81rpm每分钟转速太高0x15 - 0x20暂保留0x82rpm太低0x21服务端正忙0x83当前引擎正在运行0x22条件不满足0x84当前引擎未运行0x23暂保留0x85截止当前时间引擎运行时间太短0x24请求顺序错误0x86温度过高0x25指令已经被接收但是未被执行0x87温度过低0x26失败的操作导致当前操作无法执行0x88车速过高0x27 - 0x30暂保留0x89车速过低0x31参数错误0x8a油门/踏板过高超过了当前要求的最大阈值0x32暂保留0x8b油门/踏板过低0x33安全校验未通过0x8c变速器档位不在空档0x34暂保留0x8d变速器档位不在排挡0x35密钥不匹配0x8e暂保留0x36已达到解锁最大错误次数0x8f制动开关没有关闭0x37超时时间未到0x90换挡杆不在驻车档0x38 - 0x4f由扩展数据链路安全性保留0x91变矩器离合器锁定0x50 - 0x6f暂保留0x92电压过高0x70不允许上传下载0x93电压过低0x71数据传输中断0x94 - 0xef暂保留特定条件下0x72擦除或烧写内存错误0xf0 - 0xfe为汽车制造商保留0x73块序列计数错误0xff暂保留0x74 - 0x77暂保留以上内容是对UDS协议及一些入门基础知识的阐述在接下来的篇章中将详细介绍UDS协议中定义的全部26种服务。每一种服务都将被仔细解析和阐述以便大家能够全面理解其功能和用法。各篇章还将通过图示方式给出直观的通信示例帮助大家更好地理解UDS协议的实际应用。三、UDS服务详述Tip各表格中标黄的为常用服务对于不常用服务的讲解会相对没有那么深入和精致如有特殊需要尽可提出博主会尽其所能细化相关不常用服务的讲解3.1 诊断和通信管理类诊断和通信管理类是UDS服务的核心部分它提供了与ECU进行通信以及执行诊断操作的基本功能。这些功能包括诊断会话的建立和终止、ECU的重置和诊断通信的管理。通过诊断和通信管理类技术人员可以与ECU进行交互获取ECU的状态信息并执行各种诊断操作。主要包括如下服务Service点击即可跳转功能简述0x10诊断会话控制客户端控制目标ECU的诊断会话状态。0x11ECU复位客户端强制让目标ECU执行复位操作。0x27安全访问客户端请求解锁受保护的目标ECU。0x28通讯控制客户端控制目标ECU的通信行为 (在特定情况下启用或禁用ECU的某些通信功能)。0x3E待机握手客户端向目标ECU表明它仍然存在。0x85控制DTC的设置客户端控制目标ECU中dtc的设置。0x83访问时间参数客户端使用此服务读取/修改当前通信的定时参数。0x84安全数据传输客户端使用此服务执行具有扩展数据链路安全性的数据传输。0x86事件响应客户端请求设置和/或控制目标ECU中的事件机制。0x87链路控制客户端请求控制通信波特率。3.2 数据传输类数据传输类是用于在ECU和诊断工具之间传输数据的UDS服务类别。它提供了可靠的数据传输机制确保数据的完整性和准确性。数据传输类包括数据的读取和写入功能允许技术人员读取和修改ECU中的数据。此外数据传输类还支持数据的块传输以提高数据传输的效率。主要包括如下服务Service点击即可跳转功能简述0x22通过ID读数据客户端请求读取由提供的DID标识的记录的当前值。0x2E通过ID写数据客户端请求写入由提供的DID指定的记录数据。0x23通过地址读内存客户端请求读取所提供内存范围的当前值。0x24通过ID读缩放数据/换算信息客户端请求读取由提供的DID标识的比例数据。0x2A通过周期读ID数据客户端请求调度目标ECU中的数据进行周期性传输。0x2C动态定义标识符客户端请求动态定义数据标识符这些标识符随后可能被0x22-读DID服务读取。0x3D通过地址写内存客户端请求覆盖提供的内存范围。3.3 存储数据传输类存储数据传输类是一种特殊的数据传输类别用于在ECU和诊断工具之间传输存储数据。存储数据可以是ECU的配置信息、故障码或日志文件等。通过存储数据传输类技术人员可以读取和清除ECU中的存储数据以便进行故障诊断和维修。所涉及的两个服务都是常用服务类型。主要包括如下服务Service点击即可跳转功能简述0x14清除诊断信息允许客户端从目标ECU清除诊断信息(包括dtc、捕获的数据等)。0x19读取故障码信息允许客户端从目标ECU请求诊断信息(包括dtc、捕获数据等)。3.4 IO控制类IO控制类是用于控制ECU输入输出IO功能的UDS服务类别。它提供了对ECU输入输出功能的访问和控制包括读取和设置ECU的输入输出状态。通过IO控制类技术人员可以与ECU的IO功能进行交互实现对车辆系统的控制和监控。主要包括如下服务Service点击即可跳转功能简述0x2F通过ID控制输入输出客户端请求控制特定于目标ECU的输入/输出。3.5 例程功能类 - 调用ECU内部预置函数例程功能类是一种特殊的UDS服务类别它允许技术人员调用ECU内部预置的函数。这些函数可以执行特定的操作如执行自检、执行校准或执行特殊功能。通过例程功能类技术人员可以利用ECU内部的功能来进行诊断和维修。主要包括如下服务Service点击即可跳转功能简述0x31例行程序控制客户端请求启动、停止目标ECU中的例程简单理解就是个函数或请求例程结果。3.6 上传下载类上传下载类是用于在ECU和诊断工具之间进行数据上传和下载的UDS服务类别。它提供了将数据从ECU上传到诊断工具或将数据从诊断工具下载到ECU的功能。上传下载类可用于备份和恢复ECU配置、更新ECU软件或执行其他数据传输操作。主要包括如下服务Service点击即可跳转功能简述0x34请求下载客户端请求协商从客户端到目标ECU的数据传输。0x36数据传输客户端向目标ECU发送数据(下载)或向目标ECU请求数据(上传)。0x37请求退出传输客户端请求终止数据传输。0x35请求上传客户端请求从目标ECU到客户端的数据传输。0x38请求文件传输客户端请求在目标ECU和客户端之间进行文件传输。四、写在最后汽车软件开发、测试、维修等过程中UDS协议的使用已经越来越广泛了不管底层基于哪种物理总线实现ECU间或者诊断设备和ECU间的通信应用层大多都会经过UDS协议封装数据包。但这个协议细节众多直接看ISO 14229-1标准文件的话学习成本太高对不常读英文手册的人来说看起来更是尤为烦躁而网上很多文章通常直接截取标准文件中的图片加以简单说明同样不够友好。因此开设该专栏力争针对ISO14229-1标准做一份细致全面的中文手册以便随手查阅。博主从事车载操作系统的开发工作以ECU OTA升级为主要工作内容对UDS、ECU软件刷写、安全启动功能以及部分BSW模块的开发有一定深度的认知后续将陆续开设各类专栏一方面对工作涉及的内容做较为全面的总结一方面与大家分享希望帮助更多的朋友进军汽车软件开发行业共同学习进步专栏精心制作历时半年码字不易期间收获众多网友的宝贵意见或好评郑重感谢。本专栏将于2024年7月15日设置为付费专栏此日期之前任何对于专栏内容曾做出提问、意见、评论的小伙伴均可将截图记录私信给博主并附上你的邮箱最迟两日内你的邮箱会收到该专栏的pdf版本。Tippdf版本丧失跳转以及鼠标悬停时名词解释的功能 返回专栏总目录《UDS协议从入门到精通UDS速查手册》