NRC (Negative Response Code)

핵심 요약

진단 요청에 대한 NRC를 해석하고 세션·입력·타이밍 조건을 비교해 원인을 좁힌다.

적용 범위

실행 예제의 주소·선택자·인터페이스·설정값은 시험 환경에 맞게 변경한다. 규격의 적용 판과 도구 버전을 확인한다.

본문

핵심 요약

NRC는 UDS 요청을 정상 완료하지 못한 이유 또는 처리가 계속 진행 중임을 나타내는 코드다. 진단 서비스는 배출가스 OBD에만 한정되지 않으며, 요청 형식·세션·보안 상태·동작 조건을 함께 해석해야 한다.

응답 프레임 읽기

UDS 부정 응답의 기본 구조는 0x7F, 원래 요청 SID, NRC다. 설명용 예시 7F 22 31은 ReadDataByIdentifier(0x22) 요청에 requestOutOfRange(0x31)가 반환됐다는 뜻이다. 실제 원인은 요청 DID와 ECU 사양을 함께 확인한다.

자주 확인하는 코드

  • 0x11 serviceNotSupported: 요청 서비스 지원 여부를 확인한다.
  • 0x12 subFunctionNotSupported: 해당 서비스의 하위 기능 지원 여부를 확인한다.
  • 0x13 incorrectMessageLengthOrInvalidFormat: 길이·필드·인코딩을 점검한다.
  • 0x22 conditionsNotCorrect: 서비스 수행에 필요한 조건을 확인한다.
  • 0x31 requestOutOfRange: 식별자·파라미터·허용 범위와 서비스별 규정을 확인한다.
  • 0x33 securityAccessDenied: 보안 접근 조건을 확인한다.
  • 0x78 requestCorrectlyReceived-ResponsePending: 요청은 수신됐지만 최종 응답이 준비되지 않은 중간 상태다. 즉시 최종 실패로 집계하지 않는다.

0x78과 타임아웃 구분

P2/P2*와 테스트 도구의 대기 설정, 타임스탬프, 최종 응답을 함께 본다. 0x78을 수신했다고 모든 대기 시간이 무제한으로 연장되는 것은 아니다. 실제 시간 값과 반복 제한은 적용 규격·세션 설정·프로젝트 사양에 따른다.

분석과 검증 순서

  • 원본 요청·응답을 보존하고 SID, 하위 기능, 데이터 길이를 확인한다.
  • 세션·보안 수준·ECU 상태와 요청 순서를 기록한다.
  • 정상 조건, 지원하지 않는 입력, 길이 오류, 조건 미충족을 각각 분리해 시험한다.
  • 예상 NRC는 임의 선택하지 않고 서비스별 요구사항과 검사 우선순위에 따라 정한다.
  • 타임아웃과 ECU의 부정 응답을 서로 다른 결과로 기록한다.

확인할 출처

ISO 14229-1의 적용 판과 해당 서비스 절을 확인한다: https://www.iso.org/search.html?q=ISO%2014229-1

AUTOSAR Classic DCM 규격은 프로젝트 릴리스에 맞춰 확인한다: https://www.autosar.org/standards/classic-platform

실습: 응답 해석과 결과 분류

response = bytes.fromhex("7F2278")
assert len(response) == 3 and response[0] == 0x7F
request_sid, nrc = response[1], response[2]
print(f"요청 SID=0x{request_sid:02X}, NRC=0x{nrc:02X}")
assert nrc == 0x78

위 응답은 ReadDataByIdentifier 요청의 처리 대기 상태다. 최종 응답을 계속 기다리되 적용 P2/P2*와 도구 timeout을 지킨다. 응답 미수신·최종 NRC·처리 대기를 다른 결과로 분류한다.

분석 기록에는 요청 원본, DID, 세션·보안·ECU 상태, 수신 시각과 최종 결과를 남긴다. 0x31을 받으면 DID 지원·입력 범위와 서비스별 검사 조건부터 확인한다.

💡

Negative Response Code : 차량의 진단 통신 프로토콜에서 사용되는 코드로, 특정 진단 요청이 실패했거나 처리할 수 없을 때 ECU(Electronic Control Unit)에서 반환하는 응답 코드입니다. 이 코드는 ISO 14229 (UDS - Unified Diagnostic Services) 표준에서 정의되며, 차량의 OBD(On-Board Diagnostics) 시스템에서 진단 요청에 대한 부정적인 응답을 식별하는 데 사용됩니다.

  • ECU가 진단 요청을 처리할 수 없을 때 송신되는 코드
  • 진단 도구가 문제를 이해하고 해결하는 데 도움을 줄 수 있음
