UDS服务应该支持哪些否定响应码

  • 所有服务都需支持的否定响应码
  • 具体的服务需要支持的否定响应码
  • 否定响应码定义及其取值

  USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response Code)。否定响应码的取值范围为0x00 - 0xFF,被分为三组:

  • 0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。
  • 0x01 – 0x7F:诊断通信相关的否定响应码。
  • 0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定响应码。给出这些否定响应码而不是给出0x22的目的是为了提供请求的服务不能被执行的更详细的原因。

  具体的否定响应编码及其使用条件,请见本文最后的列表。

  由于诊断服务的功能不同,其所支持的否定响应码是不完全相同的。那每个诊断服务要支持哪些否定响应码呢?

所有服务都需支持的否定响应码

  首先,ISO14229-1:2013(E)中定义了一组每个诊断服务都需要支持的否定响应码。见下表。

否定响应码
NRC
定义
Definition
0x21 服务器忙
BusyRepeatRequest
0x11 诊断服务不支持
ServiceNotSupported
0x7F 诊断服务在当前会话下不支持
serviceNotSupportedInActiveSession
0x78 收到诊断请求,等待响应
RequestCorrectlyReceived-ResponsePending

具体的服务需要支持的否定响应码

  其次,针对具体的诊断服务,ISO14229-1:2013(E)定义了其所需支持的特定否定响应码。这里以诊断会话控制服务(0x10)为例。在ISO14229-1:2013(E)的9.2.4章节,定义了诊断会话控制服务(0x10)需要支持的否定响应码,为0x12、0x13、0x22。其它诊断服务支持的特定否定响应码,可以参考标准中的相应章节。

否定响应码
NRC
描述
Description
0x12 子功能不支持
0x13 报文长度不正确
0x22 服务执行条件不满足

  这里列举了常用的诊断服务所支持的否定响应码。如下表:

诊断服务标识
Service ID
诊断服务
Diagnostic Service
支持的否定响应码
Supported NRC
0x10 诊断会话控制
DiagnosticSessionControl
0x12, 0x13, 0x22
0x11 ECU复位
ECUReset
0x12, 0x13, 0x22, 0x33
0x14 清楚故障信息
ClearDiagnosticInformation
0x13, 0x22, 0x31, 0x72
0x19 读取故障码信息
ReadDTCInformation
0x12, 0x13, 0x31
0x22 通过ID读取数据
ReadDataByIdentifier
0x13, 0x14, 0x22, 0x31, 0x33
0x27 安全访问
SecurityAccess
0x12, 0x13, 0x22, 0x24, 0x31, 0x35, 0x36, 0x37
0x28 通信控制
CommunicationControl
0x12, 0x13, 0x22, 0x31
0x2E 通过ID写入数据
WriteDataByIdentifier
0x13, 0x22, 0x31, 0x33, 0x72
0x2F 通过ID进行输入输出控制
InputOutputControlByIdentifier
0x13, 0x22, 0x31, 0x33
0x31 例程控制
RoutineControl
0x12, 0x13, 0x22, 0x24, 0x31, 0x33, 0x72
0x34 请求下载
RequestDownload
0x13, 0x22, 0x31, 0x33, 0x70
0x35 请求上传
RequestUpload
0x13, 0x22, 0x31, 0x33, 0x70
0x36 数据传输
TransferData
0x13, 0x24, 0x31, 0x71, 0x72, 0x73, 0x92/0x93
0x37 请求结束传输
RequestTransferExit
0x13, 0x24, 0x31, 0x72
0x3E 测试设备在线
TesterPresent
0x12, 0x13
0x85 控制故障码设置
ControlDTCSetting
0x12, 0x13, 0x22, 0x31

否定响应码定义及其取值

  最后,下表中列出了ISO14229-1:2013(E)中定义的否定响应码及其使用条件。供大家参考。

