Back to Guides

SPN and FMI Codes Explained: How to Read Any J1939 Fault Code

PrimoDeTech Editorial8/25/2026 767 viewsProtocols & Standards

A driver hands me his phone with a photo of his dash: SPN 3216 FMI 4. "What's that mean, and how bad is it?" Fair question. Heavy trucks don't talk in the P0301-style codes your pickup uses. They talk in SPN and FMI pairs, and once you can read them, you can decode any fault on any truck that speaks J1939 — essentially every modern diesel.

The SPN FMI code meaning breaks into two halves: SPN tells you what is complaining, FMI tells you how it failed. Here's the full decoder, including the complete FMI table worth bookmarking for the truck stop at 2 a.m.

That String of Numbers on Your Dash

When a fault sets on a J1939 truck, the display or scan tool shows something like:

SPN 3216 FMI 4 — OC 3 — Active

Four pieces of information, every time:

  • SPN (Suspect Parameter Number) — the part, circuit, or system that's suspect. Here, 3216 is the aftertreatment intake NOx sensor's reading.
  • FMI (Failure Mode Identifier) — the way it failed. FMI 4 means "voltage below normal, or shorted to low source." So the NOx sensor circuit reads low voltage — think wiring, connector, or dead sensor, not necessarily an emissions problem at all.
  • OC (Occurrence Count) — how many times the fault has set.
  • Active / Previously Active — happening right now, or happened in the past.

That's the whole language. SPN = what. FMI = how. OC = how often. Status = now or before. Got a code in front of you and just want the answer? Punch the SPN and FMI into our free DTC lookup tool for the plain-English meaning. The rest of this guide teaches you to read them yourself.

SPN: The "What" — A Number for Every Part on the Truck

SPN stands for Suspect Parameter Number, and "suspect" is deliberate: the code points at the parameter that looks wrong — the prime suspect, not always the guilty party.

SPNs are assigned by SAE (the Society of Automotive Engineers) in the J1939 standard, and the assignments are universal. SPN 100 is engine oil pressure regardless of the badge on the hood. SPN 110 is coolant temperature. SPN 639 is the J1939 data link itself. Same number, same meaning, every make — one shared dictionary for engine, transmission, brakes, and aftertreatment. (For the deeper story of how that network works, read our complete J1939 protocol guide.)

There are tens of thousands of assigned SPNs, so nobody memorizes the list — you learn the fifty you see weekly and look up the rest.

One caution: the SPN names the suspect parameter, not the repair. SPN 3216 doesn't mean "buy a NOx sensor" — a chafed harness can set the same SPN as a failed sensor. The FMI is what starts separating those possibilities.

FMI: The "How" — The Complete 0–31 Table

FMI stands for Failure Mode Identifier, a number from 0 to 31 defined in SAE J1939-73. It's the half of the code most people skip, and the half that tells you what kind of problem you have — electrical short, open circuit, out-of-range data, mechanical fault, or network trouble. Here's the full table:

FMIMeaning (per SAE J1939-73)
0Data valid but above normal operational range — most severe level
1Data valid but below normal operational range — most severe level
2Data erratic, intermittent, or incorrect
3Voltage above normal, or shorted to high source
4Voltage below normal, or shorted to low source
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
15Data valid but above normal operating range — least severe level
16Data valid but above normal operating range — moderately severe level
17Data valid but below normal operating range — least severe level
18Data valid but below normal operating range — moderately severe level
19Received network data in error
20Data drifted high
21Data drifted low
22–30Reserved (for SAE assignment)
31Condition exists

A few patterns make the table click:

  • FMIs 3, 4, 5, 6 are electrical. Shorted high, shorted low, open circuit, grounded circuit. Think wiring, connectors, and the sensor itself before you blame the system it measures. Our SPN 3216 FMI 4 example is exactly this: a circuit problem, not proof of an emissions fault.
  • FMIs 0, 1, 15, 16, 17, 18 mean the reading is real but out of range. The sensor is telling the truth; the truth is bad. The numbers also encode severity: FMI 1 on oil pressure means shut it down; FMI 17 on the same SPN means keep an eye on it.
  • FMI 2 is the intermittent headache — data that comes and goes. Often a loose pin that acts up on rough road.
  • FMI 7 is mechanical — a commanded actuator that didn't move where it was told.
  • FMI 9 and 19 are network problems. A message on the data link arrived late, garbled, or not at all — the "broken" module may be a victim of a wiring fault elsewhere on the bus.
  • FMI 31 is the catch-all: the fault condition is simply true, no fancier failure mode applies. Aftertreatment systems lean on this one a lot.

