ISO14229-1道路车辆-统一诊断服务(UDS)-1
前言:
- 基于ISO14229-1,整理了一些车载控制器软件开发中常用的诊断服务,并补充了自己的理解与心得体会。
术语:
统一诊断服务:Unified diagnostic services(UDS)
- ISO 14229-1规定了诊断服务数据链路的独立要求, 以使诊断测试仪(客户端)可控制车载电子控制单元( ECU、服务器)的诊断功能。
- 常用术语及通俗解释:
- 功能寻址(Fun):广播式信息,总线上凡是支持该功能寻址服务的ECU节点都要响应Tester的请求。例如老师(Tester)询问全班学生(ECUs):“今天谁没带课本?”这是功能寻址请求。
- 物理寻址(Phy):点对点式信息,即只有特定节点响应Tester的请求。例如老师(Tester)询问学生(ECU_x):“张三你带课本了吗?”这是物理寻址请求。
- 禁止肯定响应:若某服务支持该功能,则当禁止肯定响应位为1时,该服务若是肯定响应,则不回消息;反之若是否定响应,则回复否定响应。例如老师(Tester)告知全班学生(ECUs):“开始默写课文!”,学生不用回应老师,只需要有问题的学生回应老师。比如张三说没带笔,李四说没带纸等等。该功能一般针对那些并不关心肯定响应而只需执行指令的场景,另外若所有ECU都回复正响应,也可能会导致总线上不必要的瞬时高负载。后文的3E服务就是禁止肯定响应的一个典型应用场景。
(常用)否定响应码:Negative Response Codes(NRC)
- 否定响应代码范围 0x00 – 0xFF。
- 0x00:肯定响应(Positive Response)
- 0x01-0x7F:通信有关的否定响应代码
- 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(诊断会话控制)服务
通用描述:
- 诊断服务器中应始终只有一个有效诊断会话。服务器上电时应始终启动默认诊断会话。
- 非默认诊断会话(programmingSession(编程会话)除外)中的诊断服务和诊断功能集是 defaultSession(默认会话)中提供的功能超集,这意味着切换到任何非默认诊断会话时还可以使用 defaultSession(默认会话)的诊断功能。
- 图例
- 图例1:包括10 01;11 xx;会话超时;上电;
- 停止基于事件响应(0x86)服务;
- 应终止 defaultSession(默认会话)中不支持的任何其他活动的诊断功能;
- 这不包括已编程入非易失性存储器中的长期更改。
- 图例2:可能需要满足特定安全条件:比如车辆静止或发动机停止;服务器可以仅允许一个带特定客户端标识符(客户端诊断地址) 的客户端启动一个新的具体诊断会话(例如,服务器可以要求仅带有客户端标识符 0xF4 的客户端启动 extendedDiagnosticSession(扩展诊断会话)):即可以通过物理寻址或者功能寻址。
- 图例3:每次执行3都会初始化诊断会话,意味着:
- 停止(0x86h)事件;
- 应重新锁定安全性。注意,锁定安全访问应重置依存于待解锁的安全访问的任何有效诊断功能(举例:某个inputOutputControl(输入输出控制)需要安全访问权限,当执行1003后,由于安全性被重新锁定,那么该安全性所衍生服务与状态也要被初始化,即此时应该将IO的控制权需交还ECU);
- 应维护好新会话中支持的且不依存于安全访问的所有其他有效诊断功能。例如:维持通信控制(28h)和控制 DTC 设置(85h)的状态。
- 默认会话模式可以直接切换到扩展会话模式,但是不能直接切换到编程会话模式,如果想进入编程会话模式,则必须先进入扩展会话模式。同样,编程会话模式不能直接进入扩展会话模式,只能进入默认会话模式。 ECU 复位以及 S3 定时器超时将导致 ECU 进入默认会话模式
- 图例1:包括10 01;11 xx;会话超时;上电;
图 1 诊断会话切换
默认会话(01)
- 只要服务器上电,就应始终进行默认诊断会话;
- 该会话模式不需要任何诊断应用程序的超时处理;
- 默认模式再一次被启动(上电或切换),则ECU 须复位所有此前会话模式下被激活的状态和控制服务:
- 安全访问(27h):重新锁定ECU,恢复至默认安全等级;
- 基于事件的响应(86h);
- 通信控制(28h):使能收发;
- 控制 DTC 设置(85h):使能DTC上报
- 输入输出控制(2Fh):交还控制权至ECU
编程会话(02)
- 如果 ECU 在引导程序中运行编程会话,只能通过如下退出02会话:
- 诊断工具发起的“ECU 复位”(11h) 服务
- 会话类型为默认会话的“诊断会话控制”(10h) 服务(重启APP)
- 或ECU 会话层超时退出(重启APP)。
扩展诊断会话(03)
- 该 diagnosticSession(诊断会话)可用于启用支持服务器内存中功能(如, “怠速、 CO 值等”)调整所需的所有诊断服务。该会话还可以用于启用与功能调整无特别相关性的诊断服务。
安全系统诊断会话(04)
- 该 diagnosticSession(诊断会话)可以用于启用支持安全系统相关功能所需的所有诊断服务(例如,气囊布置)
请求与应答:
图 2 请求消息定义
图 3 肯定响应消息定义
图 4 会话参数记录定义
图 5 会话参数释义
注:
定时器 P2server 的精度为 1ms
定时器 P2*server 的精度为 10ms
小结
- 若因S3Timer超时需退至默认会话,并重置以下内容:
- 27服务:重新锁定ECU恢复默认安全级别
- 31服务:重置历程控制
- 85h服务:开启DTC状态更新
- 28h服务:使能报文收发
- 2Fh服务:IO控制权交还至ECU。
- 若已在03会话,再次受到10 03请求,则只需重置如下内容:
- 27服务:重新锁定ECU恢复默认安全级别
- 27服务设计的安全性权限的衍生服务:
- 2Fh服务:IO控制权交还至ECU(因其一般需要解锁ECU)。
- 其他需要安全性解锁的服务。
0x11h: ECUReset( ECU 重置)服务
通用描述:
- 本服务请求服务器根据嵌入 ECUReset(ECU 重置)请求消息中的 resetType(重置类型)参数值的内容有效地执行服务器重置。应于在服务器中执行重置之前发送 ECUReset(ECU 重置)肯定响应消息(如需要)。服务器成功重置后,服务器应激活 defaultSession(默认会话)。
图 6 请求消息定义
请求消息子功能参数定义描述:
- 0x01 hardReset(硬件复位):
- 该条件模拟了服务器断开其电源(即电池)之后通常会执行的上电/启动序列。
- 0x02 keyOffOnReset(点火钥匙重置):
- 该重置条件应模拟钥匙关—开序列。
- 0x03 softReset(软重置)
- 使服务器立即重启应用程序。
- 0x04 enableRapidPowerShutDown(启用快速断电)
- 可强制进入休眠模式,并非单纯地关闭电源。休眠意味着关闭电源,但仍时刻准备着被唤醒(电池供电型)。子功能的目的是缩短点火开关转至关闭位置之后 ECU的待机时间。
- 0x05 disableRapidPowerShutDown(禁用快速断电)
- 该值要求服务器禁用此前已启用的“快速断电”功能。
图 7 肯定响应消息定义
图 8 响应消息数据参数定义
小结:
- 无。
0x27h: SecurityAccess(安全访问)服务
通用描述:
- 本服务旨在提供一种访问因安全、排放或安全因素而被限制访问的数据和/或诊断服务的方式。用于下载/上传例程或数据到服务器及从服务器读取具体内存位置的诊断服务可能需要进行安全访问。
- 任何时间都仅可有一个安全级别处于活动状态。例如,如果与 requestSeed(请求种子) 0x03 相关的安全级别处于活动状态,且测试仪请求成功地解锁了与 requestSeed(请求种子) 0x01 相关的安全级别,则此时仅应解锁与 requestSeed(请求种子) 0x01 相关的安全级别所支持的受保护功能。此前已由与 requestSeed(请求种子) 0x03 相关的的安全级别解锁的任何其他受保护功能应不再处于活动状态。
服务流程:
- 客户端请求“种子”:
- 子功能参数值应始终为奇数(比如0x27 01),且同一安全级别的相应“sendKey(发送密钥) ”子功能参数值应等于“requestSeed(请求种子) ”子功能参数值加一。
- 种子为随机数,且种子不能是如下两种数值:
- 00000000h:如果服务器支持安全性,但是接收 SecurityAccess(安全访问) “requestSeed(请求种子) ”消息时所请求的安全级别已经解锁,则该服务器应通过种子值等于零(0)的 SecurityAccess(安全访问)“requestSeed(请求种子) ”肯定响应消息服务做出响应。无论何时,服务器均不得就当前已锁定的指定安全级别发送全为零的种子。客户端应检查非零种子,通过这种方式确定服务器是否锁定为特定的安全级别。
- 服务器发送“种子”
- 此种子是诊断工具及 ECU 计算密钥的输入参数;
- 客户端发送“密钥”(适用于已接收到的种子)
- 服务器做出响应
- 确认“密钥”有效,并自行解锁
- 如果两个数字不匹配,则这将被视作一次错误的访问尝试。ECU 拒绝请求并发送否定响应码 35h“密钥无效”(InvalidKey), 安全访问失败计数加 1。当错误计数器数值达到 N 时, ECU 需要等待 T 秒方可接受下次“请求种子”(Request Seed) 报文并返回 36h(请求次数超出限制) 否定响应。 在这 T秒内, 任何“SecurityAccess- RequestSeed”都将不被处理, 且ECU 返回 37h(延时时间未到)否定响应。当 T秒等待时间结束,安全访问错误计数减 1 并允许另一次尝试。如果在这次尝试期间安全访问失败计数再次增加(由于密钥无效), 要求 ECU 在接受下次“请求种子”(Request Seed) 报文前再次等待 T 秒。
- 任何一次 ECU 被成功解锁(密钥有效),失败计数器都将被重置为零,ECU 上电或复位后默认处于闭锁状态, 失败计数器不能被重置
- 种子及密钥的请求和响应流程是强制性的,但以下情况发生时,该流程将被重置:
- ECU 发送了“SecurityAccess- SendKey”的肯定或否定响应
- ECU 发送了“SecurityAccess-RequestSeed”的否定响应
- 由于回到默认会话模式或被重启, ECU 回到闭锁状态
图 9 安全访问流程
图 10 安全访问策略
图 11 安全访问状态转换图
请求与响应示例:
图 12 请求消息定义-请求种子
图 13请求消息定义-发送密钥
图 14肯定响应消息定义
小结:
- 无。
0x28h CommunicationControl(通信控制)服务
通用描述:
- 本服务旨在开启/关闭服务器一些消息的传输和/或接收(例如,应用程序通信消息)。
图 15请求消息定义
图 16请求消息子功能参数定义(截取部分)
图 17请求消息数据参数定义
图 18肯定响应消息定义
小结:
- 无。
0x3Eh: TesterPresent(测试仪保活)服务
通用描述:
- 本服务用于在服务器内显示,客户端仍与车辆连接,且此前已激活的诊断服务和/或通信仍将保持活动状态。该服务用于将一个或多个服务器保持在非 defaultSession(默认会话)的诊断会话状态。通过周期性地传输 TesterPresent(测试仪保活)请求消息或者在无其他诊断服务时启用该服务,可防止服务器(因S3计数器超时)自动返回 defaultSession(默认会话)。
图 19请求消息定义
图 20请求消息子功能参数定义
图 21肯定响应消息定义
小结:
- 本服务仅用于维持会话与控制状态,无其他特殊执行规定,且一般推荐测试仪使用功能寻址方式发送3Eh 80h (SPRMIB = TRUE),即Tester告知ECU诊断设备保持在线,无需ECU回复肯定响应。
0x85h: ControlDTCSetting(控制 DTC 设置)服务
通用描述:
- 本服务客户端应使用 ControlDTCSetting(控制 DTC 设置)服务来停止或继续服务器中 DTC 状态位的更新。
- 服务器接受子功能值为 DTCSettingType = off 的 ControlDTCSetting(控制 DTC 设置)请求时,服务器应暂停任何至 DTC 状态位的更新(即,冻结当前值),直到再次启用该功能。子功能设置为“开”时执行 ControlDTCSetting(控制 DTC 设置)请求后,或者转换到不支持 ControlDTCSetting(控制DTC 设置)的会话后(即,会话层超时转至 defaultSession(默认会话)、 ECU 重置等)应继续更新DTC 状态位信息。
- 如 果 客 户 端 发 送 ClearDiagnosticInformation ( 清 除 诊 断 信 息 ) ( 0x14 ) 服 务 , 则ControlDTCSetting(控制 DTC 设置)不得禁止重置服务器的 DTC 状态位。
- ControlDTCSetting(控制 DTC 设置)仅打开/关闭 DTC 状态位更新。 ControlDTCSetting(控制 DTC设置)服务的目的并非是关闭故障监控,也并非是禁用故障弱化策略。
图 22请求消息定义
图 23请求消息子功能参数定义
图 24请求消息数据参数定义
图 25肯定响应消息定义
小结:
- 本服务客户端用来使能或禁止DTC状态位更新,比如bootloader更新前会发送85 02禁止DTC状态位更新。
0x22h: ReadDataByIdentifier(按标识符读取数据)服务
通用描述:
- ReadDataByIdentifier(按标识符读取数据)服务允许客户端请求读取服务器中通过一个或多个dataIdentifiers(数据标识符)所识别的数据记录值。
图 26请求消息定义
图 27请求消息数据参数的定义
图 28肯定响应消息定义
图 29响应消息数据参数定义
小结:
- 一般项目每次只读取一个DID。
0x2Eh: WriteDataByIdentifier(按标识符写数据)服务
通用描述:
- WriteDataByIdentifier(按标识符写数据)服务允许客户端向服务器中给定数据标识符指定的内部位。如:将配置信息编入服务器中(如 VIN),清除非易失性存储器, 重置所得的值,设置选项内容等。
图 30请求消息的定义
图 31请求消息数据参数的定义
图 32肯定响应消息的定义
小结
- 无。
0x14h: ClearDiagnosticInformation(清除诊断信息)服务
通用描述:
- 此服务用于清除一个或多个 ECU 存储器中的诊断信息。
图 33请求消息的定义
图 34肯定响应消息的定义
小结:
- 清除所有DTC相关信息。
0x19h: ReadDTCInformation(读取DTC信息)服务
通用描述:
- 此服务允许诊断工具读取车辆内任意一个或一组 ECU 中存储的诊断故障代码(DTC)及其相关信息。ECU 应可返回包含排放相关及非排放相关在内的所有 DTC 信息。子功能较多,典型如下:
- 诊断工具可获取与诊断工具定义的 DTC 状态掩码相匹配的 DTC 数目(19h 01h);
图 35请求消息的定义
图 36肯定响应消息的定义
- 诊断工具可获取与诊断工具定义的 DTC 状态掩码相匹配的所有 DTC 列表和状态信息(19h 02h);
图 37请求消息的定义
图 38肯定响应消息的定义
- 诊断工具可获取与诊断工具定义的 DTC 码和 DTCsnapshot 记录号码(FFh 代表所有记录)相关的DTCSnapshot 记录信息(19h 04h);
图 39请求消息的定义
图 40肯定响应消息的定义
- 诊断工具可获取与诊断工具定义的 DTC 码和 DTCExtendedDatarecord 号码(FFh 代表所有记录)相关的 DTCExtendedData 记录信息。 扩展数据的典型应用是存储与 DTC 相关的动态信息,如故障发生次数及最近一个故障的发生时间(19h 06h);
图 41请求消息的定义
图 42肯定响应消息的定义
- 诊断工具可获取 ECU 支持的所有 DTC 列表和状态信息(19h 0Ah)。
图 43请求消息的定义
图 44肯定响应消息的定义
小结
- 无。
0x2Fh: InputOutputControlByIdentifier(输入输出控制)服务
通用描述:
- 客户端使用 InputOutputControlByIdentifier(按标识符的输入输出控制)服务代替输入信号值,以及电子系统输出(执行机构)的内部服务器功能和/或力控制值。总之,该服务用于相对简单的(如静态)输入替换/输出控制,但若必须使用较为复杂的输入替换/输出控制时,则使用 routineControl(例程控制)。
图 45请求消息的定义
图 46肯定响应消息的定义
图 47复合数据块定义(示例)
图 48控制启用掩码记录(示例)
图 49请求消息的定义(控制踏板位置A和EGR工作周期示例)
图 50肯定响应消息的定义(控制踏板位置A和EGR工作周期示例)
图 51请求消息的定义(将所有参数控制权返回给ECU示例)
图 52肯定响应消息的定义(将所有参数控制权返回给ECU示例)
小结:
- 通常需要特殊规定的条件限制(车速,发动机状态等);
- 保持激活状态直至ECU任何原因下恢复默认会话,或ECU重启或软件复位。