UDS诊断入门(一)

01前言UDS协议即ISO14229,是Unified Diagnostic Services,统一诊断服务,是诊断服务的规范化标准,比如读取故障码应该向ecu发什么指令,读数据流又是发什么指令。OBD是关注车辆售后实时排放的理念形成的行业规范,而UDS是诊断服务的统一化规范,只是应用层的规范。UDS(Unified diagnostic services),与OBD最大的区别就在于“Unified”上,它是面向整车所有ECU(电控单元)的,而OBD是面向排放系统ECU的。单说UDS而言,它只是一个应用层协议(ISO 14229-1),所以它既可以在CAN线上实现,甚至也能在Ethernet上实现(DoIP, Diagnostic over Internet protocol)。并且,UDS提供的是一个诊断服务的基本框架,主机厂和零部件供应商可以根据实际情况选择实现其中的一部分或是自定义出一些私有化的诊断服务来,所以基于UDS协议的诊断又常常被称为Enhanced diagnosic(增强型诊断),UDS不是法规要求的,没有统一实现标准,其优势在于方便生产线检测设备的开发,同时更大的方便了售后维修保养和车联网的功能实现。ISO 14229-1也就是UDS协议仅对应用层做出了定义,物理层有双绞线和光纤供用户选择,数据链路层采用CAN总线的ISO 11898-1协议,针对Classical CAN仅有8个字节的数据场与应用层可处理多帧数据的矛盾,ISO 15765-2对网络层进行了定义。CAN的8字节数据场会腾出一帧来表示网络层的信息。下图右侧是排放相关的协议,ISO 15031-5主要针对OBD协议,为法规强制要求车厂满足的协议。

UDS本质上是一系列的服务,共包含6大类26种。每种服务都有自己独立的ID,即SID。SID是服务标识符的缩写。UDS本质上是一种定向的通信,是一种交互协议(Request/Response),即诊断方给ECU发送指定的请求数据(Request),这条数据中需要包含SID。如果是肯定的响应(Positive Response),回复[SID 0x40],就是请求10,响应50;请求22,响应62,回复的是一组数据。如果是否定的响应(Negative Response),回复7F SID NRC,肯定响应和否定响应的形式一定要熟记。UDS的26种服务中,如下图所示。

重点:本文由于篇幅所限,仅介绍诊断和通讯管理单元所使用的服务,其余服务将在后续的文章中陆续发出供读者们参考。欢迎转发关注本账号关注后续文章。02服务详解2.1 诊断会话控制(0x10)2.1.1 服务描述此诊断会话控制服务是用来切换诊断会话模式的服务,诊断会话在ECU中启用一组特定的诊断服务和/或功能。ECU通过此服务可以报告数据链路层特定参数值的能力启用的诊断会话(例如定时参数值)。ECU总会保持其中一种会话模式。当电源上电时,会首先启动默认会话模式,只要保持电源供电,未切换成其他会话模式,默认会话模式就会一直运行。

14229规定的诊断会话模式切换图1、默认会话:当ECU处于默认会话模式,且服务器请求进入默认会话模式,ECU会复位默认会话模式,ECU会复位所有已经被激活的控制和改变的设置,但不会改变不被擦除区域所设置的内容。2、其他会话:当诊断设备请求从默认会话进入任一非默认会话时,电控单元将复位所有在默认诊断会话模式下通过事件响应服务($86)确认的事件。3、从非默认诊断会话模式跳转到非默认诊断会话模式(包括跳转到当前诊断会话模式)时,它将初始化诊断会话模式,即所有通过事件响应服务($86)确认的事件都会被复位,且安全性被重新激活。但是该情况下,所有被配置的周期性的服务($31)继续保持有效;且通讯控制服务($28 服务)和控制故障码设置服务($85 服务)的状态不会被影响,例如,诊断会话模式转换前正常通讯时被禁止的则诊断会话模式转换后正常通讯依然被禁止。4、当电控单元从非默认诊断会话模式跳转到默认诊断会话模式后,所有经事件响应服务($86) 确认的事件都将被复位,安全性将重新被激活;所有被配置的周期性的服务($31 及$3E)将失效。此外,通讯控制服务($28 服务)和控制故障码设置服务($85 服务)的状态也会被复位,例如,当前诊断会话模式下正常通讯被禁止,回到默认会话模式后该禁止功能失效,正常通讯将被恢复。电控单元将重置在激活的会话中所有激活的/初始化的/改变的设置/控制,但是不支持向EEPROM 进行刷写操作。下图定义了默认会话模式和非默认会话模式所支持的服务,所有非默认会话支持的服务需要保持激活该模式

