SPN/FMI vs OBD-II: J1939 Truck Diagnostics Guide

spn-fmi-vs-obd2-j1939-diagnostics

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.

Reading a code

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.

Failure modes

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.

0Data valid but above normal range — most severe
1Data valid but below normal range — most severe
2Data erratic, intermittent or incorrect
3Voltage above normal or shorted high
4Voltage below normal or shorted low
5Current below normal or open circuit
6Current above normal or grounded circuit
7Mechanical system not responding or out of adjustment
8Abnormal frequency, pulse width or period
9Abnormal update rate
10Abnormal rate of change
11Root cause not known
12Bad intelligent device or component
13Out of calibration
14Special instructions
15Above normal range — least severe
16Above normal range — moderately severe
17Below normal range — least severe
18Below normal range — moderately severe
19Received network data in error
20Data drifted high
21Data drifted low
31Condition exists

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.

Lamps and history

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.

DM1Active fault codes, broadcast on the network with lamp status
DM2Previously active codes kept in memory — the truck's fault history
Lamps can be off, on solid or flashing; flashing generally signals the more urgent condition.
Side by side

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-codesJ1939 SPN and FMI
Code formatFive characters, such as P0401SPN plus FMI, such as SPN 157 FMI 18, with an occurrence count and source address
StandardSAE J2012SAE J1939, with diagnostics defined in J1939-73
Connector16-pin OBD-II9-pin Deutsch, specified for diagnostics in the J1939 standard
Typical vehiclesCars, vans, light and medium-duty trucksClass 6 to 8 trucks, buses, construction and agricultural equipment
Modules coveredMainly powertrain and emissionsEngine, transmission, brakes, aftertreatment, body and more, each with its own address
Fault historyFreeze frame and pending, current and previous statusActive codes in DM1, previously active in DM2, with occurrence counts
Lamp informationMalfunction indicator lampFour 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 you lose

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.

Module coverage

Transmission, brake, body and aftertreatment controllers each report separately on J1939. Read only the engine and you miss the rest.

Occurrence counts

Without them you can't tell a one-time event from a fault that has set forty times.

Lamp severity

Four lamps carry different urgency. A single warning light loses that distinction.

Fault history

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.

Use it

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.

Read the lamp first

Red stop means stop; amber means finish the trip and diagnose; the emissions lamp means a derate may be coming.

Let the FMI choose the test

Voltage and circuit codes send you to wiring and connectors; range, drift and mechanical codes send you to the component and what it measures.

Use the count to rank the work

High counts mean a persistent fault worth stopping for; a count of one may be a single event.

Record before clearing

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.

Buying

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.

Protocol, not just the plugJ1939 support, not an adapter on an OBD-II tool
Multi-module accessEngine, transmission, brakes and aftertreatment
Active and previously active codesDM1 and DM2, with occurrence counts
Lamp status reportingAll four lamps, including flash state
Bi-directional testsForced regens, cylinder cutouts, dosing tests
Feeds your maintenance systemCodes should open work orders automatically
Questions

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.

Four numbers, one work order

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.

September 23, 2026 By Derek Goes
All Articles

Share This Story, Choose Your Platform!

Latest Articles

Scroll