NRC定义(Negative Response Code)
Posted 诊断协议那些事儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NRC定义(Negative Response Code)相关的知识,希望对你有一定的参考价值。
诊断协议那些事儿
诊断协议那些事儿专栏系列文章,在诊断仪发送请求后,ECU除了肯定响应外,也会反馈否定响应,其NRC包含了否定响应的具体原因。本文将系统介绍各NRC(否定响应码)的具体含义。
文章目录
否定响应码定义及其取值
否定响应码的取值范围为0x00-0xFF,细分为三个区间:
0x00:服务器内部实现的positiveResponse参数值
0x01-0x7F:与通信有关的否定响应代码
0x80-0xFF:当服务器收到请求时,用于指示规定条件不正确的否定响应代码【一般用于NRC 0x22条件错误生效时,更详细的报告无法采取请求动作的原因】
0x00:服务器内部实现的positiveResponse参数值
编码(hex) | 描述 | 助记符 |
---|---|---|
00 | 此编码表示没有NRC,不给出否定响应。此编码不会在否定响应中给出 | PR(PositiveResponse) |
0x01-0x7F:与通信有关的否定响应代码
编码(hex) | 描述 | 助记符 |
---|---|---|
0x01 - 0x0F | ISO预留。用于以后扩展 | ISOSAERESRVD |
0x10 | 表示请求的诊断服务被服务器(ECU)拒绝,但在本表中所有已定义的编码都不适用,这时回复此编码。 | GR(GeneralReject) |
0x11 | 服务器不支持请求的诊断服务。诊断请求中的服务标识符(Service ID)是服务器不支持的或不能识别的 | SNS(ServiceNotSupported) |
0x12 | 服务器支持诊断请求中的服务标识符(Service ID),但不支持收到的子功能参数时 | SFNS(SubFunctionNotSupported) |
0x13 | 请求服务的诊断报文中的数据长度与定义不一致时,回复此编码。请求服务中参数的格式与定义不一致时也会回复此编码。 | IMLOIF(IncorrectMessageLengthOrInvalidFormat) |
0x14 | 服务器准备给出的诊断响应中所包含的数据长度超出了服务器所支持的最大长度时 (如果一次请求了多个DID,且响应的所有数据标识符组合起来超出了底层传输协议的限制,则反馈此NRC) | RTL(ResponseTooLong) |
0x15-0x20 | 此ISO预留。用于以后扩展 | ISOSAERESRVD |
0x21 | 表示服务器忙于执行已请求的诊断服务,暂时无法执行当前请求的诊断服务。 | 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 | ISOSAERESRVD |
0x7E | 诊断请求中服务的子功能参数在当前的会话下不支持时,回复此编码。需要注意的是,回复此编码时,子功能参数是服务器在其它会话下支持的,只是在当前的会话下不支持。如果服务器在任何会话下都不支持此子功能参数,则需回复0x12. | SFNSIAS(SubFunctionNotSupportedInActiveSession) |
0x7F | 诊断请求中的服务标识符(Service ID)在当前的会话下不支持时,回复此编码。需要注意的是,回复此编码时,的服务标识符(Service ID)是服务器在其它会话下支持的,只是在当前的会话下不支持。如果服务器在任何会话下都不支持此子功能参数,则需回复0x11. | SNSIAS(ServiceNotSupportedInActiveSession) |
注:由于0x11不适用于受支持的服务,故诊断服务支持的否定响应码列表中不会出现此NRC。
0x80-0xFF:当服务器收到请求时,用于指示规定条件不正确的否定响应代码
编码(hex) | 描述 | 助记符 |
---|---|---|
0x80 | ISO预留。用于以后扩展 | ISOSAERESRVD |
0x81 | 当前转速RPM高于预设值的最大阈值 | RPMTH(rpmTooHigh) |
0x82 | 当前转速RPM低于预设值的最小阈值 | RPMTL(rpmTooLow) |
0x83 | 对于在发动机运转期间无法执行的执行器测试 | EIR(engineIsRunning) |
0x84 | 对于必须发动机运转,否则无法执行的执行器测试 | EINR(engineIsNotRunning) |
0x85 | 当前发动机运转时间低于预设限值 | ERTTL(engineRunTimeTooLow) |
0x86 | 当前温度高于预设置的最大阈值 | TEMPTH(temperatureTooHigh) |
0x87 | 当前温度低于预设置的最小阈值 | TEMPTL(temperatureTooLow) |
0x88 | 当前车速(VS)高于预设置的最大阈值 | VSTH(vehicleSpeedTooHigh) |
0x89 | 当前车速(VS)低于预设置的最小阈值 | VSTL(vehicleSpeedTooLow) |
0x8A | 当前油门/踏板位置高于预设置的最大阈值 | TPTH(throttle/PedalTooHigh) |
0x8B | 当前油门/踏板位置低于预设置的最小阈值 | TPTL(throttle/PedalTooLow) |
0x8C | 当前变速箱未处于空挡 | TRNIN(transmissionRangeNotInNeutral) |
0x8D | 当前变速箱未挂挡 | TRNIG(transmissionRangeNotInGear) |
0x8E | ISO预留。用于以后扩展 | ISOSAERESRVD |
0x8F | 刹车开关未闭合(未踩下或未应用刹车踏板) | BSNC(brakeSwitchNotCloesd) |
0x90 | 换挡杆不在驻车位置 | SLNIP(shifterLeverNotInPark) |
0x91 | 变扭器离合器已锁定 | TCCL(torqueConverterClutchLocked) |
0x92 | 电压过高 | VTH(voltageTooHigh) |
0x93 | 电压过低 | VTL(voltageTooLow) |
0x94-0xEF | 为规定条件错误保留的值 | RFSCNC(reservedForSpecificConditionsNotCorrect) |
0xF0-0xFE | 车辆制造商规定条件错误 | VMSCNC(vehicleManufacturerSpecificConditionsNotCorrect) |
0xFF | ISO预留。用于以后扩展 | ISOSAERESRVD |
总结
以上NRC标准可参考ISO14229-1 附件A.1,在学习到一定程度后,建议啃一遍英文原版,另欢迎各位评论,提出宝贵意见,小编也会持续更新,以提供更好的作品。
以上是关于NRC定义(Negative Response Code)的主要内容,如果未能解决你的问题,请参考以下文章
英文react(reaction) 与respond(response) 有啥不同?
paypal-php-sdk中的PayPal-Mock-Response