Explication des codes d'erreur OBD2 : la différence entre les codes P, B, C et U

An OBD2 trouble code is not a diagnosis by itself. It is a structured clue recorded when a vehicle control module detects a condition outside its expected range. Knowing what the five characters mean helps you choose the right scan, service information, and tests instead of replacing the component named in a code description.

This guide explains the difference between P, B, C, and U codes, how to read the remaining characters, and how to turn a code into a sensible diagnostic plan. If the terminology is new to you, begin with our complete beginner’s guide to OBD2 diagnostic software.

What Is a Diagnostic Trouble Code?

A diagnostic trouble code, or DTC, is an alphanumeric identifier stored by an electronic control unit after a monitored test fails. The familiar five-character format is standardized through SAE J2012 and the related ISO 15031-6 framework. SAE’s current J2012 revision defines the format and code messages, while its digital annex tracks updated definitions.

A DTC tells you which system reported a problem and what type of fault its monitor recognized. It does not automatically prove that a sensor, actuator, or control module is defective. Wiring damage, low voltage, poor grounds, vacuum leaks, mechanical faults, and lost network communication can all trigger codes that appear to name a healthy part.

The First Character: P, B, C, or U

The first letter identifies the broad vehicle system that owns the code:

  • P — Powertrain: engine, transmission, fuel, ignition, and emissions-related functions. Generic OBD2 scanners concentrate heavily on P codes because legislated OBD requirements focus on emissions.
  • B — Body: systems commonly managed by body electronics, such as airbags, seats, doors, climate control, lighting, and occupant-related functions.
  • C — Chassis: systems such as anti-lock braking, stability control, steering, and suspension.
  • U — Network communication: faults involving communication between modules or problems on a vehicle data bus.

These categories are not rigid boundaries. An apparently chassis-related symptom can produce a U code when the real issue is missing network data.

Common examples

  • P0300: random or multiple-cylinder misfire detected.
  • C0035: a standardized chassis code associated with the left-front wheel-speed sensor circuit.
  • U0100: lost communication with the engine or powertrain control module.

Body-code wording can vary significantly by vehicle and restraint-system design. Always confirm a B-code definition in model-specific service information before testing or ordering parts.

How to Read the Other Four Characters

The second character identifies who controls the definition

You will often hear that “0 means generic and 1 means manufacturer-specific.” That shortcut works for many familiar codes, but it is not the complete rule. In powertrain families, P0 and P2 ranges are generally SAE-controlled, P1 is manufacturer-controlled, and portions of P3 are divided between standardized and manufacturer-controlled use. Allocation also differs across B, C, and U families.

The practical rule is simple: use an up-to-date code database and vehicle-specific service information. Do not label every code containing a 2 or 3 as generic or proprietary from the digit alone. Standardized codes should have consistent meanings across makes; manufacturer-controlled codes require the correct make, model, year, engine, and sometimes module variant.

The third character narrows the subsystem

For common generic powertrain codes, the third character points toward an area such as fuel and air metering, ignition or misfire, auxiliary emissions, speed and idle control, computer output circuits, or transmission. For example, the “3” in P0300 places the code in the ignition/misfire group.

Do not apply the powertrain subsystem chart blindly to body, chassis, network, or manufacturer-specific codes. Their exact definitions must come from the relevant standard or OEM documentation.

The last two characters identify the fault

The final pair distinguishes the specific monitored condition within that family. P0300 and P0301 are both misfire codes, but P0301 points to cylinder 1 while P0300 reports random or multiple-cylinder activity. Even then, the code describes what the controller observed—not necessarily the root cause.

Pending, Confirmed, and Permanent Codes

A scan report may show the same DTC with different status labels:

  • Pending: the monitor has detected a fault, but the conditions required to mature it into a confirmed code may not yet be met.
  • Confirmed or stored: the fault has met the module’s criteria for storage. An emissions-related confirmed code may command the malfunction indicator lamp, depending on the fault and drive-cycle rules.
  • Permanent: an emissions-related record designed to remain after an ordinary code-clear command. It disappears only after the vehicle’s monitor verifies that the fault is no longer present under the required operating conditions.

Clearing codes before recording them also erases useful context and may reset emissions readiness monitors. Capture the complete report first.

A Reliable Workflow After Reading a Code

  1. Run a complete vehicle scan. Scan every available module, not only the engine controller. Several U codes across modules can reveal one shared network or voltage problem.
  2. Record status and freeze-frame data. Note mileage, battery voltage, engine speed, temperature, load, and other captured conditions. Compare the snapshot with current values using our guide to reading OBD2 live data.
  3. Check technical information. Confirm the exact definition for the VIN and search applicable service bulletins, wiring diagrams, connector views, and test procedures.
  4. Prioritize root-cause codes. Low-voltage and network faults can create secondary body, chassis, and powertrain codes. Address the common cause before chasing every symptom.
  5. Inspect before testing. Look for damaged wiring, loose grounds, blown fuses, corrosion, disconnected hoses, and recent repair work.
  6. Test the circuit or system. Follow the service procedure and verify power, ground, signal integrity, mechanical condition, or network resistance as appropriate.
  7. Clear and confirm only after repair. Repeat the scan and complete the required drive cycle. A returning code means the monitored condition is still present or the test has not been completed correctly.

Why a Basic Scanner May Not Show Everything

A generic OBD2 reader may display emissions-related P codes yet miss enhanced P codes and many B, C, or U codes. Accessing ABS, airbag, body, steering, and manufacturer-specific modules often requires a capable multi-system tool or OEM-level software. Tool coverage is therefore part of the diagnosis, not just a convenience.

If the scanner cannot communicate with a module at all, do not assume the module has failed. Check power, ground, fuse protection, interface selection, cable condition, ignition state, and the vehicle network. Our no-communication troubleshooting guide walks through those checks in order.

Safety Notes for B and C Codes

Airbag, braking, steering, and stability-control systems are safety-critical. Do not probe restraint connectors with an ordinary test light or resistance meter unless the OEM procedure explicitly instructs it. Follow battery-disconnection and capacitor-discharge waiting times, use the specified breakout leads, and keep the work area clear of airbag deployment paths. For ABS or steering faults, confirm the repair in a controlled environment before returning the vehicle to normal road use.

The Bottom Line

P, B, C, and U tell you where a trouble code belongs: powertrain, body, chassis, or network. The remaining characters narrow the definition, but the code is only the beginning. The best diagnosis combines a full-system scan, code status, freeze-frame and live data, wiring information, physical inspection, and a model-specific test plan. Read the code as evidence, verify the cause, and replace a part only after the tests support that decision.