Complete Guide
DTC Codes: What a Fault Code Is and How to Read It
Understand fault codes: OBD-II format (P0217), J1939 format (SPN + FMI), active vs stored codes, dashboard lamps and the right reaction.
8 min read
What is a DTC?
DTC stands for Diagnostic Trouble Code. It is the message a vehicle control unit records when a value it monitors falls outside expected limits.
One point is worth making up front: a fault code is not a diagnosis. It tells you which parameter deviated and in what way. It does not tell you which part to replace.
An oxygen sensor code can come from the sensor itself, from the harness, from an air leak upstream or from an injection problem. Four causes, one code. Sorting that out is the technician's job.
For a fleet manager, the value of a code is therefore not remote diagnosis. It is knowing that a vehicle reported something today, rather than finding out at the next shop visit.
The OBD-II format: reading a P0217 code
An OBD-II code has five characters. Each one carries information.
First letter: the system involved
P: powertrain (engine, transmission)
B: body (cabin, airbags, comfort)
C: chassis (braking, steering, suspension)
U: network and communication between control units
Second character: the code's origin
0: generic code defined by the SAE standard, identical across manufacturers
1: manufacturer-specific code
Third character: the subsystem
Air intake, ignition system, fuel circuit, auxiliary controls, and so on.
Fourth and fifth characters: the specific fault
Example: P0217 reads as "powertrain, generic code, engine overheat".
The practical implication: a P0 code is easy to document, a P1 code requires the manufacturer's documentation.
The J1939 format: SPN and FMI
On a heavy vehicle, codes look nothing like OBD-II codes. They are made of two numbers.
SPN: the parameter involved
For example SPN 110 for coolant temperature, SPN 190 for engine speed, SPN 100 for engine oil pressure.
FMI: the failure mode
Value above normal range, value below, erratic data, short to ground, short to battery, open circuit, inconsistent value, no communication.
An occurrence count comes with it, showing how many times the fault has appeared. A code seen once in three months and a code seen forty times this week call for different reactions.
Active codes are broadcast in the DM1 message, previously active codes in DM2.
The SPN + FMI format is in fact more informative than the five-character OBD-II code: it explicitly separates what deviated from how it deviated.
Active codes, stored codes and lamps
An active code flags a fault present right now. A stored code flags a fault that appeared and then cleared, kept in the control unit's memory.
A stored code is not an unimportant code. An intermittent fault returning every couple of weeks generally becomes permanent eventually, and usually at the worst moment.
On the dashboard side, the J1939 DM1 message also carries the state of four lamps:
• Malfunction indicator lamp (MIL): emissions-related fault
• Amber warning lamp: have it checked, no immediate urgency
• Red stop lamp: stop required, the vehicle should not continue
• Protect lamp: a vehicle parameter is outside its safe range
That hierarchy is useful in operations: it separates what waits for the next planned service from what forces an immediate stop.
What Tralogit does with fault codes
Codes reported by the vehicle are tied to that vehicle, timestamped and kept in its history.
Three concrete uses:
Alert at the moment it appears
The manager hears about the code when it appears, not at the next return to the depot.
Context rather than an isolated code
A code arrives attached to the vehicle, the assigned driver, the trip in progress and the maintenance history. The same code on a new vehicle and on one with 900,000 km does not tell the same story.
Searchable history
Recurrence of a code over several months becomes visible, and that is exactly the information a one-off scan-tool reading misses.
A limit we would rather write down than let you assume: Tralogit reports and contextualises codes. Diagnosis and repair remain the work of a qualified technician, on the vehicle.
FAQ
Should a vehicle stop as soon as a code appears?
It depends on the code and the associated lamp. A red stop lamp requires stopping. An amber lamp calls for a check without immediate urgency. When in doubt, the call belongs to the technician, not the platform.
Can a fault code be cleared?
Technically yes, with a diagnostic tool. But clearing a code without addressing the cause only removes the information: if the fault persists, the code comes back.
Why do two vehicles show different codes for the same problem?
Because manufacturer codes (P1 in OBD-II) and monitoring strategies vary between makes. Two control units can detect the same physical anomaly along different paths.