No need to memorize any of it — when a code pops up, the fastest route to a plain-English answer is the free DTC lookup, which covers the SPN and the FMI in one shot.

OC and Active vs. Previously Active

OC (Occurrence Count) is how many times the fault has set. OC 1 might be a fluke — a voltage dip during a cold crank. OC 27 is a pattern, and patterns are diagnosable.

Active means the fault condition is present right now. Previously active (what car people call a stored code) means it happened, then cleared itself. An active code you chase directly. A previously-active code with a high count usually points to an intermittent — vibration, temperature, moisture — diagnosed by wiggle-testing and watching live data, not by parts-swapping.

How This Maps to the P-Codes You Know

Coming from the car world? A P-code like P0117 (coolant temp sensor, low input) bundles the "what" and the "how" into one five-character code. J1939 splits them apart — SPN 110 (coolant temp) + FMI 4 (voltage low) says the same thing with more precision, no new code needed for every combination. The SPN/FMI pair is the native language on the heavy side, and part of why your car scanner comes up empty on a semi — we covered that mess in why a car OBD2 scanner won't read a semi truck.

The Three-Step Playbook When a Code Appears

  1. Write down the whole thing. SPN, FMI, OC, and status — not just one number. A photo of the dash is fine.
  2. Look up the meaning. Enter the SPN and FMI into the DTC lookup tool. An electrical FMI (3–6) sends you toward wiring and connectors; a data-range FMI (0/1/15–18) toward the actual system.
  3. Judge active vs. intermittent. Active + climbing OC = diagnose now. Previously active + low OC = watch it. Previously active + high OC = intermittent; plan on live data and a wiggle test rather than a parts cannon.

When a Code Isn't Enough: Live Data

The honest limit of code-reading: a fault code is a snapshot of a threshold being crossed. It tells you that something went wrong, not what the system is doing right now. Is that low-rail-pressure code a failing pump, or does pressure only sag under load at operating temperature? You answer that by watching the live value — commanded vs. actual, in vs. out — while the truck runs.

That's where a real J1939 code reader with live data earns its keep. If you're at that stage — an owner-operator tired of paying a shop just to read the truck — look at the diagnostic tools we build for heavy trucks. Start free with the code lookup; step up to hardware when the codes stop being enough.

FAQ

What does SPN mean on a fault code? Suspect Parameter Number — an SAE-assigned number identifying the component, circuit, or system the fault concerns. The same SPN means the same thing on any J1939-compliant truck.

What does FMI 4 mean? "Voltage below normal, or shorted to low source." The circuit reads lower voltage than it should — commonly a short to ground, damaged harness, corroded connector, or failed sensor. An electrical fault, not proof the measured system itself is bad.

Are SPN codes the same on every truck brand? The SPN and FMI definitions are — that's the point of the SAE standard. What differs by manufacturer is which faults get detected, the thresholds that set them, and any proprietary codes layered on top.

Can I clear an SPN/FMI code myself? With a J1939-capable tool, generally yes for standard faults. But clearing doesn't fix the cause — an active fault comes straight back, and clearing history throws away the OC and status information. Decode it first with a DTC lookup, fix the cause, then clear.

What's the difference between active and previously active? Active means the fault condition is present right now; previously active means it set and has since gone away. A high occurrence count on a previously-active code usually means an intermittent problem.

Is SPN 3216 FMI 4 safe to drive with? It's an electrical-circuit fault on an aftertreatment NOx sensor reading — not an immediate mechanical threat, but aftertreatment faults left unattended can lead the truck to progressively derate power. Get it looked at soon rather than someday.

spnfmij1939fault-codes

Need Help Choosing?

Our product specialists can recommend the right diagnostic tool for your specific needs.