A heavy-duty truck doesn't speak the same diagnostic language as the pickup in your driveway. Plug a $30 OBD-II reader into a Class 8 tractor and you'll get nothing — commercial diesels run on J1939, a completely different protocol, and its fault codes look intimidating at first: "SPN 110 FMI 3, OC 4." But that string isn't random. It's a precise, decodable sentence, and once you know how to read it, a J1939 code tells you exactly what failed, how it failed, and whether it's a one-time fluke or a recurring problem — before you've picked up a wrench. The same decoding logic works on every make, from Cummins to Detroit to PACCAR to Volvo. Decode and track your fleet's codes free. This guide breaks a J1939 code into its parts, gives you the SPN and FMI references that turn numbers into plain English, shows the "follow the FMI" shortcut that points your diagnosis in the right direction, and walks how to pull the codes yourself. Learn the pattern once and you can read any diesel fault code.

Diagnostics · J1939 SPN / FMI

How to Read J1939 SPN and FMI Fault Codes for Diesel Trucks

"SPN 110 FMI 3" isn't gibberish — it's a sentence. Learn to decode J1939 fault codes into plain English: what component failed, how it failed, and how often, so you know the root cause before you open the hood.

All diesel makes SPN + FMI reference Free for 3 assets
Decode · Live DTC
SPN 110Coolant temp
+
FMI 3Voltage high
=
Coolant temp sensor reading electrically out of range — suspect wiring or sensor
OC 4detected 4 times

Why J1939 Isn't Your Car's OBD-II

Before decoding, one hard fact: you cannot read these codes with a standard 16-pin OBD-II scanner. Heavy trucks use a different connector and a different protocol, and the tool has to speak J1939 CAN.

The Connector

A 9-pin Deutsch port (or the newer green Type 2 9-pin), usually on the driver-side dash near the steering column — not the car-style 16-pin.

The Protocol

J1939 runs over CAN and replaced the older PID/SID/FMI system. It's now the standard across Cummins, Detroit, PACCAR, Navistar, and Volvo/Mack.

The Tool

A J1939-capable adapter and software — a Nexiq or Noregon interface, an Autel or Diesel Laptops tool, or a platform that reads the bus directly.

The Anatomy of a J1939 Code

Every J1939 diagnostic trouble code has the same four-part structure. Learn what each part carries and any code becomes readable — no matter which engine threw it.

SPN
Suspect Parameter Number — the WHAT

Identifies the specific component or parameter with the problem: engine speed, oil pressure, coolant temperature, DEF level. Standard SPNs run 1 to about 24,324; proprietary (OEM-specific) SPNs sit in the 516,096–524,287 range.

FMI
Failure Mode Identifier — the HOW

A number describing the nature of the failure: value too high or low, an electrical short, erratic data, no signal, a mechanical fault. This is the field that steers your diagnosis.

OC
Occurrence Count — the HOW OFTEN

How many times the fault has been detected, counting up each time it goes from inactive to active, and holding at a maximum of 126. It survives even after the fault clears — the key to spotting intermittent problems.

CM
Conversion Method — the ENCODING

A single bit telling you how the SPN is encoded. Almost always 0 (the modern "Version 4" method mandated since 1996); under 5% of trucks use an older encoding. You rarely think about it, but it's there.

The whole trick SPN tells you what. FMI tells you how. Put them together and you get a root cause. Look up the SPN, look up the FMI, combine them — that one pattern works for every J1939 fault on every diesel make. Everything else is reference tables. Ask about automatic code decoding.

SPN: The "What" Reference

There are thousands of defined SPNs, but a small set accounts for the majority of shop visits on modern emissions-equipped trucks. These are the ones worth knowing on sight.

SPNComponent / parameter
110Engine coolant temperature
100Engine oil pressure
190Engine speed (RPM)
94Fuel delivery pressure
3226Aftertreatment / DEF (SCR) parameters
4094DEF tank level
3251DPF differential pressure

FMI: The "How" Reference

