Car Fault Codes Explained: What P0171 and the Rest Actually Mean

A fault code has a structure that tells you a surprising amount before you look it up: the letter gives the system, the first digit says whether it is a generic or manufacturer code, and the rest narrows it to a circuit. What a code never tells you is which component has failed — only where the problem was detected.

How a code is built

Every OBD-II diagnostic trouble code follows the same five-character pattern, and decoding it takes seconds once you know the rules.

Take P0171 as the example, since it is one of the most frequently seen.

P
The system. P is powertrain (engine and transmission), B is body, C is chassis, U is network and communication.
0
Code type. 0 is a generic code defined across all manufacturers; 1 is manufacturer-specific. A 1 here means a generic reader may not interpret it correctly.
1
The subsystem. In powertrain codes, 1 covers fuel and air metering.
71
The specific fault within that subsystem. Here, system too lean on bank 1.

The subsystem digit, for powertrain codes

The third character is the most useful single digit for working out roughly what area a code concerns, before looking anything up.

  • 0, 1 and 2 — fuel and air metering, including injectors, mixture and mass airflow.
  • 3 — ignition system and misfire detection.
  • 4 — auxiliary emission controls, which covers EGR, the catalytic converter and evaporative emissions.
  • 5 — vehicle speed, idle control and auxiliary inputs.
  • 6 — the computer output circuits and module communication.
  • 7, 8 and 9 — transmission.

The trap: a code names a circuit, not a culprit

This is the single most important thing in this guide, and it is where most money gets wasted.

P0171 means the ECU has detected that the mixture on bank 1 is leaner than expected — it is having to add fuel to compensate for something. It does not mean the oxygen sensor has failed. The oxygen sensor is how the condition was detected, and it is frequently working perfectly and reporting the truth.

The actual causes of P0171 include a vacuum leak, a failing mass airflow sensor, a dirty or faulty air intake, low fuel pressure, a leaking intake gasket, a blocked fuel filter or a genuinely faulty oxygen sensor. Replacing the sensor addresses one possibility out of seven.

The same pattern applies almost everywhere. A code naming a component tells you which circuit reported a problem, not which part caused it.

Stored, pending and permanent

Codes come in categories and they mean different things, which is worth knowing when you are shown a list.

A stored code is a confirmed fault, usually accompanied by the warning light. A pending code is one the ECU has seen once but not yet confirmed on a second drive cycle — an early warning, and genuinely useful because it identifies developing problems before they become symptoms.

A permanent code is the one that surprises people. It is stored by the ECU and cannot be cleared with a scan tool; it only clears once the vehicle has confirmed through its own drive cycles that the fault is actually fixed. It exists specifically to prevent someone clearing codes immediately before an emissions test.

So if a reader will not clear a code, that is often not a fault with the reader.

Freeze-frame data: the part worth more than the code

When a fault is stored, the ECU captures a snapshot of conditions at that moment. It is routinely more useful than the code itself and routinely ignored.

Typically it records engine speed, calculated load, coolant temperature, intake air temperature, short and long-term fuel trims, vehicle speed and throttle position.

Why it matters: a misfire code recorded at 800rpm on a cold engine is a different problem from the same code recorded at 3,000rpm under full load. The code is identical; the diagnosis is not. For intermittent faults that will not reproduce on demand, the freeze frame may be the only description of the conditions you get.

This is also the reason not to clear codes before they are read, since clearing deletes the freeze frame along with the code.

What a generic reader will not show you

A basic reader is worth owning. It is worth knowing its boundaries.

Manufacturer-specific codes
Codes starting P1, and body, chassis and network codes, are often unreadable or misinterpreted by generic tools.
Other modules
ABS, airbag, transmission, body control and immobiliser faults generally need equipment that talks to those modules.
Live data
Watching values change in real time, which is how most intermittent faults are actually caught.
Actuator tests
Commanding a component directly to see whether it responds — the difference between suspecting and confirming.
Adaptations and coding
Reading and resetting learned values, which is required after certain repairs.

How to use a code sensibly

A short practical approach for anyone with a reader and a warning light.

  1. Read and record the codes and the freeze-frame data before clearing anything.
  2. Note whether each code is stored, pending or permanent.
  3. Look up what the code actually says, rather than what a parts listing suggests it means.
  4. Treat the named component as the least likely answer until the cheaper and more common causes are eliminated.
  5. Check the obvious physical possibilities — loose connectors, split hoses, a dirty filter, a poor earth.
  6. If it is not resolved, get live data read under the conditions that produce the fault rather than guessing further.

A few codes decoded

P0300
Random or multiple-cylinder misfire. Ignition, fuel delivery or an air leak are all candidates.
P0301 to P0306
Misfire on a specific cylinder, numbered — which narrows the search considerably.
P0401
Insufficient EGR flow detected. Often carbon build-up, sometimes the valve’s position sensor or wiring.
U-codes after a flat battery
Network and communication faults frequently appear across several modules after a weak battery or jump-start. They often clear once voltage is stable and the battery is healthy.

What you can safely check yourself

  • Engine oil level, on level ground.
  • Coolant level — only with the engine cold. Never open a hot cooling system.
  • Battery terminals: tight, and free of white or green corrosion.
  • Obvious disconnected hoses or unplugged connectors in the engine bay.
  • That the fuel cap is closed properly, on petrol cars that monitor fuel vapour.

Beyond that, stop. The next steps involve live data and testing, and guessing at parts is where the money goes.

Fault code questions

Does the same code mean the same thing on every car?

For generic codes — those with 0 as the second character — broadly yes, because they are standardised across manufacturers.

Manufacturer-specific codes with 1 as the second character are defined by the manufacturer, and the same code can mean entirely different things on different makes.

My reader will not clear a code. Is it broken?

Probably not. Permanent codes cannot be cleared with a scan tool by design — they clear only when the vehicle has confirmed through its own drive cycles that the fault is genuinely fixed.

That mechanism exists specifically to stop codes being cleared just before an emissions test.

There are five codes. Do I have five faults?

Usually not. One underlying problem commonly sets several codes — a vacuum leak can trigger lean codes, misfire codes and idle control codes simultaneously.

Working out which is the cause and which are consequences is most of the diagnostic work, and it is a good reason not to start replacing parts named in each one.

Can you tell me what my code means over the phone?

We can tell you what the code refers to and what it commonly points at, which is often enough to know how urgent it is.

What cannot be done over the phone is confirm the cause, because that needs live data and the freeze-frame conditions. Send the code and the registration and you will get an honest answer about which of those you need.

Got a fault code you do not understand?

Send it with the registration and the symptoms. We will tell you what it points at and whether it needs reading properly on the vehicle.