2.1.2 请求数据定义

其中10服务的sub-function在ISO14229-1中常用的方式有以下定义Bit 6-0Description0x00ISOSAE保留0x01默认会话模式控制器能够进入默认诊断会话模式,且不需要任何超时处理(例如,不需要链路保持服务保持会话模式有效)。如果控制器中在非默认会话模式下,且再次进入默认会话模式后,需遵循模式跳转准则—控制器在发送肯定响应报文时,应当立刻停止当前诊断会话模式并启动当前被请求的新的诊断会话模式。—如果控制器在非默认模式下处于解锁状态,当诊断设备请求进入默认模式时,控制器需在发送诊断会话控制的肯定响应之后重新被锁定。—当控制器发送否定响应报文时,当前会话将继续保持有效。如果请求数据链路初始化,那么初始化之后控制器将进入默认诊断会话模式。在初始化之后,不需要发送诊断会话控制服务进入默认会话。0x02编程会话模式此会话模式可以激活控制器刷新功能支持的所有诊断服务。当控制器在boot软件里运行刷新会话模式时,可以通过”诊断设备发送ECUReset服务” ,”发默认模式请求” ,”控制器会话超时”退出刷新会话模式。如果控制器在boot软件里运行时,接收到切换到默认会话模式的请求,或者会话层通讯超时,并且针对这两种情况,控制器已存在有效的应用软件,则控制器将重新启动应用软件。0x03拓展诊断会话此诊断会话模式可以用于启用所需的所有诊断服务,支持系统中例如“怠速,CO值等”功能的调整,还可以用于其他未明确的功能调整。0x04安全系统诊断会话此诊断会话模式可以使能所有诊断需求支持的安全系统相关的功能(如弹出安全气囊)2.1.3 肯定响应数据定义

2.2 ECU复位服务(0x11)2.2.1 服务描述此服务用于请求ECU复位,将根据服务端请求的复位类型执行相应的复位,请求ECU复位的肯定响应需要在ECU复位前发出,冰球ECU完成复位后,重新启动ECU将激活默认会话模式。2.2.2 请求数据定义

其中11服务的sub-function在ISO14229-1中常用的方式有以下定义Bit 6-0Description0x00ISOSAE保留0x01硬复位该参数值定义一个“硬复位”条件,该条件模拟的是控制器从蓄电池断电到上电/启动的典型操作。0x02点火钥匙开关复位该参数值定义一个条件,该条件类似驾驶员将点火钥匙从OFF档转到ON档。该复位条件模拟的是一个key-off-on序列(也就是中断电源开关)。通常,执行该动作时ROM是被保护的,但是RAM将重新初始化。0x03软复位该参数值定义一个“软复位”条件,该条件引起控制器立即重新启动可应用的应用程序。一个典型动作就是重新启动应用层,但是不需要初始化之前已学习的配置数据、自适应因子和其它长期调整值。0x04使能快速下电该参数值适用于非点火供电而是电源供电,因而下电只是处于休眠状态而不是完全关机,当电源供电来时,ECU可以快速上电工作,减少开机时间。0x05禁止快速下电该参数值是为了关闭04参数启用的使能快速下电模式。2.2.3 肯定响应数据定义