编码 描述 助记词
0x00 此编码用于服务器内部实现否定响应码的逻辑时使用,用于表示没有NRC,不给出否定响应。此编码不会在否定响应中给出。 PR
(PositiveResponse)
0x01 - 0x0F ISO预留。用于以后扩展。 ISOSAERESRVD
0x10 表示请求的诊断服务被服务器(ECU)拒绝,但在本表中所有已定义的编码都不适用,这时回复此编码。 GR
(GeneralReject)
0x11 服务器不支持请求的诊断服务。诊断请求中的服务标识符(Service ID)是服务器不支持的或不能识别的,则服务器给出此NRC编码。 SNS
(ServiceNotSupported).
0x12 服务器支持诊断请求中的服务标识符(Service ID),但不支持收到的子功能参数时,回复此编码。 SFNS
(SubFunctionNotSupported)
0x13 请求服务的诊断报文中的数据长度与定义不一致时,回复此编码。
请求服务中参数的格式与定义不一致时也会回复此编码。(不常用)
IMLOIF
(IncorrectMessageLengthOrInvalidFormat)
0x14 服务器准备给出的诊断响应中所包含的数据长度超出了服务器所支持的最大长度时,回复编码。 RTL
(ResponseTooLong)
0x15 - 0x20 ISO预留。用于以后扩展。 ISOSAERESRVD
0x21 给出这个NRC编码时,表示服务器忙于执行已请求的诊断服务,暂时无法执行当前请求的诊断服务。 BRR
(BusyRepeatReques)
0x22 请求的诊断服务的执行条件不满足时,回复此编码。 CNC
(ConditionsNotCorrect)
0x23 ISO预留。用于以后扩展 ISOSAERESRVD
0x24 请求服务的顺序不正确时,回复此编码。某写诊断服务请求是有先后顺序的。典型的就是安全访问(SecurityAccess)服务。必须先请求种子(Request Seed),再回复密钥(Send Key)。如果直接回复秘钥(Send Key),则服务器会回复此编码。 RSE
(RequestSequenceError)
0x25 此编码适用于网关。当向网关请求的服务需要子网段中的控制器执行去执行,但是子网段中的控制器没有正常的执行网关的请求。此时,网关应向请求诊断服务的设备回复此编码。 NRFSC
(NoResponseFromSubnetComponent)
0x26 由于当前服务器存在故障,并且已经记录下了对应的故障码(DTC),切此故障会导致请求的服务无法执行时,回复此编码。 FPEORA
(FailurePreventsExecutionOfRequestedAction)
0x27 - 0x30 ISO预留。用于以后扩展。 ISOSAERESRVD
0x31 诊断请求中的参数超出定义的范围,或者访问的数据标识符(DID)、例程标识符(RoutineID)是服务器不支持或在当前会话不支持时,回复此编码。 ROOR
(RequestOutOfRange)
0x32 ISO预留。用于以后扩展。 ISOSAERESRVD
0x33 通常在所请求的诊断服务需要服务器处于解锁状态,但服务器未被解锁时,回复此编码。 SAD
(SecurityAccessDenied)
0x34 ISO预留。用于以后扩展。 ISOSAERESRVD
0x35 服务器收到的安全访问(SecurityAccess)服务请求子功能为发送秘钥(SendKey),但服务器收到的秘钥(Key)不正确时,回复此编码。 IK
(InvalidKey)
0x36 请求安全访问(SecurityAccess)服务的失败次数超过服务器允许的最大次数时,回复此编码。 ENOA
(ExceedNumberOfAttempts)
0x37 服务器在安全访问延迟时间内收到安全访问(SecurityAccess)服务请求时,回复此编码。 RTDNE
(RequiredTimeDelayNotExpired)
0x38 - 0x4F 预留。用于扩展数据链路安全。 RBEDLSD
(ReservedByExtendedDataLinkSecurityDocument)
0x50 - 0x6F ISO预留。用于以后扩展。 ISOSAERESRVD
0x70 由于故障导致从服务器的存储器上传数据失败或向服务器的存储器下载数据失败时,回复此代码。 UDNA
(UploadDownloadNotAccepted)
0x71 由于故障导致数据传输操作被中断时,回复此编码。 TDS
(TransferDataSuspended)
0x72 服务器在擦除或写入Flash出现错误时,回复此代码。 GPF
(GeneralProgrammingFailure)
0x73 在执行数据传输服务(TransferData (0x36) service)的过程中,检测到数据块序列编号(BlockSequenceCounter)错误时,回复此编码。 WBSC
(WrongBlockSequenceCounter)
0x74 - 0x77 ISO预留。用于以后扩展。 ISOSAERESRVD
0x78 诊断请求已经收到,并且是有效的,服务器正在执行请求的服务,无法继续接收新的服务请求时,回复此代码。当正在执行的服务完成后,仍需给出最终的肯定或否定响应。 RCRRP
(RequestCorrectlyReceived-ResponsePending)
0x79 - 0x7D ISOSAEReserved This range of values is reserved for future definition.
0x7E 诊断请求中服务的子功能参数在当前的会话下不支持时,回复此编码。需要注意的是,回复此编码时,子功能参数是服务器在其它会话下支持的,只是在当前的会话下不支持。如果服务器在任何会话下都不支持此子功能参数,则需回复0x12. SFNSIAS
(SubFunctionNotSupportedInActiveSession)
0x7F 诊断请求中的服务标识符(Service ID)在当前的会话下不支持时,回复此编码。需要注意的是,回复此编码时,的服务标识符(Service ID)是服务器在其它会话下支持的,只是在当前的会话下不支持。如果服务器在任何会话下都不支持此子功能参数,则需回复0x11. SNSIAS
(ServiceNotSupportedInActiveSession)
0x80 ISO预留。用于以后扩展。 ISOSAERESRVD
0x81 请求的诊断服务被执行的条件之一是发动机转速低于某一限值,而此时的发动机转速不满足此要求时,回复此编码。 RPMTH
(RpmTooHigh)
0x82 请求的诊断服务被执行的条件之一是发动机转速高于某一限值,而此时的发动机转速不满足此要求时,回复此编码。 RPMTL
(RpmTooLow)
0x83 请求的诊断服务被执行的条件之一是发动机处于停机状态,而此时发动机处于运转状态,则回复此编码。 EIR
(EngineIsRunning)
0x84 请求的诊断服务被执行的条件之一是发动机处于运转状态,而此时发动机处于停机状态,则回复此编码。 EINR
(EngineIsNotRunning)
0x85 请求的诊断服务被执行的条件之一是发动机运转的时间超过某一限值,而此时该条件不满足,则回复此编码。 ERTTL
(EngineRunTimeTooLow)
0x86 请求的诊断服务被执行的条件之一是当前的温度低于某一限值,而此时该条件不满足,则回复此编码。 TEMPTH
(TemperatureTooHigh)
0x87 请求的诊断服务被执行的条件之一是当前的温度高于某一限值,而此时该条件不满足,则回复此编码。 TEMPTL
(TemperatureTooLow)
0x88 请求的诊断服务被执行的条件之一是当前的车速低于某一限值,而此时该条件不满足,则回复此编码。 VSTH
(VehicleSpeedTooHigh)
0x89 请求的诊断服务被执行的条件之一是当前的车速高于某一限值,而此时该条件不满足,则回复此编码。 VSTL
(VehicleSpeedTooLow)
0x8A 请求的诊断服务被执行的条件之一是节气门开度或加速踏板开度低于某一限值,而此时该条件不满足,则回复此编码。 TPTH
(Throttle/PedalTooHigh)
0x8B 请求的诊断服务被执行的条件之一是节气门开度或加速踏板开度高于某一限值,而此时该条件不满足,则回复此编码。 TPTL
(Throttle/PedalTooLow)
0x8C 请求的诊断服务被执行的条件之一是变速器处于空档,而此时该条件不满足,则回复此编码。 TRNIG
(TransmissionRangeNotInNeutral)
0x8D 请求的诊断服务被执行的条件之一是变速器处于非空档,而此时该条件不满足,则回复此编码。 TRNIG
(TransmissionRangeNotInGear)
0x8E ISO预留。用于以后扩展。 ISOSAERESRVD
0x8F 请求的诊断服务被执行的条件之一是在诊断服务被执行前和执行过程中制动踏板没有被踩下,而此时该条件不满足,则回复此编码。 BSNC
(BrakeSwitch(es)NotClosed)
0x90 请求的诊断服务被执行的条件之一是变速器处于P空档,而此时该条件不满足,则回复此编码。 SLNIP
(ShifterLeverNotInPark)
0x91 请求的诊断服务被执行的条件之一是液力变矩器未处于锁止状态,而此时该条件不满足,则回复此编码。 TCCL
(TorqueConverterClutchLocked)
0x92 请求的诊断服务被执行的条件之一是蓄电池电压低于设定的限值,而此时该条件不满足,则回复此编码。 VTH
(VoltageTooHigh)
0x93 请求的诊断服务被执行的条件之一是蓄电池电压高于设定的限值,而此时该条件不满足,则回复此编码。 VTL
(VoltageTooLow)
0x94 - 0xEF 预留。用于将来定义特定的条件不满足情况。 RFSCNC
(ReservedForSpecificConditionsNotCorrect)
0xF0 - 0xFE 预留。用于车辆制造商定义特定的条件不满足的情况。 VMSCNC
(VehicleManufacturerSpecificConditionsNotCorrect)
0xFF ISO预留。用于以后扩展。 ISOSAERESRVD

