SAE J1939 Codes Explained: SPN, FMI, and What They Mean

educational 8 min read Updated 2026-04-18

What Is SAE J1939?

SAE J1939 is the communication and diagnostic standard used on nearly every medium-duty and heavy-duty diesel vehicle built in North America since the late 1990s. Class 8 trucks, school buses, motor coaches, construction equipment, agricultural tractors, marine engines, and stationary generators all speak J1939. The standard is developed by SAE International (the Society of Automotive Engineers) and defines how electronic control modules on a vehicle's CAN bus exchange data -- engine speed, coolant temperature, fault codes, oil pressure, and hundreds of other parameters. Unlike OBD-II, which was mandated on light-duty passenger vehicles starting in 1996, J1939 grew out of the trucking industry's need for a single standardized network that could tie together engines, transmissions, antilock brakes, body controllers, and instrument clusters across different manufacturers.

Why J1939 Exists: Heavy-Duty Needed a Standard

In the early 1990s heavy-duty manufacturers each ran their own proprietary diagnostic protocols. Cummins used one system, Detroit Diesel used another, Caterpillar a third, and fleet shops needed a different scan tool and cable for every brand. When a Freightliner chassis with a Cummins engine, an Allison transmission, and Meritor Wabco brakes came into the shop, the mechanic needed three or four interfaces to read everything. J1939 replaced the older SAE J1708/J1587 standard and unified all electronic components on a single high-speed CAN bus so one scan tool could talk to the whole truck. Passenger car OBD-II (ISO 15031) solves a similar problem for light-duty vehicles but uses a very different code format and data structure, which is why a pickup-truck scanner usually will not read a Class 8 engine.

SPN: The Suspect Parameter Number

Every J1939 fault code is built from two numbers, an SPN and an FMI. SPN stands for Suspect Parameter Number and identifies the specific sensor, circuit, or parameter that is in trouble. SPN 110 is Engine Coolant Temperature. SPN 190 is Engine Speed. SPN 102 is Manifold Boost Pressure. SPN 5246 is the Aftertreatment SCR System Operator Inducement. The SPN list defined in SAE J1939-71 contains thousands of parameters. Large SPN numbers in the 500-5000 range cover modern emission system components like DEF dosing valves, DPF differential pressure sensors, NOx sensors, and SCR catalyst efficiency. When a scan tool displays a fault, the SPN tells you what component or measurement the ECM is unhappy about.

FMI: The Failure Mode Indicator

FMI stands for Failure Mode Indicator and tells you how the SPN failed. FMI values run from 0 to 31 and describe the nature of the fault. FMI 0 is Data Valid But Above Normal (Most Severe). FMI 1 is Data Valid But Below Normal (Most Severe). FMI 3 is Voltage Above Normal or Shorted High. FMI 4 is Voltage Below Normal or Shorted Low. FMI 5 is Current Below Normal or Open Circuit. FMI 6 is Current Above Normal or Grounded Circuit. FMI 7 is Mechanical System Not Responding. FMI 9 is Abnormal Update Rate. FMI 12 is Bad Intelligent Device or Component. FMI 14 is Special Instructions. FMI 31 is Condition Exists. Memorizing the common FMIs -- 3, 4, 5, 6, 7, 14, and 31 -- covers the majority of real-world faults you will see.

Example: Decoding SPN 3361 FMI 5

Suppose a scan tool reports SPN 3361 FMI 5 on a 2018 Peterbilt with an ISX15 engine. SPN 3361 is the Aftertreatment 1 SCR Catalyst DEF Dosing Unit. FMI 5 is Current Below Normal or Open Circuit. Together the code means the ECM commanded the DEF dosing valve on but did not see current flow through the solenoid -- most likely an open connector, a broken wire to the dosing valve, or a failed valve coil. A technician would check the connector at the dosing unit, measure resistance across the solenoid coil (typical range 10-15 ohms), and look for corrosion or damage on the harness. This decoding pattern -- look up SPN, look up FMI, combine them into a root cause -- works for every J1939 fault no matter the engine make.