NRC Hex Mnemonic Use Case
0x10 GR General Reject
0x11 SNS Service Not Supported
0x12 SFNS Sub-Function Not Supported
0x13 IMLOIF Incorrect Message Length or Invalid Format
0x14 RTL Response Too Long
0x21 BRR Busy Repeat Request
0x22 CNC Conditions Not Correct
0x24 RSE Request Sequence Error
0x25 NRFSC No Response From Subnet Component
0x26 FPEORA Failure Prevents Execution Of Requested Action
0x31 ROOR Request Out of Range
0x33 SAD Security Access Denied
0x35 IK InvalidKey
0x36 ENOA ExceedNumberOfAttempts
0x37 RTDNE RequiredTimeDelayNotExpired
0x38-0x4F RBEDLSD Reserved by Extended Data Link Security Document
0x70 UDNA Upload/Download Not Accepted
0x71 TDS Transfer Data Suspended
0x72 GPF General Programming Failure
0x73 WBSC Wrong Block Sequence Counter
0x78 RCRRP Response Correctly Received, But Response is Pending
0x7E SFNSIAS Sub-Function Not Supported in Active Session
0x7F SNSIAS Service Not Supported in Active Session
0x81 RTH RPM Too High
0x82 RTL RPM Too Low
0x83 EIR Engine is Running
0x84 EINR Engine is Not Running
0x85 ERTTL Engine Run Time Too Low
0x86 TTH Temperature Too High
0x87 TTL Temperature Too Low
0x88 VSTH Vehicle Speed Too High
0x89 VSTL Vehicle Speed Too Low
0x8A TPTH Throttle Pedal Too High
0x8B TPTL Throttle Pedal Too Low
0x8C TRNIN Transmission Range Not in Neutral
0x8D TRNIG Transmission Range Not in Dear
0x8F BSNC Brake Switches Not Closed
0x90 SLNIP Shifter Lever Not in Park
0x91 TCCL Torque Converter Clutch Locked
0x92 VTH Voltage Too High
0x93 VTL Voltage Too Low
0xF0-0xFE < Manufacturer Specific Conditions Not Correct

with Description

