A heavy truck's engine is broadcasting its health every second — but only if you know which message to read. On the J1939 network, DM1 tells you what's wrong right now, and DM2 tells you what was wrong since the codes were last cleared. Read the wrong one and you'll chase a fault that already healed, or miss one that's live. Both carry the same building blocks — an SPN that says which part, an FMI that says how it failed — so learning to read them turns a wall of numbers into a clear repair decision. This guide breaks down DM1 vs DM2, the anatomy of a J1939 fault code, and how Truck Inspection & Maintenance Management Software (TIM) turns those codes into ranked work orders. Start free and turn engine faults into action with TIM.

TIM · J1939 Diagnostics

DM1 Is What's Wrong Now. DM2 Is What Was Wrong Before.

On a heavy-duty truck, the engine reports faults over J1939 in two messages that look almost identical — and mixing them up sends a technician after the wrong problem. DM1 lists active faults and drives the dash lamps; DM2 lists the history since the last clear. Read together, they tell you whether a fault is live, intermittent, or already fixed — and TIM captures each code against the unit so it becomes a severity-ranked work order, not a number scribbled on a fault reader.

Two messages · same structure · different question
DM1
"What is wrong right now?"
Active faults · drives the lamps · broadcast every 1 s
DM2
"What was wrong before?"
History since last clear · on request only
Same SPN + FMI structure — the difference is active vs. history, and that changes what you do next.

DM1 vs DM2 — The Core Difference

Both messages carry diagnostic trouble codes in exactly the same format. What separates them is when the fault is true and how you get the message off the bus. Get this distinction right and half of J1939 diagnostics falls into place.

DM1 · ACTIVE
Faults happening now
  • Lists currently active DTCs
  • Carries the dash lamp status (stop, warning, etc.)
  • Broadcast automatically — about every 1 second and whenever a code changes state
  • PGN 65226 (0xFECA)
  • Answers: "what should I act on right now?"
DM2 · HISTORY
Faults that were active before
  • Lists previously active DTCs since the last clear
  • Same structure as DM1 — SPN, FMI, counts
  • On request only — you query for it, it isn't broadcast
  • Reveals intermittent faults that come and go
  • Answers: "has this happened before?"

The pairing is the point: DM1 says a fault is live, DM2 says whether it's a repeat. Contact our team to capture both against every unit in TIM.

Anatomy of a J1939 Fault Code

Whether it arrives in DM1 or DM2, a single trouble code is built from four parts. Read them in order and the code stops being a mystery number — it tells you which part, how it failed, and how often.

SPN
Suspect Parameter NumberWhich subsystem or component reported the fault — the "what." A 19-bit number; standard SPNs run 1–524287, with a proprietary range for OEM-specific codes.
FMI
Failure Mode IdentifierHow it failed — voltage high, voltage low, open circuit, out of range, and so on. A 5-bit value that turns "the sensor" into "the sensor reads too high."
OC
Occurrence CountHow many times this fault has happened — a counter up to 126. A high count on a DM2 code flags a nagging, intermittent problem worth chasing.
CM
Conversion MethodA single flag telling the reader how the SPN is encoded, so the code is interpreted with the right version. Almost always the current standard.

Read as a pair: SPN says which part, FMI says how it failed. "SPN 100, FMI 1" means engine oil pressure (100), too low (1) — a specific, actionable fault, not a vague warning light.

The Four Lamps DM1 Drives

DM1 doesn't just carry codes — its first bytes set the dashboard lamps, and each lamp is a severity signal. Knowing which lamp a fault lit tells the driver and the shop how urgent it is before anyone decodes a single SPN.


Red Stop Lamp Critical fault — stop the vehicle as soon as it's safe. The engine or aftertreatment is at risk of damage.
SPN 623

Amber Warning Lamp Non-critical but notable — a system needs attention soon, but you don't have to stop now.
SPN 624

Malfunction Indicator (MIL) An emissions-related fault is active — the aftertreatment or emissions system has a problem to address.
SPN 1213

Protect Lamp A non-electronic subsystem is out of range — a fluid level, temperature, or pressure outside safe limits.
SPN 987

A Fault Code Is Only Useful When It Becomes a Repair

Reading DM1 and DM2 off a fault reader tells you what's wrong on one truck, at one moment, in the yard. Truck Inspection & Maintenance Management Software takes it further: each code is captured against the unit and its history, ranked by the lamp and fault severity, and turned into a work order — so an active red-stop fault gets acted on immediately and a repeating DM2 code becomes a planned investigation, not a note that gets lost.

Active or Historical? Why It Changes the Repair

The single most useful thing DM1 and DM2 give you together is context: is this fault live, gone, or coming back? That answer changes what a technician does next.

