SPN and FMI are how heavy trucks report faults. Instead of a five-character P-code, a J1939 system sends a suspect parameter number that names what failed, a failure mode identifier that says how it failed, an occurrence count that says how often, and a source address that says which controller reported it. That structure is why Class 6 to 8 fleets need J1939 diagnostics rather than a generic OBD-II scanner: the standard also carries four separate dashboard lamps in the same message, separates active faults from previously active ones, and reaches every module on the truck — engine, transmission, brakes and aftertreatment — each with its own address. This guide explains how to read an SPN/FMI code, gives you the full failure-mode list, compares both systems, and shows what a fleet loses when heavy trucks are read through the wrong port. Book a demo to see J1939 codes routed into work orders, or create a free account and start logging faults per truck.
Diagnostics reference · J1939 vs OBD-II
One Line on the Scan Tool Holds Four Answers. Most Fleets Only Read Two of Them.
For fleet mechanics, shop leads and maintenance managers: how to read SPN, FMI, occurrence count and source address, and why heavy trucks need J1939 tools rather than a generic code reader.
What SPN, FMI, Occurrence Count and Source Address Each Tell a Technician
A J1939 diagnostic message carries more than the fault itself. Alongside the suspect parameter number and failure mode identifier, the message includes an occurrence count, a conversion method and the status of the dashboard lamps, and the source address identifies the module that sent it. Together they tell you what broke, how, how often and where to plug in. You can keep all four parts with every logged fault on a free account.
The suspect parameter number names the component or signal
SPNs are standardized in the J1939 documentation, so the same number means the same parameter across makes — for example fuel rail pressure or engine coolant level.
The failure mode identifier describes the failure
Voltage high, voltage low, open circuit, mechanical system not responding, data erratic, out of calibration. This is the half that decides where you start testing.
The occurrence count separates intermittent from persistent
It shows how many times the fault has been detected since the memory was last cleared, which is why clearing codes to "start clean" destroys evidence.
The source address points to the module
Each controller on the network has its own address, so the same fault reported by the engine and the brake controller sends you to different places.
Message structure per SAE J1939-73, the diagnostics layer of the J1939 standard, which also specifies the 9-pin connector for diagnostic communication.
The Complete J1939 Failure Mode Identifier List, From FMI 0 to FMI 31
The FMI is the fastest way to narrow a fault, because it separates electrical problems from real measured values. Voltage and circuit codes point at wiring and connectors; range and drift codes point at the thing being measured. We can map your most frequent SPN and FMI pairs in a demo.
Failure mode identifiers as defined in the appendix of SAE J1939-73. Some engine makers add proprietary meanings; always confirm in the maker's service information.
How J1939 Reports Dashboard Lamps and Separates Active From Past Faults
The same diagnostic message that carries the fault also carries lamp status, and the lamps are a severity scale rather than decoration. Active faults are broadcast in the DM1 message; previously active faults are held in DM2, which is how a technician sees history that the dashboard no longer shows. Keep active and previously active codes per truck for free.
Red stop lamp
A critical fault that warrants stopping the vehicle. Pull over safely and arrange help.
Amber warning lamp
A fault that needs attention but doesn't require stopping now.
Malfunction indicator lamp
An emissions-related fault. Not an emergency, but derates often follow.
Protect lamp
A non-electronic subsystem problem the engine is protecting itself from.
OBD-II P-Codes Versus J1939 SPN and FMI Codes, Compared Directly
Both systems report faults, but they were written for different vehicles and they expose different amounts of the truck. This is the comparison to have in front of you before buying scan tools or telematics devices for a mixed fleet. We can review your fleet's mix with you in a demo. Swipe the table on mobile.
| OBD-II P-codes | J1939 SPN and FMI | |
|---|---|---|
| Code format | Five characters, such as P0401 | SPN plus FMI, such as SPN 157 FMI 18, with an occurrence count and source address |
| Standard | SAE J2012 | SAE J1939, with diagnostics defined in J1939-73 |
| Connector | 16-pin OBD-II | 9-pin Deutsch, specified for diagnostics in the J1939 standard |
| Typical vehicles | Cars, vans, light and medium-duty trucks | Class 6 to 8 trucks, buses, construction and agricultural equipment |
| Modules covered | Mainly powertrain and emissions | Engine, transmission, brakes, aftertreatment, body and more, each with its own address |
| Fault history | Freeze frame and pending, current and previous status | Active codes in DM1, previously active in DM2, with occurrence counts |
| Lamp information | Malfunction indicator lamp | Four lamps reported in the message: malfunction, red stop, amber warning and protect |
Sources: SAE J1939-73 diagnostics layer; SAE J2012 P-code format as described by Mitchell 1, which notes P-codes appear mainly on light and medium-duty vehicles and increasingly on some heavier trucks.
What a Fleet Gives Up When Heavy Trucks Are Read Through the Wrong Port
A basic OBD-II scanner generally cannot talk to a J1939 network, and an adapter cable changes the plug rather than the protocol. On a Class 8 truck that means a partial picture at best. Start logging full J1939 faults per truck free.
Transmission, brake, body and aftertreatment controllers each report separately on J1939. Read only the engine and you miss the rest.
Without them you can't tell a one-time event from a fault that has set forty times.
Four lamps carry different urgency. A single warning light loses that distinction.
Previously active codes explain repeat failures that active codes alone never will.
Are your heavy units reporting everything they could?
In 30 minutes we'll look at which faults your trucks currently send into FleetRabbit, and show how SPN and FMI codes open a work order with the module, failure mode and count attached.
How to Turn SPN and FMI Codes Into a Repair Decision in Your Shop
The four parts of a J1939 code map neatly onto a triage rule your whole shop can follow, and they belong on the work order exactly as the tool reports them. See this triage built into work orders in a demo.
Red stop means stop; amber means finish the trip and diagnose; the emissions lamp means a derate may be coming.
Voltage and circuit codes send you to wiring and connectors; range, drift and mechanical codes send you to the component and what it measures.
High counts mean a persistent fault worth stopping for; a count of one may be a single event.
Clearing wipes the count and the previously active list — the two things that identify a repeat. Note it on the unit's DVIR when a driver reports the lamp.
What to Check Before Buying Scan Tools or Telematics for a Mixed Fleet
Mixed fleets get this wrong by ordering one device for everything. Specify per vehicle class instead, and confirm each of these before the order goes out. Tie the result into your preventive maintenance program so codes reach the schedule, not just the dashboard. Connect your first units free.
SPN, FMI and J1939 Questions Fleet Mechanics Ask Most Often
What does SPN and FMI mean on a truck fault code?
SPN is the suspect parameter number, which names the component or signal that failed. FMI is the failure mode identifier, which describes how it failed — voltage high, open circuit, out of range, mechanical system not responding and so on. See your own SPN and FMI history.
Can an OBD-II scanner read J1939 codes?
Generally no. J1939 uses a different protocol and normally a 9-pin connector, and standard OBD-II scanners can't communicate with it. An adapter cable changes the plug, not the protocol. Log J1939 faults per truck free.
What is the difference between DM1 and DM2?
DM1 carries active fault codes and lamp status, broadcast on the network. DM2 holds previously active codes retained in module memory, which is where repeat-failure evidence lives. Review fault history with us.
What does the occurrence count tell me?
How many times that fault has been detected since the memory was last cleared — the quickest way to tell an intermittent fault from a persistent one. Keep counts on every logged fault free.
Which trucks use J1939 instead of OBD-II?
Class 6 to 8 trucks, buses and much off-road equipment report in J1939. Light and medium-duty vehicles use OBD-II P-codes, and some medium-duty trucks report both. Check your fleet's mix with us.
Do I need different telematics devices for light and heavy vehicles?
Usually yes. Specify by vehicle class: OBD-II devices for light-duty units, J1939-capable devices for Class 6 to 8. Ordering one device for a mixed fleet leaves some vehicles reporting less than they could. Connect your providers free.
Turn Every SPN and FMI Into a Repair Your Shop Can Act On
FleetRabbit takes J1939 faults from your telematics and opens a work order with the module, failure mode, occurrence count and lamp status attached — so the technician starts with the whole code, not a photo of the dashboard.