参考文献:

  1. Road vehicles - Unified diagnostic services (UDS) - Part 1: Specification and requirements, Second edition 2013-03-15

UDS服务应该支持哪些否定响应码相关推荐

  1. UDS诊断之负响应码

    1.0x10服务 服务诊断会话控制 否定响应码(NRC) 定义(Defination) 0x12 服务器支持诊断请求中的服务标识符(Service ID),但不支持收到的子功能参数时,回复此编码. 0 ...

  2. 基于UDS服务的BootLoader架构和刷写流程

    基于UDS服务的BootLoader架构和刷写流程 1. BootLoader支持的UDS服务 bootloader 不需要支持19/14等故障类服务 在boot程序中, 10/27/11/3E 这样 ...

  3. [Davinci Configurator 配置] 实现功能寻址不响应、关闭抑制肯定响应、NRC否定响应

    背景 在DCM开发过程中经常会遇到如下功能需求: (1)某个UDS诊断服务不支持功能寻址的情况下,ECU接收到功能寻址的该UDS诊断服务,如何实现不响应该诊断服务. 举例:2E服务不支持功能寻址,EC ...

  4. UDS服务基础篇之22

    UDS诊断服务基础篇之22 前言 22服务作为诊断服务种的基础服务,可以简单理解为就是一个用于读取ECU数据的外部接口,可实时获取软件内部的相关的状态信息. 鉴于本文是基础入门介绍,小T还是会问下大家 ...

  5. UDS服务基础篇之2F

    前言 在汽车ECU诊断服务开发的过程中,有很多常见的诊断服务,比如10, 11, 22, 2E等,但是对于2F服务则会显得有些陌生,因为这类诊断服务主要在车身域比较常见,比如车窗控制,传感器开关.执行 ...

  6. 诊断通讯模块Dcm的UDS服务概述

    诊断通讯模块Dcm的UDS服务概述_SOA开发者的博客-CSDN博客 0 引言 故障诊断系统中,诊断通讯管理模块(Diagnostic Coummunication Management,Dcm)主要 ...

  7. Http响应码及其含义--摘自apache官网

    2019独角兽企业重金招聘Python工程师标准>>> 转载自:http://www.yuanma.org/data/2009/0804/article_3823.htm HTTP状 ...

  8. 今天携程出事了:让我们来学习下http的响应码

    就在今天,2015年5月28日,中国最大的旅游机票预订网站--携程网粗大事了.据传携程网的数据库被人物理删除了,而容灾备份的数据又无法正常使用,服务器全面遭受瘫痪.每小时给携程带来的损失约100万美元 ...

  9. HTTP响应码与HTTP头标

    响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行. 响应码分五种类型,由它们的第一位数字表示: 1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接受.理解和采纳 3 ...

  10. UDS 服务 Service 0x31 - RoutineControl

    1.请求格式         RoutineControl (31服务) ,用于对主机厂定义的一些特定程序的控制操作(启动程序.停止程序.请求运行结果).关于31服务的请求格式如下: (1)第2个字节 ...

