How to read an OBD-II code
An OBD-II code like P0301 has five characters: the system, whether it is generic or maker-specific, the subsystem and the exact fault. Plus pending, confirmed and permanent codes.
An OBD-II trouble code has five characters, for example P0301. The letter names the system (P for powertrain). The first digit says whether the code is a generic SAE code or one the vehicle maker defined. The next digit names the subsystem, and the last two pin down the fault. P0301 reads: powertrain, generic, ignition or misfire, cylinder 1 misfire.
The five characters
| Position | Example (P0301) | What it tells you |
|---|---|---|
| 1st | P | System: P, B, C or U |
| 2nd | 0 | Generic (SAE) or manufacturer-specific |
| 3rd | 3 | Subsystem |
| 4th and 5th | 01 | The specific fault |
First character: the system
| Letter | System | Examples |
|---|---|---|
| P | Powertrain | Engine, transmission and related emission systems |
| B | Body | Airbags, lighting, heating and air conditioning |
| C | Chassis | Brakes, steering and suspension |
| U | Network | Communication between control modules |
U codes such as U0100 (lost communication with the engine computer) mean modules cannot talk to each other.
Second character: generic or manufacturer-specific
- 0 (P0, B0, C0, U0): a generic code defined in SAE J2012. It means the same thing on every vehicle.
- 1 (P1, B1, C1, U1): a manufacturer-specific code. The vehicle maker defines it, so the same number can mean different things on different makes. Look it up in that maker's service information.
- P2: also generic. CARB's rule names P0xxx and P2xxx as the SAE-defined codes makers must use whenever one fits.
- P3: a shared range. SAE J2012 splits it between manufacturer-controlled codes and codes reserved for SAE.
CARB's rule requires makers to use an SAE code whenever an appropriate one exists. A maker may use its own code (such as a P1xxx) only with approval, for example when no SAE code fits.
Third character: the subsystem (P0 codes)
| Range | Subsystem |
|---|---|
| P00xx | Fuel and air metering and auxiliary emission controls |
| P01xx | Fuel and air metering |
| P02xx | Fuel and air metering (injector circuit) |
| P03xx | Ignition system or misfire |
| P04xx | Auxiliary emission controls (EGR, evaporative system, catalyst, secondary air) |
| P05xx | Vehicle speed, idle control and auxiliary inputs |
| P06xx | Computer and auxiliary outputs |
| P07xx–P09xx | Transmission |
| P0Axx–P0Cxx | Hybrid propulsion |
Some examples:
- P0171: fuel and air metering — system too lean, bank 1.
- P0301: ignition or misfire — cylinder 1 misfire detected.
- P0420: auxiliary emission controls — catalyst efficiency below threshold, bank 1.
- P0442: auxiliary emission controls — evaporative system small leak.
- P0128: fuel and air metering — coolant temperature below the thermostat regulating temperature.
Fourth and fifth characters: the fault
The last two characters identify the exact fault within the subsystem. Within a group they often follow a pattern. For oxygen sensors, for example, P0130 is the circuit, P0131 low voltage, P0132 high voltage, P0133 slow response and P0134 no activity, all for bank 1 sensor 1. The oxygen sensor guide explains bank and sensor numbers.
A code names the likely area of the fault, not the part to replace. CARB's rule asks makers to make the code point to the likely cause "to the fullest extent possible", and to use separate codes for different faults, such as a circuit that reads low, high or open.
Pending, confirmed and permanent codes
The same code can be stored in three ways.
| Type | When it is stored | Check engine light | How it clears |
|---|---|---|---|
| Pending | When a fault is first detected, usually on one driving cycle | Not yet on | Erased at the end of the next driving cycle in which the test runs and the fault is not seen |
| Confirmed (stored) | When the same fault is detected again before the end of the next driving cycle in which the test runs | On | The light goes out after three driving cycles in a row without the fault. The code itself is erased after 40 engine warm-up cycles without the fault, or with a scan tool |
| Permanent | When a confirmed code is commanding the light on (phased in on 2010–2012 and newer vehicles) | On | Only by the car itself, after the test runs again and finds no fault. A scan tool or battery disconnect cannot erase it |
Two kinds of fault turn on the light without waiting for a second driving cycle:
- Misfire bad enough to damage the catalytic converter: a pending code is stored, and the light starts blinking once per second straight away, for as long as the misfire is happening.
- Limp-home mode: if the powertrain switches to a default mode that can affect emissions, the light comes on and a code is stored within 10 seconds.
An emissions test reads confirmed codes (with a scan tool request called Mode $03). Pending codes alone do not fail the US federal OBD test. A vehicle fails when a stored code is commanding the light on. It also fails if the light does not come on with the key on and the engine off, if the light is commanded on but is not lit, if the connector is missing or has been tampered with, or if too many monitors are still not ready at the retest.
Freeze frame
When a code is stored, the computer also saves a freeze frame: engine data from the moment of the fault. It includes the code that caused it, engine speed, coolant temperature, vehicle speed, calculated load and, where used, fuel trim, intake air temperature and manifold pressure. A freeze frame shows the conditions in which the fault happened, which helps reproduce it.
Reading and clearing codes
A generic OBD-II scan tool reads confirmed, pending and permanent codes, the freeze frame and live data. Clearing codes erases confirmed and pending codes and the freeze frame, and resets all readiness monitors to "not complete". That matters for emissions tests: see drive cycles and readiness monitors.
Clear codes only after the fault is fixed. If the cause is still there, the code returns.
To look up any code, use the trouble code list. For the terms used here, see the OBD-II glossary.
OBD DashX reads and clears OBD-II trouble codes on Android with a Bluetooth ELM327 adapter.
Related codes
Sources: SAE J2012 / ISO 15031-6; 13 CCR 1968.2(c), (d)(2), (e)(3.4.1), (g)(4.4); 40 CFR 85.2207 and 85.2222; MOTOR Information Systems; Delaware DMV OBD DTC list