2.3 安全访问(0x11)2.3.1 服务描述此服务的目的是用于提供一种访问数据或者诊断服务出于安全原因限值进入的方法,如排放,上传/下载数据可能需要安全访问,当错误的数据上传进ECU中可能会导致电子设备损坏。使用此服务的典型方式如下:-服务器请求“seed”-ECU发送“seed”-服务器发送“key”-ECU验证key有效会进行解锁请求“seed”的sub-function值应为一个奇数值,其相同安全等级的“key”的sun-function应为“seed”的sub-function值加1。在一个确切的时间内,只能有一个安全等级被激活,例如如果激活的请求“seed”为03等级的安全请求,则无法再同时激活“seed”为05等级的安全请求。2.3.2 请求数据定义2.3.2.1 send seed

2.3.2.2 send key

其中27服务的sub-function在ISO14229-1中常用的方式有以下定义Bits 6 – 0Description0x00ISOSAE保留0x01请求seed服务器发送的seed请求0x02发送key服务器根据seed计算出的key参数值0x03,0x05,0x07-0x41请求seed服务器发送的seed请求0x04,0x06,0x08-0x42发送key服务器根据seed计算出的key参数值2.3.3 肯定响应数据定义

2.4 通讯控制(0x28)2.4.1 服务描述此服务用于开启/关闭数据的发送/接收(应用报文/网络管理报文的管理)2.4.2 请求数据定义

其中28服务的sub-function在ISO14229-1中常用的方式有以下定义Bits 6 – 0Description0x00允许接收和发送此参数值对ECU特定的通讯类型的数据允许接收和发送0x01允许接收禁止发送此参数值对ECU特定的通讯类型报文允许接收但禁止其发送0x02禁止接收允许发送此参数值对ECU特定的通讯类型报文禁止接收但允许其发送0x03禁止发送和接收此参数值对ECU特定的通讯类型的数据禁止接收和发送0x04允许接收禁止发送增强型地址的数据此参数值定义了总线的主节点应将其先关的子总线节点切换到仅诊断调度模式0x05允许接收和发送增强型地址的数据此参数值定义了总线的主节点应将其先关的子总线节点切换到仅应用调度模式0x06-0x3FISOSAE保留请求的数据类型参数定义Bits 6 – 0Description0x01正常报文0x02网络管理报文2.4.3 肯定响应数据定义

2.5 待机握手(0x3E)2.5.1 服务描述该服务用于告知一个控制器(或多个控制器),诊断设备仍然与车辆连接,先前激活的特定诊断服务和/或通讯仍然处于激活状态。该服务用于保持一个或多个控制器处于非默认会话模式。当没有其它诊断服务执行时,必须周期性的发送链路保持请求报文,以阻止控制器自动返回默认会话模式。2.5.2 请求数据定义

其中3E服务的sub-function在ISO14229-1中常用的方式有以下定义Bits 6 – 0Description0x00零子功能此参数值定义了该服务肯定响应数据定义的唯一支持的子功能0x01-0x7FISOSAE保留2.5.3 肯定响应数据定义

2.6 访问时间参数(0x83)2.6.1 服务描述此服务用于在通信链路处于激活状态时读取和修改通信链路的默认定时参数,此服务的使用很复杂,取决于服务器的能力和数据链路拓扑。每个诊断会话只支持一个扩展的定时参数集。因为服务器支持不同的扩展定时参数集,建议仅使用物理寻址的服务。推荐使用一下流程使用此服务-进入诊断会话服务-访问时间参数服务(读取拓展时间参数设置)-访问时间参数服务(设置给定的时间参数值)对于服务器需要发送响应的情况,在服务器发送了访问时间参数肯定响应消息后,客户机和服务器应该激活新的计时参数设置。如果不允许响应消息,客户端和服务器应在发送/接收请求消息后激活新的计时参数。服务器和客户端会在切换到另一个或者相同的诊断会话后,应将其计时参数重置为默认值2.6.2 请求数据定义