最新文章

  1. hpm1216nfh驱动程序_惠普HP LaserJet Pro M1216nfh 一体机驱动
  2. hdu 4524 郑厂长系列故事——逃离迷宫
  3. VTK:Utilities之ReportRenderWindowCapabilities
  4. 为什么我们会看到 SAP Spartacus 服务器端渲染 `rendering in process` 的日志
  5. 考研数学:【以错补错】 降低做题出错率
  6. linux内核设计与实现---下半部和推后执行的工作
  7. 无监督学习 | PCA 主成分分析之客户分类
  8. 快速构建Windows 8风格应用34-构建Toast通知
  9. PyTorch实战福利从入门到精通之三——autograd
  10. python 检测端口是否被占用
  11. ERP系统实施的最佳落地方案
  12. 华为交换机主备命令_华为交换机命令汇总
  13. Ubuntu14.04安装wineqq国际版
  14. 【Unity 框架】QFramework v1.0 使用指南 架构篇:05. 引入 Utility | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
  15. Mysql根据汉字英文字母进行排序
  16. 物联网技术可以给养老院带来哪些变化
  17. 英语四六级详细报名步骤来啦!
  18. 软件性能测试场景设计,性能测试场景设计杂谈
  19. C/C++中的数据类型转换()/static_cast/dynamic_cast/const_cast/reinterpret_cast
  20. Python列表,元组,字典,集合 练习

热门文章

  1. C/C++中的五个预定义的宏名
  2. 网易163邮箱模拟登录
  3. 青铜时代 —— 图像处理
  4. 大数据:对大数据的理解
  5. !doctype html public 广告飘窗不能用了,页面广告飘窗
  6. 用计算机修改图片或照片,【如何更改图片像素】电脑上如何改照片像素
  7. TextView scrollbars setting
  8. 算法-猴子运香蕉,看谁剩的多,N种解法
  9. 鼠标划定区域的屏幕翻译 python3
  10. python取地址符_C中指针符*和取址符