How to read a diagnostic trouble code

What the five characters on the diagnostic tool mean, how to work out which part of the vehicle they concern, and why a code never tells you which part has failed.

Go to the documented codes

A diagnostic trouble code — in short a DTC, Diagnostic Trouble Code — is made up of one letter and four characters, for example P0299. It is not an arbitrary numbering: every position says something, and knowing that lets you work out where to look even when faced with a code you have never seen before.

The letter: which part of the vehicle

It is the most immediate piece of information and narrows the field to one area of the car straight away.

  • PPowertrain: engine, fuel system, ignition, exhaust, transmission. It is by far the largest family and the one met every day in the workshop.
  • BBody: everything in the cabin and on the bodywork, from airbags to window lifts, from interior lights to seat position sensors.
  • CChassis: the chassis, that is brakes, ABS, ESP, suspension, steering.
  • UNetwork: the communication network between the control units. A U code rarely points to a broken component: it says that two control units are no longer talking to each other, and the cause may be a harness, a connector or a third control unit that has gone down and taken the others with it.

The first digit: standard or manufacturer-specific

A 0 normally indicates a standard code, defined by the international standard and the same across every make. A 1 indicates a code defined by the individual manufacturer, whose meaning has to be looked up in that marque's documentation — which is why searching for a P1xxx code in a generic list often gives no useful result.

The rule has exceptions worth knowing: the P2xxx series is standard even though it does not begin with zero, and the P3xxx series holds both standard and manufacturer codes. As a first orientation the rule works, but faced with a code that does not add up it is worth checking the marque's documentation.

The second digit: which subsystem

In P0 codes the second digit identifies the technical area: in P0299 it is the 2. It is the map that lets you form an idea before you even look the code up.

P0100 – P0299
Air and fuel metering: air flow meter, pressure sensors, injectors, mixture ratio.
P0300 – P0399
Ignition and misfires. P0300 indicates a random misfire or a misfire on several cylinders; from P0301 onwards the last digit is the cylinder concerned.
P0400 – P0499
Emission control: exhaust gas recirculation, catalytic converter, evaporative system, secondary air injection. The diesel particulate filter codes are not here: almost all of them are in the P2xxx series.
P0500 – P0599
Vehicle speed, idle speed, auxiliary circuits.
P0600 – P0699
Control unit and output circuits: internal faults in the computer, power supplies, communication with the actuators.
P0700 – P0999
Transmission, both automatic and automated manual.

The last characters, and why they are sometimes letters

They pin down the precise fault: open circuit, short to earth or short to positive, signal out of range, value inconsistent with the other sensors. They can contain letters too, as in code P24AE: it is not a misreading by the diagnostic tool, the numbering is hexadecimal and after 9 it carries on with A, B, C, D, E, F.

The point that matters

The code says which signal is out of range, not which part has failed

It is the distinction that separates a diagnosis from replacing parts by trial and error, and it is the one that costs the most hours in the workshop when it is skipped.

Take a code reporting an ‘open circuit to the sensor’. The control unit is saying one thing only: the signal I expect is not arriving on that wire. There are at least four possible explanations, and they are four different jobs with four different costs:

  • the sensor really has failed;
  • the sensor is sound but the harness is broken or crushed;
  • the connector is corroded and makes contact intermittently;
  • the earth has been lost, and the sensor has nothing to do with it.

Replacing the sensor only works in the first case. In the other three the code comes back after a few driving cycles, with the new part fitted and the invoice already written.

When there are many codes: which to read first

A diagnostic tool returning ten codes is not reporting ten faults. In most cases one of them has set off all the others: a control unit losing its power supply brings down communication on the bus, and every other control unit records its own ‘signal not received’ code.

The practical rule is to look for the code that explains the others, not the one that appears first in the list. If among ten communication codes there is one concerning a power supply or a physical component, that is almost always where you work. It is exactly the kind of reading that a real case study settles in a minute and a list of definitions never settles at all.

Pending, stored, permanent

Not all codes carry the same weight, and the diagnostic tool says so.

  • Pending — the fault has been detected once only and the control unit is waiting for confirmation. The warning light may still be off.
  • Stored — the fault has been confirmed over several driving cycles. It is the code that lights the warning lamp.
  • Permanent — it cannot be cleared with the diagnostic tool. Only the control unit clears it, after checking for itself, over several driving cycles, that the fault does not come back.

Clearing a code repairs nothing, and destroys evidence

Wiping the memory serves one purpose only: checking whether the fault is current or left over from an earlier repair. If the cause is still there, the code comes back.

There is a cost that is often overlooked, though: along with the code you lose the freeze frame, that is the snapshot of the parameters at the moment the fault was detected — engine speed, temperature, engine load, road speed. On an intermittent fault that data is worth more than the code itself, because it says under what conditions it occurs. It is worth reading and noting it before clearing.

Why two cars with the same code have different causes

The same code, on the same make, can have different origins depending on the engine and the year. The definition is identical — it is standardised — but what actually fails is not: it depends on how that engine is built, which components it uses and which recurring defects it has.

That is why the definition of a code, on its own, does not settle a diagnosis. You need to know how it turned out on the cars where that code has already appeared: which component it was, what had been tried first without result, how long it took.

The sheets on Sema Repair start from here: every code is tied to a specific engine and to a case actually solved in a workshop.

Would you like to see Sema Repair at work?

Get in touch and one of our sales team will show you everything Sema Repair can do and how it can help in your workshop.