J1939 Fault Codes: SPN & FMI Explained for Trucks

By Riley Quinn on August 25, 2026

j1939-fault-codes-spn-fmi-explained

A driver hands the technician a phone photo of the dashboard — two amber lamps, one red. The scan tool comes back with seven active codes and eleven inactive. The wrong first move — clearing them to "start clean" — erases every clue the ECM just handed you. J1939 fault codes are not noise to be silenced. Each one names a specific component, a specific failure mode, and a history counter, if you know how to read it — book a demo to see J1939 codes routed into work orders.

Anatomy of one code · four numbers, one diagnosis

Every J1939 Code Is Four Numbers in Disguise

A single line on the scan tool holds everything you need to know: what failed, how it failed, how many times it's failed, and which controller reported it. Learn to read the four numbers and any code on any Class 8 truck starts making sense.

DIAGNOSTIC LINK · ACTIVE CODES (DM1)
0 · 3361 · 5 · 7
Aftertreatment 1 SCR Catalyst DEF Dosing Unit — Current Below Normal or Open Circuit
SA

Source Address

Which controller reported it. 0 = Engine ECM. 3 = Transmission. 11 = Brake controller. 33 = Body controller. Tells you which module to plug into first.

SPN

Suspect Parameter Number

What failed. Over 10,000 defined SPNs in J1939. SPN 3361 = the specific DEF dosing unit. SPN 110 = coolant temp. SPN 190 = engine speed.

FMI

Failure Mode Identifier

How it failed. 32 codes, 0–31. FMI 5 = current below normal or open circuit. FMI 3 = voltage high. FMI 0 = data valid but dangerously above normal.

OC

Occurrence Count

How often. Increments each time the code goes from inactive to active. Caps at 126. OC of 7 says this has happened seven times — not a one-off, worth serious attention.

Read the DTC above out loud: "Engine ECM is telling me the SCR DEF dosing unit has an open circuit, and this is the seventh time it's happened." That sentence — not the raw numbers — is what makes the code actionable.

The rest of this page is the working reference — FMI cheat sheet, the SPNs you'll see most on modern emissions-equipped trucks, warning-lamp hierarchy, and how to prioritize when the scan tool hands back seven codes at once. Book a 30-minute demo to see how HVI turns active codes into open work orders automatically.

The FMI cheat sheet: 12 codes cover most faults

J1939 defines 32 FMIs, but on modern truck fleets you'll see the same dozen over and over. Memorize these and the "how it failed" half of every DTC becomes instant.

FMI Meaning Typical cause
0Data valid but above normal (most severe)Overtemp, overpressure, overspeed — engine protection may activate
1Data valid but below normal (most severe)Loss of oil pressure, coolant loss, DEF empty
2Data erratic, intermittent, or incorrectWiring chafe, loose connector, sensor drift
3Voltage above normal / shorted to high sourceSignal wire broken, sensor disconnected, short to +12V
4Voltage below normal / shorted to low sourceSignal wire shorted to ground
5Current below normal / open circuitActuator coil open, wire broken, connector unseated
6Current above normal / grounded circuitActuator short to ground, damaged wiring
7Mechanical system not respondingTurbo actuator stuck, valve seized, mechanical bind
12Bad intelligent device or componentInternal failure of a smart sensor or controller
14Special instructionsOEM-defined — check manufacturer service manual
18Data valid but below normal (moderately severe)Warning-level low reading — not yet critical
31Condition existsA system state has been met (often used for aftertreatment status)

Two shortcuts worth internalizing. FMIs 0 and 1 are the emergency band — data is valid, but the reading is critical. These are the FMIs that trigger engine protection and derate strategies. FMIs 3–6 are electrical — wire, connector, coil. Grab a multimeter, not a component. FMI 7 is mechanical — the ECM told the actuator to move and it didn't. That's a physical inspection, not an electrical one.

Warning lamps: what each color actually demands

J1939 DM1 messages carry lamp-status signals alongside the DTCs. The dashboard color you see is not decoration — it maps to a specific severity tier the ECM assigned, and it tells you how much time you have.

Red Stop Lamp (RSL)