The FMI is where the real diagnostic value lives — it tells you the nature of the failure. You don't need all of them; memorizing the common ones covers the vast majority of codes you'll ever see.

3Voltage above normal / shorted high
4Voltage below normal / shorted low
0Data valid but above normal (most severe)
1Data valid but below normal (most severe)
15–18Above / below normal (least to moderate)
7Mechanical system not responding properly
2Data erratic, intermittent, or incorrect
5Current below normal / open circuit
12Bad intelligent device or component
14Special instructions
19Received network data in error
31Condition exists (often proprietary)

Let the FMI Lead the Diagnosis

Here's the shortcut experienced techs use: the FMI number tells you which direction to look first, before you touch anything. It turns a code into a plan.

FMI 3 & 4
Go electrical

Voltage high or low means an electrical fault — check the wiring, connectors, and the sensor circuit before anything else.

FMI 7
Go mechanical

A mechanical system not responding points at the physical component — a stuck valve, a seized actuator, a failed part.

FMI 2
Go connectors

Erratic or intermittent data usually means a loose or corroded connector — chase the flaky connection, not the sensor.

Occurrence Count Tells the Story

The OC is the field most people ignore and shouldn't. It's the difference between a fluke and a chronic problem, and it often points straight at the culprit.

OC 1 Active, single event

A one-time occurrence — could be a genuine momentary condition. Note it and monitor.

OC 200+ Inactive, high count

A code that keeps activating and clearing screams intermittent — almost always a wiring or connector fault, not a dead part.

Always record the full SPN/FMI pair, the occurrence count, and whether the code is active or inactive. An inactive code with 200+ occurrences tells a very different story than a single active event.

Stop Looking Up Codes One at a Time

Reading J1939 by hand works, but it doesn't scale across a fleet. Truck Inspection & Maintenance decodes SPN/FMI automatically into plain-English descriptions, logs the occurrence count and active/inactive state, and trends codes per vehicle — so an intermittent fault with a climbing OC surfaces as a pattern across the fleet instead of a mystery a tech re-diagnoses every time the truck comes in.

How to Pull the Codes Yourself

Reading active codes off the bus is straightforward with the right tool. The scanner listens for DM1 messages — the broadcast every ECU sends with its active faults.

1
Connect to the 9-pinLocate the 9-pin Deutsch connector, usually on the driver side of the dash, and plug in your J1939 adapter.

2
Key on, engine offTurn the ignition on without starting. This powers up every ECU and brings the J1939 network live.

3
Read DM1 broadcastsYour scanner listens for PGN 65226 (DM1). Each module with an active fault reports its SPN/FMI.

4
Record everythingLog every active code with its SPN, FMI, and OC — and check DM2 for historical, previously-active faults.
DM1 vs DM2 DM1 carries the active codes — what's wrong right now. DM2 holds the historical ones that were active but have since cleared. Reading both tells you not just the current fault but the pattern of past problems that may point to an intermittent root cause. Start free and log active & historical codes.

Worked Examples

Put the pattern to work. Each of these is just an SPN looked up, an FMI looked up, and the two combined into a root cause — the exact method that works on any code.

SPN 110 · FMI 3
Coolant temperature + voltage too high

The coolant temp sensor is reading electrically out of range. Suspect wiring or a failed sensor — an electrical fault, not an actually overheating engine.

SPN 94 · FMI 1
Fuel delivery pressure + below normal

Fuel pressure is lower than it should be — think a weak pump, a clogged filter, or a suction-side restriction.

SPN 3226 · FMI 1
DEF / SCR parameter + below normal

Narrows immediately to a wiring issue, a failed sensor, or a genuinely low tank — not a DEF quality or dosing problem.

SPN 100 · FMI 1
Engine oil pressure + below normal

Dangerously low oil pressure — potentially a shutdown-now condition. The FMI marks this as one of the most severe.

Frequently Asked Questions

What's the difference between SPN and FMI?+

