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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Voltage high or low means an electrical fault — check the wiring, connectors, and the sensor circuit before anything else.
A mechanical system not responding points at the physical component — a stuck valve, a seized actuator, a failed part.
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.
A one-time occurrence — could be a genuine momentary condition. Note it and monitor.
A code that keeps activating and clearing screams intermittent — almost always a wiring or connector fault, not a dead part.
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.
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.
The coolant temp sensor is reading electrically out of range. Suspect wiring or a failed sensor — an electrical fault, not an actually overheating engine.
Fuel pressure is lower than it should be — think a weak pump, a clogged filter, or a suction-side restriction.
Narrows immediately to a wiring issue, a failed sensor, or a genuinely low tank — not a DEF quality or dosing problem.
Dangerously low oil pressure — potentially a shutdown-now condition. The FMI marks this as one of the most severe.
Frequently Asked Questions
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.
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.
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.
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.
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.
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.