Shut it down now. The ECM has detected a fault that will damage the engine or compromise safety if operation continues. Common triggers: oil pressure loss, coolant loss, dangerous overtemp. Pull over safely, log the code, arrange transport.

Amber Warning Lamp (AWL)

Attend to it, don't ignore it. A fault exists but doesn't require immediate shutdown. Complete the current trip, then diagnose. Leaving it unresolved often escalates to a red lamp within a shift or two — the ECM was warning you before it had to shout.

MIL
Malfunction Indicator Lamp (MIL)

Emissions-related fault. Aftertreatment, EGR, NOx sensor, DEF quality. Not necessarily an operational emergency, but ignoring it leads to derate strategies (typically 5 mph, then idle-only) and compliance risk on emissions inspection.

Protect Lamp

Engine protection engaged. The ECM is actively derating power, limiting speed, or shutting fuel to prevent damage from the detected condition. If this lamp comes on with a red RSL, treat it as immediate stop — the ECM is already intervening.

Active vs. inactive: why the "history" codes matter

Every scan tool shows two lists. DM1 (active) holds codes the ECM is broadcasting right now. DM2 (previously active / stored) holds codes that have gone away but weren't cleared. Most technicians read DM1 and ignore DM2. That's a mistake that costs diagnostic time.

DM1

Active codes

Broadcast once per second by every ECU with a current fault. This is what the dashboard lamps are responding to. Priority for immediate diagnosis — if a red-lamp code is here, work stops until it's addressed.

DM2

Previously active / stored

Faults that self-cleared but were logged. Critical for intermittent problems — a wire that chafes only over bumps, a connector that fails only when hot. The Occurrence Count on a DM2 entry tells you how many times the intermittent has happened. Ignoring DM2 loses the pattern.

Practical rule: capture both lists before clearing anything. A photo of DM1 and DM2 with SPN, FMI, and OC for every entry is the diagnostic starting point. Clear codes only after the case file is captured — because once you clear, the OC resets and the history vanishes. Book a demo to see HVI archive scan-tool captures against each unit's inspection history so the intermittent pattern is visible across visits, not just within one session.

Common SPNs across the modern truck: quick-reference

Ten-thousand-plus SPNs exist in the standard, but on 2010+ emissions-equipped trucks a small set dominates real-world shop visits. Learn these families and you'll recognize most of what the scan tool hands you.

Engine core
  • SPN 100 Engine oil pressure
  • SPN 102 Manifold boost pressure
  • SPN 110 Engine coolant temperature
  • SPN 190 Engine speed (RPM)
  • SPN 157 Fuel rail pressure
  • SPN 94 Fuel delivery pressure
Aftertreatment (dominant on modern faults)
  • SPN 3216 SCR catalyst conversion efficiency
  • SPN 3226 Aftertreatment SCR inlet NOx
  • SPN 3361 DEF dosing unit
  • SPN 3363 DEF tank heater
  • SPN 4094 DEF tank level
  • SPN 5246 SCR operator inducement
Transmission & drivetrain
  • SPN 191 Transmission output shaft speed
  • SPN 161 Transmission input shaft speed
  • SPN 520 AMT clutch position
  • SPN 787 Retarder torque
Brakes & ABS
  • SPN 791 Wheel speed sensor, steer left
  • SPN 792 Wheel speed sensor, steer right
  • SPN 793–796 Drive/tag axle wheel speed sensors
  • SPN 1807 ABS module malfunction

Any of these SPNs combined with a specific FMI resolves to a specific diagnosis. SPN 3361 + FMI 5 tells you the DEF dosing unit has an open circuit — check connector, measure coil resistance (typical 10–15 ohms). SPN 110 + FMI 0 tells you coolant is dangerously hot — stop before catastrophic damage. The pattern of "look up SPN, look up FMI, combine into root cause" works for every J1939 code on every engine make. Book a demo to see the top recurring SPN/FMI combinations across your fleet and where the repeat offenders are hiding by unit and by route.

Multiple codes: how to triage instead of guessing

