Home

/

Knowledge Base

/

How to Diagnose UDS NRC 0x31 Request Out Of Range

Knowledge Base

Last Updated: 2026-07-02

How to Diagnose UDS NRC 0x31 Request Out Of Range

NRC 0x31 usually means the ECU received a service request whose parameters or preconditions did not fit the allowed range.

Common Trigger Conditions

The request can fail because the parameter block is malformed, a coding precondition is missing, or the selected data identifier is not valid for the ECU state.

In OEM workflows this often appears during coding or calibration operations when the operator only sees a tool-level error and not the exact request payload.

What to Trace in the Capture

Look for the service identifier that immediately precedes the 0x7F negative response and confirm whether the failing sub-function or parameter block was sent correctly.

The important part is not just spotting NRC 31, but reconstructing the request chain that made the ECU reject it.

High-Value Questions to Answer

Was the ECU already in the right diagnostic session, security level, or environmental condition before the rejected request was sent?

Did the tool send the wrong data identifier, sub-function, or payload length even though the workshop symptom only showed a generic coding failure?

What the Analyzer Helps Surface

A structured timeline makes it easier to connect the negative response to the exact request packet, not just to the user-visible operation label in the diagnostic tool.

That matters when several writes, reads, or routine control calls happen close together during coding or flashing.

Capture-Backed Evidence

These examples are drawn from real capture files available in the project evidence pool. They give the article something stronger than generic protocol theory.

PAS flashing capture with a concrete 0x34 -> 0x31 reject

PAS flashing case with RequestDownload rejected by NRC 0x31

Evidence reference: EVID-NRC31-PAS-DOWNLOAD-01

Node roles in this case

  • tester: the flashing client
  • target ECU: the ECU that rejects RequestDownload

A DoIP capture where the request chain narrows to a single RequestDownload rejection instead of a vague workshop symptom.

Evidence signals

  • ISO 13400-2 v2 transport is confirmed across 1,424 packets.
  • A single target ECU returns SID 0x34 / NRC 0x31 at +416.131 s.
  • The same target ECU shows NRC 0x78 on SID 0x27 and SID 0x2E immediately before the 0x31 reject, which strengthens the precondition-chain interpretation.

Timeline

  • +349.739 s: the target ECU emits SID 0x19 / NRC 0x78.
  • +415.073 s: the same target ECU emits SID 0x27 / NRC 0x78 during the security-related phase.
  • +416.031 s: the same target ECU emits SID 0x2E / NRC 0x78, then +416.131 s rejects SID 0x34 with NRC 0x31.

This is the kind of capture that lets the KB explain that NRC 31 is rarely useful in isolation. The preceding request chain is the actual evidence.

A compact routine-control style request is rejected directly with NRC 0x31

ADC extraction case with direct SID 0x31 rejection

Evidence reference: EVID-NRC31-ROUTINE-ADC-01

Node roles in this case

  • tester: the diagnostic client
  • target ECU: the ECU that rejects the routine-style request

A short v2 DoIP capture where the useful teaching value comes from how little ambiguity is left in the final rejection window.

Evidence signals

  • The capture is only 130 packets long and isolates one actionable anomaly category.
  • The tester issues SID 0x31 at +9.567 s and the target ECU returns SID 0x7F / NRC 0x31 at +9.578 s.
  • Unlike the larger flashing case, this example shows that NRC 31 can also appear in a compact routine-style exchange with almost no surrounding noise.

Timeline

  • +9.429 s to +9.455 s: final keep-alive traffic clears and the session remains open.
  • +9.567 s: the tester sends SID 0x31 to the target ECU.
  • +9.578 s: the target ECU rejects that request with NRC 0x31.

This gives the KB a second NRC 31 pattern: not a long precondition chain, but a short direct reject that is easier for readers to recognize in the wild.

Common Misreads

These are the interpretation traps that real packet evidence helps avoid.

  • Treating NRC 31 as a standalone coding failure hides whether the real cause was session, security, payload structure, or ECU state.
  • If a 0x31 is preceded by 0x78 on nearby setup requests, the rejected request is often the end of a longer precondition problem, not the beginning of it.
  • A tool-level label like 'download failed' is weaker evidence than the exact SID and ECU address that returned 0x31.

Related Diagnostic Guides

Use nearby guides to move from protocol filtering to root-cause troubleshooting without leaving the knowledge base.

How to Read UDS NRC 0x78 Response Pending TimeoutsWireshark Filter for Port 13400 and DoIP TrafficBMW DoIP Routing Activation Request Troubleshooting

Frequently Asked Questions

What does UDS NRC 0x31 mean?

It means the ECU rejected the request because the parameter set, sub-function, data identifier, or precondition fell outside the accepted range.

How do I find the request that triggered NRC 31?

Trace the 0x7F negative response backward to the immediately preceding service and inspect the exact request payload, not just the tool label.

Upload your capture and trace the full NRC 31 chain

Best when coding or calibration fails but the diagnostic tool hides the exact rejected payload.

Browse all seeded guides