When a modern truck throws a fault, your software shows an SPN and an FMI. To anyone new they look like random numbers, but together with the reporting module they pinpoint the problem. Here is how to read a J1939 fault code properly.
SPN — which parameter failed
The Suspect Parameter Number (SPN) identifies the component, system or parameter the fault relates to. It answers the question “what?” There are thousands of defined SPNs, which is why the number alone tells you very little until you look it up. A few you will meet constantly on aftertreatment-equipped trucks: SPN 102 is intake manifold (boost) pressure, SPN 3251 is DPF differential pressure, and SPN 3226 is SCR outlet NOx.

FMI — how it failed
The Failure Mode Identifier (FMI) describes the nature of the failure. It answers the question “how?” The FMI is a 5-bit field spanning 0–31: values 0–21 are defined failure modes, 22–30 are reserved, and 31 means “Condition Exists / Not Available.” So you are matching thousands of SPNs against roughly two dozen failure modes.
One common misconception worth clearing up: there is no FMI that means “no communication.” A module that stops broadcasting shows up as FMI 9, Abnormal Update Rate, or as a dedicated network SPN reported by another controller — not as a lost-comms failure mode of its own.
FMI numbers you will actually see
| 0 / 1 | Data valid but above / below normal operating range — most severe |
| 2 | Data erratic, intermittent or incorrect |
| 3 | Voltage above normal or shorted to high source |
| 4 | Voltage below normal or shorted to low source |
| 5 | Current below normal or open circuit |
| 6 | Current above normal or grounded circuit |
| 7 | Mechanical system not responding properly |
| 9 | Abnormal update rate |
| 13 | Out of calibration |
| 19 | Received network data in error |
| 31 | Condition exists / not available |
Check the source address first
SPN plus FMI is the core of the code, but it is not the whole picture. Every J1939 fault is broadcast by a module, and that source address qualifies everything else. The identical SPN and FMI reported by the engine ECM, the ABS controller, the transmission controller or the aftertreatment controller is a different problem with a different harness and a different repair. Read the module first, then the SPN, then the FMI. Techs who skip that step end up testing circuits on the wrong controller.
The two fields most people ignore
A complete J1939 DTC actually carries four fields: SPN, FMI, Occurrence Count (OC) and SPN Conversion Method (CM). Occurrence count is the useful one day to day — a high count points to a persistent fault, while a single occurrence may be a one-off event worth monitoring rather than chasing.
The conversion method is the field nobody talks about. It tells the tool how the SPN bits should be decoded, and it is the reason two pieces of software can occasionally display different SPN numbers from the same truck. If a code looks nonsensical or does not exist in any lookup, a conversion method mismatch is a fair suspicion before you assume the ECM is faulty.
DM1 and DM2 — active or history
The active/inactive toggle in your software is not cosmetic. DM1 is the message carrying currently active DTCs; DM2 carries previously active (stored) DTCs. Knowing which list you are looking at decides whether you are chasing a live fault or reading history. Our guide on reading and clearing fault codes on heavy-duty trucks covers the workflow around this.
Lamp status tells you if the truck can move
DM1 also carries lamp status, which is the fastest answer to the dispatcher asking whether the truck is drivable:
- Red Stop Lamp — stop the vehicle now.
- Amber Warning Lamp — less critical; the vehicle can generally keep working.
- Malfunction Indicator Lamp (MIL) — an emissions-related fault.
- Protect Lamp — a non-electrical condition such as an over-temperature.
Reading a pair in practice
Take SPN 3251 (DPF differential pressure) with FMI 3, voltage above normal or shorted to a high source. That combination points at the circuit: a short to a voltage source, a failed sensor, or a connector problem. It is a wiring investigation. The same SPN 3251 with FMI 0 or FMI 2 is a different job entirely — the signal is arriving and the ECM believes it, so you are looking at a genuinely restricted filter or a system condition, not a harness. That is the value of reading the pair together instead of looking up a single number.
Older trucks: MID, PID, SID and FMI
Trucks built before roughly 2007 generally use J1708/J1587 rather than J1939, and the code structure differs: a MID identifies the module, a PID or SID identifies the parameter or subsystem, and the FMI carries the same failure-mode concept. Any shop with a mixed fleet reads both formats. If you work across both generations, our breakdown of J1939, J1708 and J1587 protocols explains where the line falls.
Let the software do the translation
Professional tools translate SPN/FMI into plain descriptions, show the reporting module, and often add guided diagnostics. All-makes platforms such as JPRO, Noregon’s commercial vehicle diagnostic software, cover mixed fleets across manufacturers. OEM tools such as Cummins INSITE go deeper on the engine they are built for. Most shops end up running one of each.
Diagnose the system, not the code
The SPN tells you which parameter the ECM is unhappy about — not which component has failed. Confirm with live data and a bidirectional test before replacing anything. The number is a signpost, not a verdict.
Frequently asked questions
How many FMIs are there?
The FMI field covers 0–31. Values 0–21 are defined failure modes, 22–30 are reserved, and 31 indicates a condition exists or is not available.
Does the same SPN mean the same thing on every module?
No. The source address matters. The same SPN and FMI from the engine ECM and from the ABS or aftertreatment controller describe different faults and lead to different repairs.
What is the difference between an active and a stored J1939 code?
Active codes are broadcast in DM1; previously active (stored) codes are held in DM2. Your software presents these as the active and inactive lists.
At DiagTechPro we supply professional diesel diagnostic software with a remote install and setup service over TeamViewer. Browse our full range of diagnostic tools to find the right fit for your shop.