value Mnemonic responseCode Description
0x00 < positiveResponse This response code shall not be used in a negative response message. This positiveResponse parameter value is reserved for server internal implementation.
0x01 - 0x0F < ISOSAEReserved This range of values is reserved by this document for future definition.
0x10 GR generalReject This response code indicates that the requested action has been rejected by the server. The generalReject response code shall only be implemented in the server if none of the negative response codes defined in this document meet the needs of the implementation. At no means shall this response code be a general replacement for other response codes defined.
0x11 SNS serviceNotSupported This response code indicates that the requested action will not be taken because the server does not support the requested service. The server shall send this response code in case the client has sent a request message with a service identifier, which is either unknown or not supported by the server. Therefore this negative response code is not shown in the list of negative response codes to be supported for a diagnostic service, because this negative response code is not applicable for supported services.
0x12 SFNS subFunctionNotSupported This response code indicates that the requested action will not be taken because the server does not support the service specific parameters of the request message. The server shall send this response code in case the client has sent a request message with a known and supported service identifier but with “sub function“ which is either unknown or not supported.
0x13 IMLOIF incorrectMessageLengthOrInvalidFormat This response code indicates that the requested action will not be taken because the length of the received request message does not match the prescribed length for the specified service or the format of the parameters do not match the prescribed format for the specified service.
0x14 RTL responseTooLong This response code shall be reported by the server if the response to be generated exceeds the maximum number of bytes available by the underlying network layer.
0x15 - 0x20 < ISOSAEReserved This range of values is reserved for future definition.
0x21 BRR busyRepeatReques This response code indicates that the server is temporarily too busy to perform the requested operation. In this circumstance the client shall perform repetition of the “identical request message” or “another request message”. The repetition of the request shall be delayed by a time specified in the respective implementation documents.Example: In a multi-client environment the diagnostic request of one client might be blocked temporarily by a NRC $21 while a different client finishes a diagnostic task.NOTE If the server is able to perform the diagnostic task but needs additional time to finish the task and prepare the response, the NRC 0x78 shall be used instead of NRC 0x21.This response code is in general supported by each diagnostic service, as not otherwise stated in the data link specific implementation document, therefore it is not listed in the list of applicable response codes of the diagnostic services.
0x22 CNC conditionsNotCorrect This response code indicates that the requested action will not be taken because the server prerequisite conditions are not met.
0x23   ISOSAEReserved This range of values is reserved for future definition.
0x24 RSE requestSequenceError This response code indicates that the requested action will not be taken because the server expects a different sequence of request messages or message as sent by the client. This may occur when sequence sensitive requests are issued in the wrong order.EXAMPLE A successful SecurityAccess service specifies a sequence of requestSeed and sendKey as sub-functions in the request messages. If the sequence is sent different by the client the server shall send a negative response message with the negative response code 0x24 (requestSequenceError).
0x25 - 0x30 < ISOSAEReserved This range of values is reserved for future definition.
0x31 ROOR
requestOutOfRange This response code indicates that the requested action will not be taken because the server has detected that the request message contains a parameter which attempts to substitute a value beyond its range of authority (e.g. attempting to substitute a data byte of 111 when the data is only defined to 100), or which attempts to access a dataIdentifier/routineIdentifer that is not supported or not supported in active session. This response code shall be implemented for all services, which allow the client to read data, write data or adjust functions by data in the server.
0x32 FPEORA ISOSAEReserved This range of values is reserved for future definition.
0x33 SAD securityAccessDenied This response code indicates that the requested action will not be taken because the server’s security strategy has not been satisfied by the client. The server shall send this response code if one of the following cases occur:the test conditions of the server are not met,the required message sequence e.g. DiagnosticSessionControl, securityAccess is not met,the client has sent a request message which requires an unlocked server.Beside the mandatory use of this negative response code as specified in the applicable services within this standard, this negative response code can also be used for any case where security is required and is not yet granted to perform the required service.
0x34 < ISOSAEReserved This range of values is reserved for future definition.
0x35 IK invalidKey This response code indicates that the server has not given security access because the key sent by the client did not match with the key in the server’s memory. This counts as an attempt to gain security. The server shall remain locked and increment its internal securityAccessFailed counter.
0x36 ENOA exceedNumberOfAttempts This response code indicates that the requested action will not be taken because the client has unsuccessfully attempted to gain security access more times than the server’s security strategy will allow.
0x37 RTDNE requiredTimeDelayNotExpired This response code indicates that the requested action will not be taken because the client’s latest attempt to gain security access was initiated before the server’s required timeout period had elapsed.
0x38 - 0x4F RBEDLSD reservedByExtendedDataLinkSecurityDocument This range of values is reserved by ISO 15764 Extended data link security.
0x50 - 0x6F   ISOSAEReserved This range of values is reserved for future definition.
0x70 UDNA uploadDownloadNotAccepted This response code indicates that an attempt to upload/download to a server’s memory cannot be accomplished due to some fault conditions.
0x71 TDS transferDataSuspended This response code indicates that a data transfer operation was halted due to some fault. The active transferData sequence shall be aborted.
0x72 GPF generalProgrammingFailure This response code indicates that the server detected an error when erasing or programming a memory location in the permanent memory device (e.g. Flash Memory).
0x73 WBSC wrongBlockSequenceCounter This response code indicates that the server detected an error in the sequence of blockSequenceCounter values. Note that the repetition of a TransferData request message with a blockSequenceCounter equal to the one included in the previous TransferData request message shall be accepted by the server.
0x74 - 0x77 << ISOSAEReserved This range of values is reserved for future definition.
0x78 RCRRP requestCorrectlyReceived-ResponsePending This response code indicates that the request message was received correctly, and that all parameters in the request message were valid, but the action to be performed is not yet completed and the server is not yet ready to receive another request. As soon as the requested service has been completed, the server shall send a positive response message or negative response message with a response code different from this. The negative response message with this response code may be repeated by the server until the requested service is completed and the final response message is sent. This response code might impact the application layer timing parameter values. The detailed specification shall be included in the data link specific implementation document.This response code shall only be used in a negative response message if the server will not be able to receive further request messages from the client while completing the requested diagnostic service. When this response code is used, the server shall always send a final response (positive or negative) independent of the suppressPosRspMsgIndicationBit value. A typical example where this response code may be used is when the client has sent a request message, which includes data to be programmed or erased in flash memory of the server. If the programming/erasing routine (usually executed out of RAM) is not able to support serial communication while writing to the flash memory the server shall send a negative response message with this response code. This response code is in general supported by each diagnostic service, as not otherwise stated in the data link specific implementation document, therefore it is not listed in the list of applicable response codes of the diagnostic services.
0x79 - 0x7D < ISOSAEReserved This range of values is reserved for future definition.
0x7E SFNSIAS subFunctionNotSupportedInActiveSession This response code indicates that the requested action will not be taken because the server does not support the requested sub-function in the session currently active. Within the programmingSession negative response code 0x12 (subFunctionNotSupported) may optionally be reported instead of negative response code 0x7F (subFunctionNotSupportedInActiveSession). This response code shall only be used when the requested sub-function is known to be supported in another session, otherwise response code 0x12 (subFunctionNotSupported) shall be used. This response code shall be supported by each diagnostic service with a sub-function parameter, if not otherwise stated in the data link specific implementation document, therefore it is not listed in the list of applicable response codes of the diagnostic services.
0x7F SNSIAS serviceNotSupportedInActiveSession This response code indicates that the requested action will not be taken because the server does not support the requested service in the session currently active. This response code shall only be used when the requested service is known to be supported in another session, otherwise response code 0x11 (serviceNotSupported) shall be used. This response code is in general supported by each diagnostic service, as not otherwise stated in the data link specific implementation document, therefore it is not listed in the list of applicable response codes of the diagnostic services.
0x80 < ISOSAEReserved This range of values is reserved for future definition.
0x81 RTH rpmTooHigh This response code indicates that the requested action will not be taken because the server prerequisite condition for RPM is not met (current RPM is above a pre-programmed maximum threshold).
0x82 RTL rpmTooLow This response code indicates that the requested action will not be taken because the server prerequisite condition for RPM is not met (current RPM is below a pre-programmed minimum threshold).
0x83 EIR engineIsRunning This is required for those actuator tests which cannot be actuated while the Engine is running. This is different from RPM too high negative response and needs to be allowed.
0x84 EINR engineIsNotRunning This is required for those actuator tests which cannot be actuated unless the Engine is running. This is different from RPM too low negative response, and needs to be allowed.
0x85 ERTTL engineRunTimeTooLow This response code indicates that the requested action will not be taken because the server prerequisite condition for engine run time is not met (current engine run time is below a preprogrammed limit).
0x86 TTH temperatureTooHigh This response code indicates that the requested action will not be taken because the server prerequisite condition for temperature is not met (current temperature is above a preprogrammed maximum threshold).
0x87 TTL temperatureTooLow This response code indicates that the requested action will not be taken because the server prerequisite condition for temperature is not met (current temperature is below a preprogrammed minimum threshold).
0x88 VSTH vehicleSpeedTooHigh This response code indicates that the requested action will not be taken because the server prerequisite condition for vehicle speed is not met (current VS is above a pre-programmed maximum threshold).
0x89 VSTL vehicleSpeedTooLow This response code indicates that the requested action will not be taken because the server prerequisite condition for vehicle speed is not met (current VS is below a pre-programmed minimum threshold).
0x8A TPTH throttle/PedalTooHigh This response code indicates that the requested action will not be taken because the server prerequisite condition for throttle/pedal position is not met (current TP/APP is above a preprogrammed maximum threshold).
0x8B TPTL throttle/PedalTooLow This response code indicates that the requested action will not be taken because the server prerequisite condition for throttle/pedal position is not met (current TP/APP is below a preprogrammed minimum threshold).
0x8C TRNIN transmissionRangeNotInNeutral This response code indicates that the requested action will not be taken because the server prerequisite condition for being in neutral is not met (current transmission range is not in neutral).
0x8D TRNIG transmissionRangeNotInGear This response code indicates that the requested action will not be taken because the server prerequisite condition for being in gear is not met (current transmission range is not in gear).
0x8E   ISOSAEReserved This range of values is reserved by this document for future definition.
0x8F BSNC brakeSwitch(es)NotClosed (Brake Pedal not pressed or not applied) For safety reasons, this is required for certain tests before it begins, and must be maintained for the entire duration of the test.
0x90 SLNIP shifterLeverNotInPark For safety reasons, this is required for certain tests before it begins, and must be maintained for the entire duration of the test.
0x91 TCCL torqueConverterClutchLocked This response code indicates that the requested action will not be taken because the server prerequisite condition for torque converter clutch is not met (current TCC status above a preprogrammed limit or locked).
0x92 VTH voltageTooHigh This response code indicates that the requested action will not be taken because the server prerequisite condition for voltage at the primary pin of the server (ECU) is not met (current voltage is above a pre-programmed maximum threshold).
0x93 VTL voltageTooLow This response code indicates that the requested action will not be taken because the server prerequisite condition for voltage at the primary pin of the server (ECU) is not met (current voltage is below a pre-programmed maximum threshold).
0x94 - 0xFE < reservedForSpecificConditionsNotCorrect This range of values is reserved for future definition.
0xFF < ISOSAEReserved This range of values is reserved for future definition.