J1939 Fault Codes

Plain-English reference for SAE J1939 diagnostic messages, SPN/FMI structure, data link faults, source address context, and OEM verification guidance.

SAE J1939 is the communication framework used across modern heavy-duty commercial trucks. It connects engines, transmissions, ABS modules, aftertreatment systems, instruments, body controllers, and diagnostic tools over a shared CAN data bus. Diagnostic messages sent over J1939 carry a Suspect Parameter Number (SPN), a Failure Mode Identifier (FMI), a source address identifying which module generated the message, and additional data depending on the message type. Browse the J1939 topic pages for specific message and parameter references.

An SPN/FMI pair does not tell you which part has failed. It describes which parameter the module was monitoring and what type of abnormal condition was detected. The same SPN 102 FMI 4 (intake manifold pressure, below normal range) could come from a damaged boost pressure sensor, a disconnected hose, a failing turbocharger, a broken wire between the sensor and the ECM, or a software fault in the ECM itself. The SPN and FMI narrow the search; they do not end it. Full diagnosis requires source address, active vs. stored status, related codes, live data, and OEM service documentation for the specific vehicle and calibration version.

Source address identifies the originating module on the J1939 network. Engine codes typically come from SA 0, transmission codes from SA 3, ABS controllers at their assigned addresses, and so on. When a dashboard shows fault codes, it may be displaying messages from several different source addresses simultaneously without clearly labeling which module reported each one. A diagnostic tool that shows source address alongside SPN and FMI is significantly more useful in multi-system fault scenarios than one that shows only the SPN number.

Data link faults are a distinct diagnostic category and can generate a cascade of codes from multiple modules at once. When a module stops transmitting, every other module that was reading its messages will log an update-rate fault. Before chasing individual SPN/FMI codes from several systems at the same time, check the J1939 bus: measure the 60 Ω termination resistance between CAN Hi and CAN Lo at the 9-pin diagnostic connector, inspect the connector for corrosion or damage, and review any recently serviced harness sections that may have introduced an open or short on the backbone.

Use the fault code lookup to search by SPN number, FMI, or keyword. The SPN section covers individual parameter contexts, and the FMI section explains each failure mode in plain terms. For OEM-specific guidance — which tool is needed, how a particular brand handles a specific fault type, what the calibration differences are — use the manufacturer hub pages.

What To Know

  • Read the full diagnostic message: SPN, FMI, source address, and active or stored status. The number alone on the dash display is not enough.
  • Related codes often matter as much as the primary code, especially for data link faults, communication faults, and multi-system events.
  • FMI 9 (abnormal update rate) from multiple modules simultaneously almost always points to a network or wiring fault, not multiple independent component failures.
  • The same SPN/FMI pair follows different OEM-specific diagnostic paths depending on engine family, model year, calibration version, and which module reported it.
  • J1939 is the message format; final fault diagnosis requires OEM service documentation, the manufacturer's diagnostic software, and a qualified technician.
  • Record the complete code list with active vs. stored status, occurrence counts, all warning lamps, and derate conditions before clearing anything.

FAQ

What is SAE J1939?

SAE J1939 is a set of standards that define how electronic control modules on heavy-duty vehicles communicate over a CAN (Controller Area Network) bus. It specifies the network layer, message formats, parameter numbering, and diagnostic message structures used by engines, transmissions, ABS modules, aftertreatment systems, instruments, and other vehicle systems. Most commercial trucks built after approximately 2001 use J1939 for internal module communication and fault reporting.

What is the relationship between SPN, FMI, and a J1939 fault code?

A J1939 diagnostic trouble code combines a Suspect Parameter Number (SPN) and a Failure Mode Identifier (FMI). The SPN identifies which parameter or system the module is reporting on — SPN 110 is engine coolant temperature, SPN 3031 is DEF tank level, SPN 84 is vehicle speed. The FMI identifies what is wrong with that parameter — 3 means the signal is above the normal voltage range, 4 means it is below, 9 means the expected data update stopped arriving from another module. Together they describe the diagnostic event, but full context requires the source address, active vs. stored status, the OEM's calibration, and related codes.

Can a J1939 data link problem generate unrelated-looking fault codes?

Yes, and it is one of the more confusing diagnostic patterns. When the data link has a fault — a damaged wire, a missing termination resistor, a module that is not transmitting — every module that was expecting data from the affected source will log an 'abnormal update rate' or 'received data in error' fault. A single wiring problem on the backbone can produce a cascade of FMI 9 codes from several modules simultaneously, none of which point to the actual root cause. Any time multiple modules are logging FMI 9 or FMI 19 at the same time, check the data link itself first: measure termination resistance at the 9-pin diagnostic connector, inspect the connector, and look at recently repaired harness sections.

Does knowing the SPN identify which part to replace?

No. The SPN identifies the parameter being reported, not the physical component that has failed. SPN 84 is vehicle speed; a fault on SPN 84 could be the vehicle speed sensor, a wiring fault, the ABS module feeding speed data to the engine ECM, or a communication issue between two modules. The FMI narrows the failure mode type, but confirming the specific component requires live data readings, wiring checks, and OEM service procedures for the exact vehicle and calibration.

How are J1939 fault messages different from older MID/PID/SID codes?

MID, PID, and SID (Message Identifier, Parameter Identifier, Subsystem Identifier) are part of the earlier SAE J1587 standard. Pre-2000 trucks and some early-2000s equipment still use J1587, which has a different parameter numbering system and a different network baud rate. J1939 replaced J1587 as the primary diagnostic network for newer commercial vehicles. Some trucks have both networks active at the same time, with different modules on each. A diagnostic tool that only reads J1939 may miss codes from modules on the J1587 network, particularly on older Cummins and Detroit engines.