A dash lamp comes on. The driver calls dispatch. Dispatch calls the shop. The shop plugs in a scanner and gets back "SPN 3226 FMI 20" — five characters that mean nothing to most people who read them. So the truck gets pulled from a route on suspicion, or worse, ignored on assumption. Both cost money. J1939 is not a mystery once you know what the parts of a fault code actually mean. Every heavy-truck DTC broadcast on the CAN bus is a two-part answer: the SPN tells you WHAT parameter has failed (from a library of 10,000+), the FMI tells you HOW it's failing (one of 32 defined failure modes), and metadata like Source Address, Occurrence Count, and Lamp Status tell you which ECU said it, how many times, and how urgent. Read those five fields correctly and a 5-character code turns into a real diagnosis in under 30 seconds. Below is the full anatomy of a J1939 fault code, the FMI cheat sheet, the SA (source address) map that tells you which module reported the fault, the top diagnostic messages (DM1 / DM2), and how Truck Inspection & Maintenance auto-translates SPN/FMI codes into plain-English work orders — sign up free or contact our team.
What Are J1939 Fault Codes? Complete SPN, FMI & DTC Guide
Stop treating fault codes as noise. Read them right and every dash lamp becomes a repair plan.
Why J1939 Replaced Everything Else
Before J1939, every diesel manufacturer ran a proprietary protocol — Cummins used one, Detroit Diesel another, Caterpillar a third. A Freightliner with a Cummins engine, Allison transmission, and Meritor brakes needed three different scan tools to read everything. J1939 unified all electronic components on one CAN bus, so one scanner reads the whole truck:
All ECUs — engine, transmission, brakes, aftertreatment, body — communicate over one 2-wire CAN network at 250 kilobits per second, carrying thousands of parameters per second.
Standard diagnostic port on every Class 6–8 truck since 2007. Any J1939-capable scan tool plugs into the same connector and reads any brand of engine, transmission, or aftertreatment.
Applies to every heavy-duty truck over 14,000 lbs GVWR. Passenger-car OBD-II (ISO 15031) uses a different code format entirely, which is why a pickup scanner won't read a Class 8 engine.
Reading J1939 codes on every truck manually gets expensive fast — start a free account and get SPN/FMI translation auto-attached to every fault as it arrives.
The 5 Parts of Every J1939 DTC
A complete J1939 diagnostic trouble code carries five pieces of information. Learn to read all five and you have a full diagnosis without opening a repair manual:
SPN — Suspect Parameter Number
Identifies WHAT failed. Over 10,000 defined SPNs cover every sensor, actuator, and data value on the truck — from coolant temp to turbo speed to DEF injector current.
FMI — Failure Mode Identifier
Identifies HOW it failed. 32 standardized failure modes cover voltage anomalies, current faults, mechanical non-response, erratic signals, and abnormal operating conditions.
SA — Source Address
Identifies WHICH ECU reported the fault. SA 0 = engine ECM, SA 3 = transmission, SA 11 = ABS, SA 33 = body controller. Same SPN can mean different things from different modules.
OC — Occurrence Count
How many times this fault has been detected. Ranges 0–126. A high OC on an intermittent code means it's happening repeatedly — critical for chasing hard-to-catch faults.
Lamp Status
Tells the dash which warning to illuminate: MIL (check engine), Red Stop, Amber Warning, or Protect. Determines urgency — a Red Stop lamp means shut down now; an amber is drivable to the shop.
The FMI Cheat Sheet — All 32 Failure Modes
The FMI is where diagnosis lives. Learn these categories and you can decode any J1939 fault the moment it appears:
Want a printable FMI reference card for the shop wall? Contact our team and we'll send you a laminated version free.
The Source Address (SA) Map — Who's Talking
Same SPN can mean different things depending on which ECU broadcast it. The Source Address tells you which module to interrogate. These are the most common SAs on a Class 8 truck:
Real-World Decode — 5 Common Fleet Faults
Here's how the pieces come together on codes that actually show up in every fleet's scanner:
Diagnosis: Coolant temp sensor circuit shorted to voltage or open. Check connector at sensor, look for chafed wires against block, measure voltage at ECM harness.
Diagnosis: ECM has lost communication with the CAN bus. Often a terminating resistor issue, broken CAN wire, or failed ECU. Verify with two-scope on CAN High/Low.
Diagnosis: SCR controller isn't sending data at expected rate. Check aftertreatment CAN wiring, NOx sensor power/ground, DEF dosing module connector.
Diagnosis: Post-SCR NOx too high vs pre-SCR. Usually a bad DEF quality, failed NOx sensor, or plugged DEF injector. Do NOT clear without root cause fix.
Diagnosis: Pedal position sensor giving intermittent or invalid signal. Check pedal connector for corrosion, verify ground continuity, inspect harness routing.
Diagnosis: DEF tank below threshold. Simple fill usually clears. Under 2026 EPA rules, 650 mi / 10 hr warning window before harsher inducement fires.
Every one of these codes auto-generates a plain-English work order in Truck Inspection & Maintenance — sign up free and stop Googling every fault.
The One Rule That Separates Good Fleets From Great — Never Clear a Code Without Root Cause
Techs under time pressure clear active codes hoping they won't come back. On J1939 they always do — and often escalate from amber to red on the return trip. Every code cleared without a documented root cause is a failure that will strand a truck later. Log every SPN/FMI, its OC, and the actual repair action per truck. Trends surface — the truck throwing SPN 3226 every 3 months has a NOx sensor problem you need to solve at the sensor, not the scanner. Start a free account and log every fault code with its resolution per truck.
DM1 vs DM2 — Active vs Historical Codes
Two J1939 messages carry fault data. Reading both together is what turns single-code diagnosis into fleet-wide trend analysis:
Currently Active Fault Codes
Every ECU broadcasts DM1 once per second listing all currently active faults with SPN, FMI, OC, and lamp status. This is what your scanner shows on the "Active Codes" screen. When a fault clears (condition goes away), it drops off DM1 immediately.
Previously Active (Stored) Codes
DM2 is a request-response message returning all fault codes that were active in the past but have since cleared. Retains OC value so you see how many times an intermittent has fired. Cleared only by explicit "Clear Codes" scan tool command.
Running a mixed fleet across multiple telematics providers? Get in touch — we integrate with Geotab, Samsara, Teltonika, and 20+ others.
Turn every SPN/FMI into a plain-English work order the moment it fires.
SPN/FMI translation, per-truck fault history, and auto-generated work orders — no more Googling every code. Free forever for up to 3 vehicles — create your free account or talk to our team.
The 4-Step Fault Diagnosis Workflow
Every fault, every truck, every time. This is the workflow top-performing shops run in 60 seconds or less:
Pull the Code — SPN + FMI + SA
Connect to the 9-pin Deutsch port. Read active (DM1) and historical (DM2). Write down all three parts: what failed (SPN), how (FMI), and which ECU said so (SA).
Decode Against the Database
SPN identifies the component; FMI identifies the failure type; combined they give the diagnosis. Software auto-translates; without software, use the OEM's SPN/FMI reference guide.
Test the Physical Component
Do not repair based on code alone. Test the sensor, wiring, or connector called out by the SPN. A voltage-high code (FMI 3) usually means chafed harness or corroded connector, not a bad sensor.
Fix, Clear, Verify
Repair the root cause. Clear the code. Drive the truck through the conditions that triggered the fault and re-scan. Fault must not reappear on DM1 or you missed the root cause.
The whole workflow becomes automatic when it lives in one system — create your free account in 10 minutes and put every truck on the same fault process.
Frequently Asked Questions
What does SPN and FMI stand for in J1939 fault codes?
SPN stands for Suspect Parameter Number — a number identifying which component or data value has a fault. There are over 10,000 defined SPNs covering every sensor, actuator, and parameter on the truck. FMI stands for Failure Mode Identifier — one of 32 standardized failure modes that describes HOW the parameter failed (voltage high, voltage low, erratic signal, mechanical non-response, etc.). Combined, an SPN and FMI form a complete J1939 diagnostic trouble code that tells you exactly what failed and how.
What is the difference between J1939 and OBD-II codes?
J1939 is used on heavy-duty commercial vehicles over 14,000 lbs GVWR — Class 6–8 trucks, buses, and off-road equipment. OBD-II (ISO 15031) is used on light-duty passenger vehicles under 14,000 lbs. The two protocols use different code formats, different connectors, and different data structures — which is why a pickup-truck scanner will not read a Class 8 engine, and vice versa. J1939 fault codes are SPN/FMI pairs (like "SPN 110 FMI 3"), while OBD-II codes are 5-character alphanumeric strings (like "P0117").
How do I read a J1939 fault code?
Plug a J1939-capable scan tool into the 9-pin Deutsch diagnostic port. The scanner will pull DM1 (active codes) and DM2 (historical codes). Each code is displayed as SPN/FMI/SA — the SPN tells you which parameter, the FMI tells you the failure type, and the SA tells you which ECU reported it. Software like Cummins INSITE, Cat ET, or fleet management systems auto-translate to plain English; without translation software, cross-reference the OEM's SPN/FMI reference chart.
What does Source Address (SA) tell me about a fault code?
The Source Address identifies which ECU on the CAN bus broadcast the fault. SA 0 is the engine ECM, SA 3 is the transmission, SA 11 is ABS/brakes, SA 21 is the aftertreatment controller, SA 33 is the body controller. This matters because the same SPN can appear from multiple modules with different meanings, and knowing the SA tells you which module to interrogate for wiring, connectors, and physical testing.
Should I clear a J1939 fault code without repairing it?
Never. Clearing an active fault code without addressing the root cause means the fault will reappear — often escalating from an amber warning to a red stop-engine event on the next drive cycle. J1939 codes are not nuisance codes; the ECU sets a DTC because a monitored parameter has deviated from its calibrated operating envelope. Log every code, diagnose the root cause, repair the physical component, then clear and verify. A cleared-without-fix code is a stranded truck waiting to happen.
How does Truck Inspection & Maintenance help with J1939 fault codes?
Truck Inspection & Maintenance auto-translates SPN/FMI codes into plain-English descriptions, generates work orders automatically when active codes appear, tracks OC (occurrence count) to spot recurring intermittents, logs every fault with its resolution per truck for trend analysis, and integrates with major telematics providers so codes flow in real-time from the truck to the shop. Free forever for up to 3 vehicles. Sign up in 10 minutes or contact our team for larger fleets.
Every dash lamp is a message. Read it right or pay for guessing.
Auto-translated SPN/FMI, per-truck fault history, and work orders that fire the moment a code goes active. Free forever for up to 3 vehicles — no hardware, no contract, no credit card.