其中83服务的sub-function在ISO14229-1中常用的方式有以下定义Bits 6 – 0Description0x00ISOSAE保留0x01读取拓展时间参数设置0x02设置时间参数为默认值0x03读取当前激活的时间参数值0x04设置给定的时间参数值2.6.3 肯定响应数据定义

2.7 安全数据传输(0x84)2.7.1 服务描述该服务的目的是传输受保护的数据,防止来自第三方的攻击,这可能会危及数据安全。如果客户端打算以安全模式使用本文档定义的诊断服务,则可以使用安全数据传输服务。它还可以用于在客户机和服务器之间以安全模式传输符合某些其他应用程序协议的外部数据。安全模式是指通过加密方法保护传输的数据。下图为安全数据传输服务子层,为了以安全模式执行诊断服务,必须在服务器和客户机应用程序中添加安全子层。

2.7.2 请求数据定义

2.7.3 肯定响应数据定义

2.8 诊断故障码控制设置(0x85)2.8.1 服务描述诊断故障代码设置控制服务用于通过诊断设备停止或恢复控制器中诊断故障码的设置功能。诊断故障代码设置控制服务请求报文可用于停止一个单独控制器或一组控制器的诊断故障码设置。如果被请求的控制器不能停止诊断故障码设置,应反馈诊断故障代码设置否定响应报文并指示拒绝的原因。一旦子功能为“开启”的诊断故障代码设置请求被执行或发生会话层超时(控制器回到默认会话),则DTC状态位信息应继续更新。如果在激活的会话模式下发送子功能为“开启”或“关闭”的此服务请求,且激活的会话模式支持此服务,即使请求的诊断故障代码设置状态已经激活,控制器仍需发送肯定响应。如果控制器发送清除诊断信息(14hex)服务,诊断故障代码设置应不会阻止控制器DTC内存的复位。如果控制器复位被成功执行,那么应重新允许诊断故障代码设置。2.8.2 请求数据定义

其中83服务的sub-function在ISO14229-1中常用的方式有以下定义Bits 6 – 0Description0x00ISOSAE保留0x01开启此参数值定义开启检测故障设置条件,记录故障0x02关闭此参数值定义关闭检测故障设置条件,不记录故障2.8.3 肯定响应数据定义

2.9 事件响应(0x86)2.9.1 服务描述此服务描述了服务器当出现了特定的事件时开启或停止传输数据。该服务提供了在服务器中发生指定事件时自动执行诊断服务的可能性。客户端指定事件发生时要执行的事件(包括可选的事件参数)和服务(包括服务参数)。有关客户机和服务器行为的简要概述,请参见下图。

使用此服务时应遵循以下规则:a)可以在任何会话下设置和激活86服务,包括默认会话。不需要发送诊断仪在线命令来维持该服务的激活状态。b)若一个诊断服务正在处理中发生了一个指定的事件,不管是接收的这个请求命令正在处理还是正在执行或者是正准备发送响应报文(包括负响应NRC78)(若抑制正响应位为0),那么应该延迟执行记录中的服务。c)若正在处理某一个事件,多个事件发生了,那么OEM应当定义这类多事件的处理方式。d)当在事件时间窗口内满足了相关事件的逻辑且出现了此事件,服务器应该执行serviceToRespondToRecord 中的服务。e)一旦该服务被start命令初始化,服务器就要一直响应诊断仪(它设置了事件逻辑并启动了该事件)直到事件窗口时间结束。f)发送非默认诊断会话命令,都将会终止86服务,不管它是跟当前会话是相同或不同。之前在默认会话下激活的所有86服务,当回到默认会话时将再次就被激活。g)多个86服务可以同时运行去激活和停止诊断服务。比如,不同的事件类型,服务响应历史。开始和停止子服务应该能总是控制所有已初始化的86服务。h)若一个86服务已经被设置,那么应遵循以下要求:1、若事件类型子服务参数的bit6为0,即不存储事件,那么当服务器断电后,该事件被终止。当再次上电或服务后,服务器不能再次运行该86服务。2、若事件类型子服务参数的bit6为1,即存储事件。3、在服务器一个上电周期后,根据86服务的设置,它应当假设发送这样的响应。因此若设置事件窗口时间为无限时间,该位才允许为1.i)只有在事件类型为停止响应、开始响应、清除响应时,抑制正响应位才可以被置为1.当指定事件被监测到时,服务器将总是针对事件触发的响应发出响应。j)只有设置了有限的窗口时间且时间已到,服务器应该发送最后的响应来表示该服务。若在设置的时间内通过某种方式(比如发送了停止该服务的命令或改变了会话模式)终止了该服务,不发送最后的响应。k)为了避免正常诊断操作的干扰,仅仅针对短暂的事件和条件推荐使用该服务。一旦监测到事件,服务器应该发出响应报文,注意只发送一次。2.9.2 请求数据定义

