OBD-II protocol

UDS Mode 22: what manufacturers hide beyond the OBD-II standard

What UDS (Unified Diagnostic Services) ISO 14229 is, difference vs OBD-II, how Mode 22 reads DPF soot mass, VGT position, TPMS voltage — and why 90% of the "interesting stuff" lives here.

AI-generated 4 min read

Standard OBD-II (SAE J1979) is Mode 01 live parameters, Mode 03 DTCs, Mode 09 VIN, a few others. Total ~200 standard PIDs, many of which show nothing specific to your car. All the stuff you actually care about — AdBlue pressure, VGT position, TPMS sensor battery — lives beyond OBD-II, in UDS (Unified Diagnostic Services), ISO 14229 standard. Below: brief architecture and why 90% of the “interesting” stuff is here.

What UDS is

UDS = Unified Diagnostic Services (ISO 14229). Designed as a single diagnostic protocol for every EU/US manufacturer after 2007. Used inside the car between service tool and ECU (over CAN, LIN, Ethernet).

UDS has its own set of “services” (analog of modes in OBD-II):

  • $10 — DiagnosticSessionControl (switch to service session)
  • $22ReadDataByIdentifier (read any parameter by 16-bit ID)
  • $27 — SecurityAccess (unlock protected functions)
  • $2E — WriteDataByIdentifier (write)
  • $31 — RoutineControl (run diagnostic routines)
  • $34-$37 — Upload / Download (ECU reflash)

Key for reading data — $22 (ReadDataByIdentifier).

OBD-II Mode 22 — bridge to UDS

OBD-II is limited: Mode 01 covers only 200+ standard PIDs (1-byte identifiers). To access 65 535 manufacturer IDs — you use OBD-II Mode 22, which is effectively a proxy to UDS $22.

Request:

22 F1 90    ← "read ID 0xF190"

Response:

62 F1 90 W V W Z Z Z 1 K Z 9 W 1 2 3 4 5 6    ← VIN

Why 90% of the “interesting” lives in Mode 22

Example 1. DPF (diesel)

Standard OBD-II only shows P2002 “Filter efficiency below threshold”. Mode 22 (for VW):

  • ID 0x22A6 — Soot mass calculated (28.3 g)
  • ID 0x22A7 — Soot mass measured (31.5 g)
  • ID 0x22A8 — Regeneration count (145)
  • ID 0x22B5 — DPF differential pressure (24 mbar)
  • ID 0x22F4 — Time since last regen (34 hours)

That’s what standard OBD-II won’t see.

Example 2. Turbo (VGT position)

Standard: MAP and boost. Mode 22 (for BMW N57):

  • ID 0x4A31 — VGT position (%)
  • ID 0x4A32 — VGT target position (%)
  • ID 0x4A50 — Waste gate duty cycle
  • ID 0x4B00 — Turbocharger inlet temperature

All the parameters needed for turbo diagnostics.

Example 3. TPMS (per wheel)

Standard: only C075X codes. Mode 22 (for Mercedes):

  • ID 0xF201 — TPMS LF pressure
  • ID 0xF202 — TPMS LF temperature
  • ID 0xF203 — TPMS LF battery voltage
  • ID 0xF204 — TPMS LF sensor ID (8 hex)

Full TPMS monitoring.

UDS pitfalls

1. IDs NOT standardised

Same parameter (say, oil temperature) has different IDs per manufacturer:

  • VW: 0x2200
  • BMW: 0x445F
  • Ford: 0xE010
  • Toyota: 0x1146

So a generic ELM327 without a PID database doesn’t know what to read.

2. Deep-level DIDs need SecurityAccess

E.g. WriteDataByIdentifier (write) or running routines (DPF regen, adaptation reset) — require seed-key challenge. That’s already protocol reverse engineering.

3. Deep-level data — only in extended session

Must first 10 03 (extended session), then 27 XX (SecurityAccess), then 22 XX XX (read). Timing is strict.

What Car Diagnostics does

We assembled a PID database for ~15 manufacturers (VW Group, BMW, Mercedes, Toyota, Ford, GM, Renault, PSA, Hyundai/Kia, Volvo Trucks, Scania, Isuzu, Iveco, Chinese brands: Chery, Geely, Great Wall). For each:

  • ID → human-readable decode
  • Units
  • Norms
  • Manufacturer formulas (not just linear scaling)

That’s what the paid tier delivers — ~200 PIDs per marker beyond standard OBD-II.

Practical example

You want to know if a 2018 Toyota Camry has a rolled-back odometer:

  • Standard OBD-II: only VIN and DTCs
  • Mode 22 (Toyota):
    • 0x1146 — Engine hours (say 3450)
    • 0x1147 — Ignition cycles (7890)
    • 0x1148 — Distance since new (ECU internal, often doesn’t match the cluster!)

Difference between Distance since new in ECU (150 000 mi) and odometer (53 000 mi) → 100% rollback. See odometer fraud post.

For DIY readers

If you want to dig in yourself:

  • BMW/MINI: DME/DDE ISTA documentation (leaked, googlable)
  • VAG: ODIS-Service labelfiles
  • Ford: Ford IDS/FDRS calibration files
  • GM: GDS2 tester data
  • Mercedes: XENTRY / DAS databases

Car Diagnostics does this “for you” — just read parameters with human names instead of hex IDs.

Try it on the free tierpair an ELM327 adapter. Manufacturer Mode 22 PIDs — on paid tier with your make supported.