They're the two halves of every J1939 fault code, and they answer different questions. The SPN — Suspect Parameter Number — is the "what": it identifies the specific component or parameter with a problem, like coolant temperature, oil pressure, or DEF tank level. The FMI — Failure Mode Identifier — is the "how": it describes the nature of the failure, such as a voltage too high, a value below normal, erratic data, or a mechanical part not responding. On their own each is incomplete, but together they pinpoint the root cause. SPN 110 FMI 3, for instance, is coolant temperature (SPN 110) reading voltage-high (FMI 3), which points at a wiring or sensor fault rather than an actual overheat. Look up each, combine them, and you have your diagnosis. Start a free trial to decode automatically.

Can I read J1939 codes with a regular OBD-II scanner?+

No. A typical 16-pin OBD-II scanner made for cars and light pickups cannot read heavy-truck J1939 codes. Commercial diesels use a 9-pin Deutsch connector (or the newer green Type 2 9-pin) and communicate over the J1939 CAN protocol, which a consumer scanner doesn't speak. You need a J1939-capable interface — common professional choices include Nexiq and Noregon adapters paired with software like Cummins INSITE or Detroit Diesel DiagnosticLink, or multi-brand tools such as Autel or Diesel Laptops units. The upside is that once you have a J1939-capable tool, the same SPN/FMI decoding method works across every major engine make, so you're not learning a new system for each brand. Ask about reading codes without a scan tool.

What does the occurrence count actually tell me?+

The occurrence count (OC) records how many times a fault has been detected, incrementing each time it goes from inactive to active and holding at a maximum of 126. Critically, it persists even after the fault clears, which makes it one of the most useful fields for diagnosis. A code that's currently active with an occurrence count of 1 is a single event you might just monitor. But an inactive code with a high occurrence count — say 200 detections logged over time (the counter caps, but the history tells the story) — points strongly at an intermittent problem, which is almost always a wiring or connector issue rather than a failed component. That's why you should always record the full SPN/FMI pair together with the OC and whether the code is active or inactive; the same SPN/FMI can mean very different things depending on that context. Start free and trend occurrence counts.

What are DM1 and DM2 messages?+

They're the J1939 messages that carry fault codes. DM1 (Diagnostic Message 1, broadcast on PGN 65226) contains the currently active diagnostic trouble codes — every ECU on the network broadcasts its active SPN/FMI faults, and your scanner listens for these to show what's wrong right now. DM2 contains previously active codes: faults that were once active but have since been resolved or are no longer detected, giving you the vehicle's diagnostic history. Reading both matters because the active codes tell you the immediate problem while the historical codes can reveal a pattern — a fault that keeps appearing and clearing points to an intermittent root cause you'd miss looking at active codes alone. There's also DM4 for freeze-frame data captured when a fault occurred. Start free and capture both automatically.

Do J1939 codes work the same across engine makes?+

Largely yes, which is the great advantage of the standard. J1939 replaced the older PID/SID/FMI format and is now the common diagnostic language across Cummins, Detroit, PACCAR, Navistar, and Volvo/Mack, so the SPN/FMI decoding method is identical no matter which engine threw the code. The standard SPNs (roughly 1 to 24,324) and the FMI definitions are defined by SAE and mean the same thing everywhere. The one caveat is proprietary codes: manufacturers can define their own SPNs in the 516,096–524,287 range and use FMI 31 to signal a non-standard failure mode, and those require the OEM's reference material to interpret fully. But the vast majority of codes you'll encounter are standard, so learning the pattern once lets you read faults on virtually any diesel truck. Start free and decode any make.

Decode · Diagnose · Track

Turn Every Code Into a Root Cause

Once you can read SPN and FMI, no J1939 fault is a mystery — you know what failed, how, and how often before you lift the hood. Truck Inspection & Maintenance does the decoding automatically across your whole fleet, logging every SPN/FMI with its occurrence count and trending the patterns that point to intermittent faults. Learn the code, then let the platform read them all.

No credit card required. Free for up to 3 assets. Decodes SPN/FMI across all diesel makes.