其中86服务的sub-function在ISO14229-1中常用的方式有以下定义Bits 5 – 0Description0x00停止事件响应0x01故障码状态改变0x02计数中断0x03数据标识符改变0x04报告激活状态0x05开启事件响应0x06明确事件响应0x07比较给定值事件类型定义如下:Bits 6 – 0Description0x00不存储事件该值表示当服务器断电,服务器在复位或上电后不继续响应事件诊断服务(即事件响应服务终止),事件将终止。0x01存储事件此参数值定义:1)在默认会话的ROE启动或停止请求,重置或上电后事件应恢复停止或发送服务响应根据事件响应 (即事件响应服务被恢复)。2)对于任何ROE设置事件逻辑请求,该请求的事件逻辑应该被持久化存储,直到事件逻辑被显式清除(通过事件清除)或事件逻辑被同一个类别的新的ROE设置事件逻辑请求覆盖。2.9.3 肯定响应报文定义

2.10 链路控制(0x87)2.10.1 服务描述链路控制服务用于控制诊断设备和控制器之间传输诊断数据的通讯速率。若数据链路层在激活的诊断会话下可以进行波特率转换,则可以选用此服务。本服务用于数据链路层的波特率转换。为了实现功能请求,多个控制器必须同时转换波特率,此时波特率转换将分为两个步骤:- 步骤1:诊断设备确认是否可以执行波特率转换并告知控制器将要使用的波特率。每个控制器在诊断设备执行步骤2前应给出肯定响应(suppressPosRspMsgIndicationBit = FALSE)。此步骤并未实际执行波特率转换。- 步骤2:诊断设备实际请求波特率转换。只有确认可以执行波特率转换(步骤1已执行)才能执行此步骤。为了不影响通讯功能,当波特率转换时,推荐使控制器不做任何响应(suppressPosRspMsgIndicationBit = TRUE),因为可能一个控制器已经完成新的波特率转换,而其他控制器还需要发送响应报文(避免波特率不匹配)。注:此服务用于非默认会话。会话层定时器时间超时会导致控制器转换到正常的工作速率。执行控制器复位服务后结果相同。转换到另一个非默认会话不会影响波特率。2.10.2 请求数据定义

其中87服务的sub-function在ISO14229-1中常用的方式有以下定义Bits 6 – 0Description0x00ISOSAE保留0x01转换到固定的波特率此参数值用于验证链路控制标识符数据预定义的参数值是否可以执行转换0x02转换到指定的波特率此参数值用于验证是否可以执行转换到指定的波特率0x03请求转换传输模式此参数值请求服务器转换到之前验证的波特率2.10.3 肯定响应数据定义

本文作者肝了几天晚上,吐血整理。篇幅过长,故拆分几篇文章,后续会陆续在本号发出,本文6700+字,学习UDS一篇文章就够了。建议收藏精读。请点亮在看,点击分享,以鼓励

(0)

相关推荐