How to Read J1939 Codes With a Scan Tool

You cannot read J1939 codes with a typical 16-pin OBD-II pickup-truck scanner. Heavy trucks use a 9-pin Deutsch or newer Type 2 green 9-pin connector, and the scan tool has to speak the J1939 CAN protocol. Common professional choices are the Nexiq USB Link 3 paired with software like Cummins INSITE or Detroit Diesel DiagnosticLink, the Noregon JPRO Fleet Diagnostics system, the Autel MaxiSys CV, or the Diesel Laptops Diesel Explorer series. Plug into the 9-pin connector under the dash, launch the software, and the tool will scan every module -- engine, transmission, brakes, instrument cluster, aftertreatment -- and display active and stored faults as SPN/FMI pairs, usually with plain-English descriptions.

Difference From OBD-II P-Codes

OBD-II uses five-character codes in the format P0300 or U0100. The first character is the system (P powertrain, C chassis, B body, U network), and the last four digits identify the fault. J1939 is completely different: there is no letter prefix, codes are reported as numeric SPN and FMI pairs, and many manufacturers layer their own proprietary fault numbers on top of the SPN/FMI system -- Cummins publishes an internal fault code list like Fault 1921, 2646, or 5031 that each map to a specific SPN/FMI pair. Scan tools usually show both the manufacturer code and the raw SPN/FMI so you can cross-reference. OBD-II is designed for consumer-grade repair and emissions readiness monitoring; J1939 is designed for commercial diagnostics, telematics, and fleet management at scale.

Where J1939 Codes Show Up in Real Life

Fleet telematics platforms like Samsara, Geotab, PeopleNet, and Omnitracs stream J1939 fault codes off a truck's CAN bus in real time so dispatchers see faults the moment they occur. Modern trucks display a subset of J1939 data on the driver information display -- a DEF level warning, a DPF regen-needed lamp, or a derate countdown. If you are a driver seeing a red stop-engine lamp, the underlying fault is almost always a J1939 code that a technician will pull with a laptop. If you are a shop owner or mobile mechanic, understanding SPN and FMI is non-negotiable because every modern diesel diagnostic starts there.

Frequently Asked Questions

Is J1939 the same as OBD-II?

No. OBD-II is the diagnostic standard for light-duty cars and trucks under 14,000 lb GVWR and uses P, C, B, and U code prefixes. J1939 is the diagnostic and communication standard for medium- and heavy-duty diesel vehicles and uses SPN/FMI number pairs. They run on different connectors and protocols, which is why a cheap OBD-II reader typically cannot read a Class 8 truck.

What scan tool do I need to read J1939 codes?

You need a heavy-duty scan tool that supports the J1939 CAN protocol and has a 9-pin Deutsch cable. Common options include the Nexiq USB Link 3 with Cummins INSITE or Detroit DiagnosticLink, the Noregon JPRO, the Autel MaxiSys CV, or Diesel Laptops tools. Budget pickup-truck OBD-II scanners will not work on most Class 7 and 8 trucks.

What does FMI 5 mean?

FMI 5 means Current Below Normal or Open Circuit. The ECM commanded an actuator on, or expected to see current flowing through a sensor circuit, and saw no current. It almost always points to an open wire, a disconnected connector, a failed solenoid coil, or a blown fuse in that circuit.

Where do I look up an SPN number?

SPN definitions are published in SAE J1939-71 and J1939-DA. Free online databases and scan-tool software include the descriptions. On modern scan tools the description appears automatically next to the number. For rare SPNs, engine manufacturer service manuals are the authoritative source.

Can I clear J1939 codes myself?

Yes, with a J1939-capable scan tool. But clearing the code does not fix the underlying fault -- if the failure is still present, the code will re-log within seconds to minutes. For inactive or historical codes from a resolved issue, clearing them is perfectly safe and normal after repairs are complete.