
Published: February 11, 2026 · Last updated: June 28, 2026
Reading fault codes is the easy part. Plug in, read, write down the code. The mistake almost every beginner makes is treating that code as the answer, then buying the part it seems to name. A code points you at a system, not at a broken part.
This guide covers how to read codes across every module, how to decode what the characters mean, and the step that separates a good diagnosis from a parts-cannon guess.
Quick answer
Plug your OBD2 scanner into the port, ignition ON, and read the codes. Whatever tool you have, the process is the same. Each code is a five-character ID like P0420 or C0036 that tells you which system flagged a problem and roughly what kind.
It does not tell you which part to replace. The same code can be triggered by several different faults, so reading it is the start of diagnosis, not the end.
A fault code is a starting point, not a diagnosis. It names a system and a symptom. Confirm the actual cause before you spend money on parts.
This content is for members only.
How to read the codes
Ignition ON is enough, the engine doesn’t need to run. Connect the scanner, let it ID the car, and read. Whatever you’ve got, a cheap code reader or a full tablet, that part is the same: you press read and the tool lists what’s stored.
That’s the whole mechanical process. The skill isn’t in pressing read, it’s in what the codes mean and how much of the car you can reach.
Engine codes vs a full scan
This is the difference that catches people out. A basic code reader or ELM327 only talks to the engine. It reads the check-engine codes and nothing else. ABS, airbag, transmission, the body modules, all invisible.
A full-system scanner reaches every module the car will let it. On a used-car check that’s the whole game. An engine-only tool might show you one code while a dozen sit unread across the rest of the car, and the fault you actually care about is often not in the engine.

I recently ran a full system scan with ten different tools across two cars and timed every one. Two things stood out for reading codes: every tool found the same codes regardless of price, and a full scan probes far more modules than the car physically has, which is part of what a proper read involves.
→ I timed 10 scanners doing a full scan on 2 cars
What the code structure tells you
Every code starts with a letter for the system that stored it.
| First letter | System | Typical faults |
|---|---|---|
| P | Powertrain | Engine, transmission |
| B | Body | Airbag, seatbelt, lighting |
| C | Chassis | ABS, suspension, steering |
| U | Network | Modules failing to communicate |
After the letter, the digits narrow it down. Take P0400:

- P = powertrain
- 0 = generic code (same meaning on every brand)
- 4 = subsystem (exhaust and emissions)
- 00 = the specific fault (EGR A flow)
The second digit tells you generic versus brand-specific. 0, 2 and 3 are generic and mean the same on any car. 1 is a manufacturer code, specific to that brand.
The third digit (on powertrain codes) points at the subsystem:
| Digit | Subsystem |
|---|---|
| 0, 1, 2 | Fuel and air mixture |
| 3 | Ignition |
| 4 | Exhaust and emissions |
| 5 | Vehicle speed and idle |
| 6 | ECM |
| 7, 8, 9 | Transmission |
| A, B, C | Hybrid drive |
Generic codes are tidy, manufacturer codes are not
The breakdown above is the generic format, the SAE standard that every brand shares. Manufacturer codes don’t have to follow that five-character shape at all.
BMW throws short numeric codes like 4298. VAG uses its own five-digit codes in ODIS or VCDS. You’ll see everything from two characters to long hex strings depending on the brand and the protocol. There’s no single tidy template for them.
A cheap generic reader often shows these raw with no description, or worse, slaps a generic P-code label on something that means something different on that brand. To decode them properly you want brand software. On my BMWs I read the manufacturer codes in INPA. VAG needs ODIS or VCDS, Toyota needs Techstream. Same idea for every marque.
The failure-type suffix (longer codes)
Some scanners show an extra two characters on the end of a generic code (for example P0000XX) that describe the type of failure, not just the location. You don’t memorize this. You skim it when you need it.
The suffix often tells you whether you’re chasing a wiring fault or a dead component. “Short to ground” and “open circuit” point at the harness. “Component internal failure” points at the part itself. That hint saves you hours before you’ve touched a multimeter.
| Suffix | Meaning |
|---|---|
| 00 | Not specified |
| 04 | Open |
| 11 | Short to ground |
| 12 | Short to B+ |
| 13 | Open |
| 14 | Short to ground or open |
| 15 | Short to B+ |
| 16 | Circuit voltage below threshold |
| 17 | Circuit voltage above threshold |
| 18 | Current below threshold |
| 31 | No signal |
| 44 | Data memory failure |
| 47 | Controller failure |
| 49 | Internal electronic failure |
| 51 | Not programmed |
| 62 | Signal comparison failure |
| 64 | Plausibility failure |
| 72 | Actuator stuck closed |
| 74 | Actuator slipping |
| 77 | Commanded position not achievable |
| 7E | Actuator stuck on |
| 7F | Actuator stuck off |
| 85 | Signal above allowable range |
| 87 | Missing communication message |
| 93 | Performance, no operation |
| 96 | Component internal failure |
| 9C | Low or insufficient flow |
| 9E | Stuck on |
What to do after you read them (the part that matters)
Reading a code is the first and easiest step. What you do next is what separates a good mechanic from a bad one.
Every fault code can be caused by several different parts. The code names a symptom, not the broken component.
Take P0420, catalyst efficiency below threshold. It reads like “replace the catalytic converter,” and plenty of people do exactly that. But the same code comes from a lazy oxygen sensor, an exhaust leak ahead of the rear sensor, or a misfire dumping raw fuel into the exhaust. Replace a good cat and you still have the code, and you’re out the money.
So before you buy anything, confirm. Read the freeze frame to see the conditions when the code stored, watch live data, run a bidirectional test if the module supports it, and check the wiring with a multimeter. Confirm the part is dead, then replace it.
Don’t replace the part the code seems to name and hope. That’s the parts cannon, and it’s how people spend 300 euros to not fix a 40 euro problem. The code tells you where to look, not what to buy.
Freeze frame is the fastest way to add context to a code, and clearing comes only after you’ve actually fixed the fault.
→ OBD2 freeze frame data explained
→ How to clear fault codes (and why they come back)
What you need to read codes properly
You don’t need much, but you need the right kind. An ELM327 reads engine codes on your phone for almost nothing. The moment you want every module, not just the engine, you need a full-system scanner.
For a home setup a cheap full-system tool covers it. It reads codes and freeze frame across ABS, airbag, transmission and body, which is exactly what a real diagnosis needs.
Common questions about reading car fault codes (DTCs)
Can you read fault codes without a scanner?
On most modern cars, no. A few older models had key-dance or pedal tricks to flash codes on the dashboard, but they're model-specific and limited to a handful of engine codes. For anything useful, and for any non-engine module, you need a scanner.
Does a fault code tell you exactly which part is broken?
No, and this is the most expensive misunderstanding in DIY diagnostics. A code names a system and a symptom, and the same code can be caused by several different faults. Always confirm with freeze frame, live data, bidirectional tests or electrical testing before replacing a part.
What does a fault code actually mean?
It's a five-character code such as P0420. The first letter is the system (P powertrain, B body, C chassis, U network), and the digits narrow it down to a subsystem and a specific fault. The code identifies the system and the type of problem, not the exact part that needs replacing.
How do you read car fault codes?
Plug an OBD2 scanner into the diagnostic port (usually under the dashboard), turn the ignition on, let the tool identify the car, and run a scan. A full-system scanner reads codes from every module; a basic engine reader or ELM327 only reads the engine. Each code that appears tells you which system flagged a fault.
Most popular OBD2 guides
Hi, I am Juraj Lukacko. I got frustrated by unhelpful and scammy mechanics, so I decided to learn everything about car diagnostics myself. I test dozens of new car diagnostic tools every month along with learning new strategies to fix and customize cars.
