ISO14229-1道路车辆-统一诊断服务(UDS-1

前言:

  1. 基于ISO14229-1,整理了一些车载控制器软件开发中常用的诊断服务,并补充了自己的理解与心得体会。

术语:

统一诊断服务:Unified diagnostic services(UDS)

  1. ISO 14229-1规定了诊断服务数据链路的独立要求, 以使诊断测试仪(客户端)可控制车载电子控制单元( ECU、服务器)的诊断功能。
  2. 常用术语及通俗解释:
    1. 功能寻址(Fun):广播式信息,总线上凡是支持该功能寻址服务的ECU节点都要响应Tester的请求。例如老师(Tester)询问全班学生(ECUs):“今天谁没带课本?”这是功能寻址请求。
    2. 物理寻址(Phy):点对点式信息,即只有特定节点响应Tester的请求。例如老师(Tester)询问学生(ECU_x):“张三你带课本了吗?”这是物理寻址请求。
    3. 禁止肯定响应:若某服务支持该功能,则当禁止肯定响应位为1时,该服务若是肯定响应,则不回消息;反之若是否定响应,则回复否定响应。例如老师(Tester)告知全班学生(ECUs):“开始默写课文!”,学生不用回应老师,只需要有问题的学生回应老师。比如张三说没带笔,李四说没带纸等等。该功能一般针对那些并不关心肯定响应而只需执行指令的场景,另外若所有ECU都回复正响应,也可能会导致总线上不必要的瞬时高负载。后文的3E服务就是禁止肯定响应的一个典型应用场景。

(常用)否定响应码:Negative Response Codes(NRC)

  1. 否定响应代码范围 0x00 – 0xFF。

    1. 0x00:肯定响应(Positive Response)
    2. 0x01-0x7F:通信有关的否定响应代码
    3. 0x80-0xFF:指示规定条件不正确的否定响应代码。

图表 1 否定响应码值与定义

字节值

否定响应代码(NRC)定义

助记符

0x00

positiveResponse

肯定响应

PR

0x10

generalReject

全部拒绝

GR

0x11

serviceNotSupported

服务不受支持

SNS

0x12

sub-functionNotSupported

子功能不受支持

SFNS

0x13

incorrectMessageLengthOrInvalidFormat

消息长度错误或格式无效

IMLOIF

0x14

responseTooLong

响应过长

RTL

0x22

conditionsNotCorrect

条件不正确

CNC

0x24

requestSequenceError

请求序列错误

RSE

0x31

requestOutOfRange

请求超过限值

ROOR

0x33

securityAccessDenied

安全访问被拒绝

SAD

0x35

invalidKey

无效密钥

IK

0x36

exceedNumberOfAttempts

超出最大尝试次数

ENOA

0x37

requiredTimeDelayNotExpired

要求的延时未到时间

RTDNE

0x78

requestCorrectlyReceived-ResponsePending

请求正确接收的响应暂停

RCRRP

0x7E

sub-functionNotSupportedInActiveSession

活动会话不支持子功能

SFNSIAS

0x7F

serviceNotSupportedInActiveSession

服务在活动会话中不受支持

SNSIAS

0x10h:DiagnosticSessionControl(诊断会话控制)服务

通用描述:

  1. 诊断服务器中应始终只有一个有效诊断会话。服务器上电时应始终启动默认诊断会话。
  2. 非默认诊断会话(programmingSession(编程会话)除外)中的诊断服务和诊断功能集是 defaultSession(默认会话)中提供的功能超集,这意味着切换到任何非默认诊断会话时还可以使用 defaultSession(默认会话)的诊断功能。
  3. 图例
    1. 图例1:包括10 01;11 xx;会话超时;上电;

      1. 停止基于事件响应(0x86)服务;
      2. 应终止 defaultSession(默认会话)中不支持的任何其他活动的诊断功能;
      3. 这不包括已编程入非易失性存储器中的长期更改。
    2. 图例2:可能需要满足特定安全条件:比如车辆静止或发动机停止;服务器可以仅允许一个带特定客户端标识符(客户端诊断地址) 的客户端启动一个新的具体诊断会话(例如,服务器可以要求仅带有客户端标识符 0xF4 的客户端启动 extendedDiagnosticSession(扩展诊断会话)):即可以通过物理寻址或者功能寻址。
    3. 图例3:每次执行3都会初始化诊断会话,意味着:
      1. 停止(0x86h)事件;
      2. 应重新锁定安全性。注意,锁定安全访问应重置依存于待解锁的安全访问的任何有效诊断功能(举例:某个inputOutputControl(输入输出控制)需要安全访问权限,当执行1003后,由于安全性被重新锁定,那么该安全性所衍生服务与状态也要被初始化,即此时应该将IO的控制权需交还ECU);
      3. 应维护好新会话中支持的且不依存于安全访问的所有其他有效诊断功能。例如:维持通信控制(28h)和控制 DTC 设置(85h)的状态。
    4. 默认会话模式可以直接切换到扩展会话模式,但是不能直接切换到编程会话模式,如果想进入编程会话模式,则必须先进入扩展会话模式。同样,编程会话模式不能直接进入扩展会话模式,只能进入默认会话模式。 ECU 复位以及 S3 定时器超时将导致 ECU 进入默认会话模式

图 1 诊断会话切换

默认会话(01)

  1. 只要服务器上电,就应始终进行默认诊断会话;
  2. 该会话模式不需要任何诊断应用程序的超时处理;
  3. 默认模式再一次被启动(上电或切换),则ECU 须复位所有此前会话模式下被激活的状态和控制服务:
    1. 安全访问(27h):重新锁定ECU,恢复至默认安全等级;
    2. 基于事件的响应(86h);
    3. 通信控制(28h):使能收发;
    4. 控制 DTC 设置(85h):使能DTC上报
    5. 输入输出控制(2Fh):交还控制权至ECU

编程会话(02)

  1. 如果 ECU 在引导程序中运行编程会话,只能通过如下退出02会话:

    1. 诊断工具发起的“ECU 复位”(11h) 服务
    2. 会话类型为默认会话的“诊断会话控制”(10h) 服务(重启APP)
    3. 或ECU 会话层超时退出(重启APP)。

扩展诊断会话(03)

  1. 该 diagnosticSession(诊断会话)可用于启用支持服务器内存中功能(如, “怠速、 CO 值等”)调整所需的所有诊断服务。该会话还可以用于启用与功能调整无特别相关性的诊断服务。

安全系统诊断会话(04)

  1. 该 diagnosticSession(诊断会话)可以用于启用支持安全系统相关功能所需的所有诊断服务(例如,气囊布置)

请求与应答:

图 2 请求消息定义

图 3 肯定响应消息定义

图 4 会话参数记录定义

图 5 会话参数释义

注:

定时器 P2server 的精度为 1ms

定时器 P2*server 的精度为 10ms

小结

  1. 若因S3Timer超时需退至默认会话,并重置以下内容:

    1. 27服务:重新锁定ECU恢复默认安全级别
    2. 31服务:重置历程控制
    3. 85h服务:开启DTC状态更新
    4. 28h服务:使能报文收发
    5. 2Fh服务:IO控制权交还至ECU。
  2. 若已在03会话,再次受到10 03请求,则只需重置如下内容:
    1. 27服务:重新锁定ECU恢复默认安全级别
    2. 27服务设计的安全性权限的衍生服务:
      1. 2Fh服务:IO控制权交还至ECU(因其一般需要解锁ECU)。
      2. 其他需要安全性解锁的服务。

0x11h: ECUReset( ECU 重置)服务

通用描述:

  1. 本服务请求服务器根据嵌入 ECUReset(ECU 重置)请求消息中的 resetType(重置类型)参数值的内容有效地执行服务器重置。应于在服务器中执行重置之前发送 ECUReset(ECU 重置)肯定响应消息(如需要)。服务器成功重置后,服务器应激活 defaultSession(默认会话)。

图 6 请求消息定义

请求消息子功能参数定义描述:

  1. 0x01 hardReset(硬件复位):

    1. 该条件模拟了服务器断开其电源(即电池)之后通常会执行的上电/启动序列。
  2. 0x02 keyOffOnReset(点火钥匙重置):
    1. 该重置条件应模拟钥匙关—开序列。
  3. 0x03 softReset(软重置)
    1. 使服务器立即重启应用程序。
  4. 0x04 enableRapidPowerShutDown(启用快速断电)
    1. 可强制进入休眠模式,并非单纯地关闭电源。休眠意味着关闭电源,但仍时刻准备着被唤醒(电池供电型)。子功能的目的是缩短点火开关转至关闭位置之后 ECU的待机时间。
  5. 0x05 disableRapidPowerShutDown(禁用快速断电)
    1. 该值要求服务器禁用此前已启用的“快速断电”功能。

图 7 肯定响应消息定义

图 8 响应消息数据参数定义

小结:

  1. 无。

0x27h: SecurityAccess(安全访问)服务

通用描述:

  1. 本服务旨在提供一种访问因安全、排放或安全因素而被限制访问的数据和/或诊断服务的方式。用于下载/上传例程或数据到服务器及从服务器读取具体内存位置的诊断服务可能需要进行安全访问。
  2. 任何时间都仅可有一个安全级别处于活动状态。例如,如果与 requestSeed(请求种子) 0x03 相关的安全级别处于活动状态,且测试仪请求成功地解锁了与 requestSeed(请求种子) 0x01 相关的安全级别,则此时仅应解锁与 requestSeed(请求种子) 0x01 相关的安全级别所支持的受保护功能。此前已由与 requestSeed(请求种子) 0x03 相关的的安全级别解锁的任何其他受保护功能应不再处于活动状态。

服务流程:

  1. 客户端请求“种子”:

    1. 子功能参数值应始终为奇数(比如0x27 01),且同一安全级别的相应“sendKey(发送密钥) ”子功能参数值应等于“requestSeed(请求种子) ”子功能参数值加一。
    2. 种子为随机数,且种子不能是如下两种数值:
      1. 00000000h:如果服务器支持安全性,但是接收 SecurityAccess(安全访问) “requestSeed(请求种子) ”消息时所请求的安全级别已经解锁,则该服务器应通过种子值等于零(0)的 SecurityAccess(安全访问)“requestSeed(请求种子) ”肯定响应消息服务做出响应。无论何时,服务器均不得就当前已锁定的指定安全级别发送全为零的种子。客户端应检查非零种子,通过这种方式确定服务器是否锁定为特定的安全级别。
  2. 服务器发送“种子”
    1. 此种子是诊断工具及 ECU 计算密钥的输入参数;
  3. 客户端发送“密钥”(适用于已接收到的种子)
  4. 服务器做出响应
    1. 确认“密钥”有效,并自行解锁
    2. 如果两个数字不匹配,则这将被视作一次错误的访问尝试。ECU 拒绝请求并发送否定响应码 35h“密钥无效”(InvalidKey), 安全访问失败计数加 1。当错误计数器数值达到 N 时, ECU 需要等待 T 秒方可接受下次“请求种子”(Request Seed) 报文并返回 36h(请求次数超出限制) 否定响应。 在这 T秒内, 任何“SecurityAccess- RequestSeed”都将不被处理, 且ECU 返回 37h(延时时间未到)否定响应。当 T秒等待时间结束,安全访问错误计数减 1 并允许另一次尝试。如果在这次尝试期间安全访问失败计数再次增加(由于密钥无效), 要求 ECU 在接受下次“请求种子”(Request Seed) 报文前再次等待 T 秒。
    3. 任何一次 ECU 被成功解锁(密钥有效),失败计数器都将被重置为零,ECU 上电或复位后默认处于闭锁状态, 失败计数器不能被重置
    4. 种子及密钥的请求和响应流程是强制性的,但以下情况发生时,该流程将被重置:
      1. ECU 发送了“SecurityAccess- SendKey”的肯定或否定响应
      2. ECU 发送了“SecurityAccess-RequestSeed”的否定响应
      3. 由于回到默认会话模式或被重启, ECU 回到闭锁状态

图 9 安全访问流程

图 10 安全访问策略

图 11 安全访问状态转换图

请求与响应示例:

图 12 请求消息定义-请求种子

图 13请求消息定义-发送密钥

图 14肯定响应消息定义

小结:

  1. 无。

0x28h CommunicationControl(通信控制)服务

通用描述:

  1. 本服务旨在开启/关闭服务器一些消息的传输和/或接收(例如,应用程序通信消息)。

图 15请求消息定义

图 16请求消息子功能参数定义(截取部分)

图 17请求消息数据参数定义

图 18肯定响应消息定义

小结:

  1. 无。

0x3Eh: TesterPresent(测试仪保活)服务

通用描述:

  1. 本服务用于在服务器内显示,客户端仍与车辆连接,且此前已激活的诊断服务和/或通信仍将保持活动状态。该服务用于将一个或多个服务器保持在非 defaultSession(默认会话)的诊断会话状态。通过周期性地传输 TesterPresent(测试仪保活)请求消息或者在无其他诊断服务时启用该服务,可防止服务器(因S3计数器超时)自动返回 defaultSession(默认会话)。

图 19请求消息定义

图 20请求消息子功能参数定义

图 21肯定响应消息定义

小结:

  1. 本服务仅用于维持会话与控制状态,无其他特殊执行规定,且一般推荐测试仪使用功能寻址方式发送3Eh 80h (SPRMIB = TRUE),即Tester告知ECU诊断设备保持在线,无需ECU回复肯定响应。

0x85h: ControlDTCSetting(控制 DTC 设置)服务

通用描述:

  1. 本服务客户端应使用 ControlDTCSetting(控制 DTC 设置)服务来停止或继续服务器中 DTC 状态位的更新。
  2. 服务器接受子功能值为 DTCSettingType = off 的 ControlDTCSetting(控制 DTC 设置)请求时,服务器应暂停任何至 DTC 状态位的更新(即,冻结当前值),直到再次启用该功能。子功能设置为“开”时执行 ControlDTCSetting(控制 DTC 设置)请求后,或者转换到不支持 ControlDTCSetting(控制DTC 设置)的会话后(即,会话层超时转至 defaultSession(默认会话)、 ECU 重置等)应继续更新DTC 状态位信息。
  3. 如 果 客 户 端 发 送 ClearDiagnosticInformation ( 清 除 诊 断 信 息 ) ( 0x14 ) 服 务 , 则ControlDTCSetting(控制 DTC 设置)不得禁止重置服务器的 DTC 状态位。
  4. ControlDTCSetting(控制 DTC 设置)仅打开/关闭 DTC 状态位更新。 ControlDTCSetting(控制 DTC设置)服务的目的并非是关闭故障监控,也并非是禁用故障弱化策略。

图 22请求消息定义

图 23请求消息子功能参数定义

图 24请求消息数据参数定义

图 25肯定响应消息定义

小结:

  1. 本服务客户端用来使能或禁止DTC状态位更新,比如bootloader更新前会发送85 02禁止DTC状态位更新。

0x22h: ReadDataByIdentifier(按标识符读取数据)服务

通用描述:

  1. ReadDataByIdentifier(按标识符读取数据)服务允许客户端请求读取服务器中通过一个或多个dataIdentifiers(数据标识符)所识别的数据记录值。

图 26请求消息定义

图 27请求消息数据参数的定义

图 28肯定响应消息定义

图 29响应消息数据参数定义

小结:

  1. 一般项目每次只读取一个DID。

0x2Eh: WriteDataByIdentifier(按标识符写数据)服务

通用描述:

  1. WriteDataByIdentifier(按标识符写数据)服务允许客户端向服务器中给定数据标识符指定的内部位。如:将配置信息编入服务器中(如 VIN),清除非易失性存储器, 重置所得的值,设置选项内容等。

图 30请求消息的定义

图 31请求消息数据参数的定义

图 32肯定响应消息的定义

小结

  1. 无。

0x14h: ClearDiagnosticInformation(清除诊断信息)服务

通用描述:

  1. 此服务用于清除一个或多个 ECU 存储器中的诊断信息。

图 33请求消息的定义

图 34肯定响应消息的定义

小结:

  1. 清除所有DTC相关信息。

0x19h: ReadDTCInformation(读取DTC信息)服务

通用描述:

  1. 此服务允许诊断工具读取车辆内任意一个或一组 ECU 中存储的诊断故障代码(DTC)及其相关信息。ECU 应可返回包含排放相关及非排放相关在内的所有 DTC 信息。子功能较多,典型如下:
  2. 诊断工具可获取与诊断工具定义的 DTC 状态掩码相匹配的 DTC 数目(19h 01h);

图 35请求消息的定义

图 36肯定响应消息的定义

  1. 诊断工具可获取与诊断工具定义的 DTC 状态掩码相匹配的所有 DTC 列表和状态信息(19h 02h);

图 37请求消息的定义

图 38肯定响应消息的定义

  1. 诊断工具可获取与诊断工具定义的 DTC 码和 DTCsnapshot 记录号码(FFh 代表所有记录)相关的DTCSnapshot 记录信息(19h 04h);

图 39请求消息的定义

图 40肯定响应消息的定义

  1. 诊断工具可获取与诊断工具定义的 DTC 码和 DTCExtendedDatarecord 号码(FFh 代表所有记录)相关的 DTCExtendedData 记录信息。 扩展数据的典型应用是存储与 DTC 相关的动态信息,如故障发生次数及最近一个故障的发生时间(19h 06h);

图 41请求消息的定义

图 42肯定响应消息的定义

  1. 诊断工具可获取 ECU 支持的所有 DTC 列表和状态信息(19h 0Ah)。

图 43请求消息的定义

图 44肯定响应消息的定义

小结

  1. 无。

0x2Fh: InputOutputControlByIdentifier(输入输出控制)服务

通用描述:

  1. 客户端使用 InputOutputControlByIdentifier(按标识符的输入输出控制)服务代替输入信号值,以及电子系统输出(执行机构)的内部服务器功能和/或力控制值。总之,该服务用于相对简单的(如静态)输入替换/输出控制,但若必须使用较为复杂的输入替换/输出控制时,则使用 routineControl(例程控制)。

图 45请求消息的定义

图 46肯定响应消息的定义

图 47复合数据块定义(示例)

图 48控制启用掩码记录(示例)

图 49请求消息的定义(控制踏板位置A和EGR工作周期示例)

图 50肯定响应消息的定义(控制踏板位置A和EGR工作周期示例)

图 51请求消息的定义(将所有参数控制权返回给ECU示例)

图 52肯定响应消息的定义(将所有参数控制权返回给ECU示例)

小结:

  1. 通常需要特殊规定的条件限制(车速,发动机状态等);
  2. 保持激活状态直至ECU任何原因下恢复默认会话,或ECU重启或软件复位。

ISO14229-1道路车辆-统一诊断服务(UDS)-1相关推荐

  1. 统一诊断服务(UDS)中的肯定响应抑制

    统一诊断服务UDS中的肯定响应抑制 子功能参数定义 肯定响应抑制位的作用 例外情况 子功能参数定义 UDS协议中,有些诊断服务是带有子功能的.子功能参数的取值范围为0x00 - 0x7F.细心的同学应 ...

  2. 统一诊断服务(UDS)

    一.概述 统一诊断服务(Unified Diagnostic Services),简称UDS.是ISO 15765和ISO 14229定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它可在不同的 ...

  3. 统一诊断服务(UDS)- 安全等级是怎么回事儿

    统一诊断服务(UDS)- 安全等级是怎么回事儿 怎么解锁安全等级 安全等级如何与功能关联 上一篇<统一诊断服务(UDS)- 什么是安全访问>中介绍了安全访问的机制和应用场合.为了易于理解, ...

  4. 深入理解统一诊断服务(UDS)ISO14229-1

    诊断服务常用于诊断仪(客户端)和ECU(服务器)之间的会话控制.安全访问.例程控制.DTC读取,ECU软件刷写(软件下载)等,今天带大家深入理解统一诊断服务(Unified Diagnostic Se ...

  5. 【UDS统一诊断服务】四、诊断典型服务(5)— 功能/元件测试功能单元(例行程序功能单元0x31)

    文章目录 四.诊断典型服务(5)- 功能/元件测试功能单元(例行程序功能单元) "功能/元件测试功能单元(例行程序功能单元)"包括的服务: (1)RoutineControl (0 ...

  6. 【UDS统一诊断服务】(补充)五、ECU bootloader开发要点详解 (1)

    文章目录 引言 1. bootloader的功能 2. 如何建立可靠的总线通信? 重要说明: 3. 解析编程文件(S19/HEX/BIN) 引言 bootloader的功能 如何建立可靠的总线通信? ...

  7. UDS-统一诊断服务

    什么是诊断服务? 在还没有诊断服务的时候,如果车辆故障,需要有经验的师傅长时间的摸排查找,费时费力.而车辆的ECU节点有了诊断模块后,就具有了诊断功能,这样车辆如果有了故障,就会自动生成故障代码储存在 ...

  8. OBD 诊断与 UDS 诊断有什么区别?(转)

    原文地址:OBD 诊断与 UDS 诊断有什么区别? OBD(全称:On Board Diagnostics),即车载自动诊断系统,是汽车排放和驱动性相关故障的标准化诊断规范,有严格的排放针对性,其实质 ...

  9. OBD 诊断与 UDS 诊断有什么区别?

    OBD(全称:On Board Diagnostics),即车载自动诊断系统,是汽车排放和驱动性相关故障的标准化诊断规范,有严格的排放针对性,其实质就是通过监测汽车的动力和排放控制系统来监控汽车的排放 ...

  10. 汽车诊断之UDS入门-UDS概述

    最近工作中涉及ECU刷写部分,作为一个没有接触过汽车诊断的小白,开始了边学边做的历程,对UDS做一个学习总结和复盘,希望可以帮助到各位小伙伴们. 应用层协议 UDS (Unified Diagnost ...

最新文章

  1. python安装包-安装 Python 模块
  2. 智能DNS解析+JBOSS集群(一)
  3. .net framework开发winform_这个Winform的UI库也太全了!四十多个控件都在这一个项目里了...
  4. MATLAB与图像处理(四):将图片序列转化为视频文件,将视频文件转化为图片
  5. java对象实例_深入理解Java对象实例生成的例子!(转)
  6. 电大1253c语言程序设计考试题,电大1253《C语言程序设计》开放大学期末考试试题2020年1月(含答案)...
  7. 生成sql条件的类(转)
  8. 错误票据java_【蓝桥杯】错误票据 - osc_bskh1wlw的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. python真的是吹过了-python是否被过度吹捧?
  10. idea 自动导入包操作及快捷键
  11. mvc:annotation-driven /注解意义(转)
  12. 容器技术的发展与基本原理
  13. leetcode88
  14. matlab7.0窗口教程,MATLAB7.0实用教程
  15. 送书 | 别泡枸杞,别晒步数!7招搞懂健康数据,有型有颜等TA来撩
  16. caxa线切割怎样画链轮,收藏:Autocad实战教程-线切割画链轮
  17. 使用IDEA进行Lua代码调试、自动提示、代码跳转、智能重命名
  18. C语言打印平行四边形
  19. 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例
  20. 黎曼积分求解可微曲线的弧线长度

热门文章

  1. ArcMap中无法读取NetCDF数据
  2. GB35114—②、公共安全视频监控联网信息安全系统互联结构
  3. Android 系统语言国家地区代码
  4. 60、在Visual Studio 2019 环境下,使用C#调用C++生成的dll实现yolov5的图片检测
  5. installshield 软件使用教程
  6. TCP协议和UDP协议的对比
  7. 【机器人学导论】第四章.传感器
  8. 局域网不同网段远程桌面_自动化已非原来的自动化:看虚拟局域网技术应用到罗克韦尔的DCS...
  9. 时钟转盘html源代码
  10. 卡巴斯基7.0离线更新升级包病毒库