What you seeWhat it meansWhat to do
In DM1, not in DM2A brand-new active fault, first occurrenceDiagnose the live fault now; note conditions
In DM1 and DM2Active now and has happened beforeTreat as confirmed, recurring — fix the root cause
In DM2, not in DM1Was active, now cleared — intermittentCheck the occurrence count; chase if it's climbing
High occurrence countThe same fault keeps returningStop clearing it — find why it repeats

Clearing a code without reading its DM2 history is how a repeating fault hides in plain sight. Start free and keep a full fault history per unit with TIM.

J1939 vs OBD-II — Know Which You're Reading

Light and medium vehicles use OBD-II's five-character codes; heavy-duty trucks use J1939's SPN-plus-FMI format. A mixed fleet sees both, and they aren't interchangeable.

HEAVY-DUTY · CLASS 6–8
J1939 Faults reported as an SPN (which parameter) plus an FMI (how it failed), delivered in messages like DM1 and DM2 over the vehicle network. The subject of this guide.
LIGHT / MEDIUM-DUTY
OBD-II Faults reported as a five-character DTC (P/C/B/U + digits). A different standard — a J1939 SPN won't decode as an OBD-II code and vice versa.
How TIM Runs It

From Broadcast Code to Ranked Work Order

TIM isn't a fault reader you unplug and forget — it keeps each unit's diagnostic story on one record, so a code read today lines up against the same truck's history and becomes a decision.

Codes captured per unitActive and historical faults logged against the specific truck, not a loose reading in the yard.
Severity-ranked by lampA red-stop fault jumps the queue; an amber warning batches into planned work.
Fault → work orderA code becomes an assigned, trackable repair instead of a number that gets forgotten.
Repeat-fault visibilityRecurring codes surface across the fleet, so a pattern becomes a planned fix, not a mystery.
Full diagnostic historyEvery unit's fault record in one place — the context DM2 alone can't give you long-term.
Mixed-fleet readyJ1939 and OBD-II codes tracked side by side, so heavy and light units live on one system.

Frequently Asked Questions

What is the main difference between DM1 and DM2?
DM1 lists the faults that are active right now and carries the dashboard lamp status; DM2 lists faults that were previously active since the codes were last cleared. They share the same structure — the same SPN, FMI, and occurrence-count building blocks — so the difference isn't the format, it's the timeframe. DM1 answers "what's wrong now," DM2 answers "what's been wrong before." Read together, they tell you whether a fault is new, confirmed and recurring, or already resolved. Start free and capture both against every unit with TIM.
What do SPN and FMI mean in a J1939 fault code?
SPN — Suspect Parameter Number — identifies which parameter or component reported the fault; it's the "what." FMI — Failure Mode Identifier — describes how that parameter failed, such as voltage too high, voltage too low, open circuit, or reading out of range; it's the "how." You always read them as a pair: an SPN alone tells you the sensor is involved, but SPN plus FMI tells you the sensor is reading too high, which is what actually points a technician at the fix. A J1939 code without both halves is only half a diagnosis.
Why is DM2 only available on request?
DM1 is broadcast automatically — roughly once a second and whenever a code changes state — because active faults and lamp status are what the vehicle needs to communicate continuously. DM2 is historical data that doesn't change moment to moment, so broadcasting it constantly would just add traffic to the network. Instead, a diagnostic tool or telematics device requests it when someone actually wants to review the fault history. That's why you'll see DM1 stream on its own but have to query specifically to pull DM2.
What does a high occurrence count tell me?
The occurrence count records how many times a specific fault has happened, counting up to a maximum of 126. A high count — especially on a code sitting in DM2 as previously active — is the signature of an intermittent fault that keeps coming back and getting cleared without the root cause being fixed. It's a strong signal to stop clearing the code and start investigating why it recurs, since an intermittent fault today is often a hard failure later. Tracking that count over time is where a maintenance system earns its keep.
Do I read J1939 codes the same way as OBD-II codes?
No — they're different standards. Heavy-duty trucks use J1939, where a fault is an SPN plus an FMI delivered in messages like DM1 and DM2. Light and medium vehicles use OBD-II, where a fault is a five-character code like P0101. A J1939 SPN won't decode as an OBD-II code, and vice versa, so a mixed fleet needs to handle both formats. The underlying idea is similar — identify the part, identify the failure mode — but the encoding and the tools differ, which is why tracking them in one system that understands both saves the confusion.
DM1 = Active · DM2 = History · SPN + FMI = The Fault

Turn Engine Fault Codes Into Fixed Trucks

DM1 and DM2 are the truck telling you exactly what's wrong and whether it's happened before — in a format that's precise once you know how to read it. SPN for the part, FMI for the failure, the lamp for the urgency, and the history for the pattern. The last step is turning that read into a repair before the fault grows. TIM captures every code against the unit, ranks it by severity, and makes it a work order — so the diagnosis always ends in a fix.

No credit card required · Free for up to 3 trucks · Per-unit fault capture, severity ranking, and work orders built in