UDS服务应该支持哪些否定响应码
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 |
参考文献:
- Road vehicles - Unified diagnostic services (UDS) - Part 1: Specification and requirements, Second edition 2013-03-15
UDS服务应该支持哪些否定响应码相关推荐
- UDS诊断之负响应码
1.0x10服务 服务诊断会话控制 否定响应码(NRC) 定义(Defination) 0x12 服务器支持诊断请求中的服务标识符(Service ID),但不支持收到的子功能参数时,回复此编码. 0 ...
- 基于UDS服务的BootLoader架构和刷写流程
基于UDS服务的BootLoader架构和刷写流程 1. BootLoader支持的UDS服务 bootloader 不需要支持19/14等故障类服务 在boot程序中, 10/27/11/3E 这样 ...
- [Davinci Configurator 配置] 实现功能寻址不响应、关闭抑制肯定响应、NRC否定响应
背景 在DCM开发过程中经常会遇到如下功能需求: (1)某个UDS诊断服务不支持功能寻址的情况下,ECU接收到功能寻址的该UDS诊断服务,如何实现不响应该诊断服务. 举例:2E服务不支持功能寻址,EC ...
- UDS服务基础篇之22
UDS诊断服务基础篇之22 前言 22服务作为诊断服务种的基础服务,可以简单理解为就是一个用于读取ECU数据的外部接口,可实时获取软件内部的相关的状态信息. 鉴于本文是基础入门介绍,小T还是会问下大家 ...
- UDS服务基础篇之2F
前言 在汽车ECU诊断服务开发的过程中,有很多常见的诊断服务,比如10, 11, 22, 2E等,但是对于2F服务则会显得有些陌生,因为这类诊断服务主要在车身域比较常见,比如车窗控制,传感器开关.执行 ...
- 诊断通讯模块Dcm的UDS服务概述
诊断通讯模块Dcm的UDS服务概述_SOA开发者的博客-CSDN博客 0 引言 故障诊断系统中,诊断通讯管理模块(Diagnostic Coummunication Management,Dcm)主要 ...
- Http响应码及其含义--摘自apache官网
2019独角兽企业重金招聘Python工程师标准>>> 转载自:http://www.yuanma.org/data/2009/0804/article_3823.htm HTTP状 ...
- 今天携程出事了:让我们来学习下http的响应码
就在今天,2015年5月28日,中国最大的旅游机票预订网站--携程网粗大事了.据传携程网的数据库被人物理删除了,而容灾备份的数据又无法正常使用,服务器全面遭受瘫痪.每小时给携程带来的损失约100万美元 ...
- HTTP响应码与HTTP头标
响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行. 响应码分五种类型,由它们的第一位数字表示: 1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接受.理解和采纳 3 ...
- UDS 服务 Service 0x31 - RoutineControl
1.请求格式 RoutineControl (31服务) ,用于对主机厂定义的一些特定程序的控制操作(启动程序.停止程序.请求运行结果).关于31服务的请求格式如下: (1)第2个字节 ...
最新文章
- hpm1216nfh驱动程序_惠普HP LaserJet Pro M1216nfh 一体机驱动
- hdu 4524 郑厂长系列故事——逃离迷宫
- VTK:Utilities之ReportRenderWindowCapabilities
- 为什么我们会看到 SAP Spartacus 服务器端渲染 `rendering in process` 的日志
- 考研数学:【以错补错】 降低做题出错率
- linux内核设计与实现---下半部和推后执行的工作
- 无监督学习 | PCA 主成分分析之客户分类
- 快速构建Windows 8风格应用34-构建Toast通知
- PyTorch实战福利从入门到精通之三——autograd
- python 检测端口是否被占用
- ERP系统实施的最佳落地方案
- 华为交换机主备命令_华为交换机命令汇总
- Ubuntu14.04安装wineqq国际版
- 【Unity 框架】QFramework v1.0 使用指南 架构篇:05. 引入 Utility | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
- Mysql根据汉字英文字母进行排序
- 物联网技术可以给养老院带来哪些变化
- 英语四六级详细报名步骤来啦!
- 软件性能测试场景设计,性能测试场景设计杂谈
- C/C++中的数据类型转换()/static_cast/dynamic_cast/const_cast/reinterpret_cast
- Python列表,元组,字典,集合 练习