A truck comes in with seven active codes and eleven inactive. Treating them equally wastes hours. The right sequence is severity first, cause chain second, then diagnose from the root.

  1. 1
    Capture everything before touching anything5 min

    Photo or export the full DM1 and DM2 list, including SPN, FMI, OC, and SA for every entry. Screenshot the lamp status. If you clear codes before capturing, you've destroyed the evidence. This step is non-negotiable.

  2. 2
    Sort by severity: FMI 0 and 1 first5 min

    Any FMI 0 or 1 in the active list is engine-protection territory — that's your priority regardless of what else is present. Red Stop Lamp trumps every other code. Amber and MIL codes queue behind.

  3. 3
    Group by system & look for cause chains10 min

    Multiple aftertreatment codes at once often chain back to one root: a failed NOx sensor cascades into SCR efficiency codes, dosing codes, and inducement codes. Fix the sensor, and eight downstream codes go away. Treating each independently is what turns a 90-minute job into a full day.

  4. 4
    Check OC to separate new from repeat5 min

    High OC on an inactive code says the same fault has been showing up repeatedly and self-clearing — an intermittent that's about to become constant. Low OC on an active code says it just started. Both matter, but they need different attention.

  5. 5
    Diagnose the highest-severity root, then re-scanvaries

    Fix the root cause of the top-priority code family. Clear codes. Test-run the truck. Re-scan. If related codes stayed away, you found the root. If they came back, the cause chain isn't fully understood yet — go back to step 3 with better information.

  6. 6
    Document repair against the specific SPN/FMI5 min

    Which code was resolved, by which part, on which asset, by which technician. Skipping this step is why the same truck comes back in six months and nobody remembers what was done. The next tech's diagnosis starts from zero.

The triage sequence takes about 30 minutes of disciplined work before the first tool is picked up — and saves hours of chasing symptoms downstream. The habit that separates fast shops from slow ones is capturing everything before doing anything, and closing the loop by linking the resolved code to the part and technician on the work order. Start a free HVI trial to attach every scan-tool capture to the resolved work order per asset, so the next visit starts with the last diagnosis, not a blank sheet.

The one habit that turns codes into value

Never clear codes before capturing the case file

The single most common mistake in J1939 diagnosis is clearing DM1 and DM2 to "start clean" before recording what was there. The moment you clear, the Occurrence Counter resets, the DM2 history vanishes, and any pattern of intermittent faults you were about to see is gone. A high OC on an inactive code is often the single most valuable clue in the diagnosis — it says the fault has happened repeatedly and cleared itself repeatedly, which points squarely at wiring, connectors, or a marginal sensor rather than a hard failure. Cleared codes cannot come back unless the fault re-triggers, and by then you've spent hours on the wrong branch. Capture first, always. Photo, export, screenshot — whatever your scan tool supports — before the "clear codes" button gets touched. Once the capture exists, clearing is safe and often necessary to see which codes truly are active after a repair.

A shop lead on the code that changed how he trains

The 2019 Cascadia came in with SPN 3216 FMI 1 — SCR conversion efficiency, low. Previous shop had replaced the SCR catalyst. $4,200 in parts. Same code came back inside a week and the truck was back at our door.

We pulled DM2 and found the same SPN with OC 47. Forty-seven previous occurrences. Meaning the code had been coming and going for months on the same sensor before anyone read it. Bad NOx sensor. $340 part, 40 minutes labor, code stayed gone. Now the shop rule is: no aftertreatment replacement gets ordered until DM2 has been reviewed and the OC pattern is documented. Cheapest rule I've ever written.

Ron T.Shop Lead · Regional carrier & independent truck repair, 120 units serviced

Frequently asked questions

What do SPN and FMI mean in J1939 fault codes?

SPN stands for Suspect Parameter Number, and FMI stands for Failure Mode Identifier. Together they form the core of every J1939 diagnostic trouble code. The SPN identifies what component or data parameter has the fault — SPN 110 is engine coolant temperature, SPN 3361 is the aftertreatment DEF dosing unit, SPN 791 is the left steer wheel speed sensor. The SAE J1939 standard defines over 10,000 SPNs covering essentially every sensor, actuator, and data value on a modern commercial vehicle. The FMI describes how that parameter failed. There are 32 defined FMIs (0 through 31), covering everything from voltage anomalies to mechanical non-response to erratic signals. A DTC like "SPN 3361 FMI 5" reads as "the DEF dosing unit has an open circuit" — the SPN names the component and the FMI names the failure mode. Reading SPN and FMI together, rather than looking up either alone, is what turns a scan-tool line into an actionable diagnosis.

What is the difference between active and inactive J1939 fault codes?

Active codes (broadcast in J1939 DM1 messages) are faults the ECM is detecting right now, once per second. These are what the dashboard warning lamps respond to and what the scan tool shows on its "active" screen. Inactive or previously-active codes (broadcast in DM2 messages) are faults that occurred earlier but have self-cleared — the condition went away but the code was logged. Both matter for diagnosis. Active codes tell you what's wrong at the moment; DM2 codes are the truck's history and often hold the key to intermittent problems. A code that appears in DM2 with a high Occurrence Count has happened many times and cleared itself many times, which usually points to wiring, connector, or sensor drift issues rather than hard component failure. Technicians who read only DM1 and ignore DM2 miss most of the intermittent-fault information the ECM has already collected. Always capture both lists before clearing anything.

Should I clear J1939 fault codes before diagnosing them?

No, and this is the single most common mistake in J1939 diagnosis. The moment you clear codes, the Occurrence Counter resets to zero and the DM2 (previously active) history is erased. Any pattern of intermittent faults the ECM has been quietly collecting for weeks vanishes. What you had — a diagnostic starting point built from real data — becomes a blank slate that only fills back in when the faults happen to trigger again, which may be miles or days later. The correct sequence is always: capture first (photo, screenshot, or scan-tool export of DM1 and DM2 with SPN, FMI, OC, and SA for every entry), diagnose the highest-severity code, complete the repair, then clear codes as verification that the repair resolved the fault. Codes that stay clear after the test drive confirm the repair; codes that come back tell you the cause chain isn't fully understood yet. Clearing before capture destroys the evidence you needed most.

Which J1939 FMI codes are most severe and require stopping the vehicle?

FMIs 0 and 1 are the emergency band. Both indicate that data is valid (the sensor is working correctly) but the reading is at the most severe threshold above (FMI 0) or below (FMI 1) normal. These are the FMIs that typically trigger the Red Stop Lamp and initiate engine protection strategies like fuel derate or automatic shutdown. Common examples: SPN 110 FMI 0 (coolant dangerously hot), SPN 100 FMI 1 (oil pressure dangerously low), SPN 190 FMI 0 (engine overspeed). When either of these FMIs shows up as an active code with a Red Stop Lamp, the truck should be brought to a safe stop as quickly as possible — continued operation risks catastrophic engine damage. FMI 18 is a moderately severe below-normal reading (a warning tier below FMI 1) and usually pairs with an amber warning lamp rather than red. FMIs 3–7 are typically electrical or mechanical faults that need diagnosis but don't require immediate shutdown unless they're paired with a Red Stop Lamp.

Why do multiple fault codes appear at once and how do I prioritize them?

Multiple simultaneous codes usually mean one of two things: a shared root cause, or independent faults that happened to accumulate. The two need very different handling. Cause chains are common in aftertreatment systems — a single failed NOx sensor cascades into SCR efficiency codes, DEF dosing codes, and operator inducement codes, all reported by different ECUs. Fixing the sensor makes eight downstream codes disappear. Treating each independently is what turns a 90-minute job into a full day. The triage sequence is: (1) capture DM1, DM2, OC and SA for every code before touching anything; (2) sort by severity, with FMI 0 and 1 taking priority regardless of what else is present; (3) group codes by system to spot cause chains — multiple codes from the same source address (SA) or the same subsystem often share a root; (4) diagnose the highest-severity root, complete the repair, clear codes, and re-scan. Codes that stay away after the test drive confirm the root was found; codes that return mean the cause chain isn't fully understood yet.

Codes · OC history · work orders · per-asset trail

Turn J1939 fault codes into a searchable maintenance history

HVI captures active and stored J1939 DTCs against each unit's record, links every code to the inspection or work order that resolved it, and preserves the OC trend across visits. Repeat intermittents become obvious. The wrong-part-replaced pattern stops. Every technician starts from the last one's diagnosis, not from zero. Live in under two weeks. No hardware. No credit card.

Trusted by fleets across North America · Ready on day one


Share This Story, Choose Your Platform!

Start Free Trial Book a Demo