When a fault appears on a J1939 network, technicians may see diagnostic information such as:
SPN 110 FMI 0
These numbers are part of the Diagnostic Trouble Code (DTC) structure used in SAE J1939.
The SPN identifies what parameter or system is associated with the fault, while the FMI describes what type of failure has been detected.
Understanding SPN and FMI is therefore one of the first steps in diagnosing engine and machine faults on J1939-based mobile machinery.
SPN stands for Suspect Parameter Number.
It identifies a specific parameter, signal, component, or condition within a J1939 system.
SPNs can represent information such as:
Engine speed
Engine coolant temperature
Engine oil pressure
Fuel pressure
Accelerator position
Battery voltage
Transmission parameters
Aftertreatment parameters
For example:
SPN 110 = Engine Coolant Temperature
If an ECU reports a DTC containing SPN 110, the diagnostic information is related to engine coolant temperature.
However, the SPN alone does not explain what is wrong with that parameter.
For that, we need the FMI.
FMI stands for Failure Mode Identifier.
It describes the type of failure associated with the SPN.
For example, an FMI may indicate that a value is:
Above its normal operating range
Below its normal operating range
Electrically too high
Electrically too low
Not updating correctly
Mechanically not responding as expected
This means:
SPN = What has a problem?
FMI = What kind of problem is it?
The two values should normally be interpreted together.

Consider this diagnostic code:
SPN 110 FMI 0
SPN 110 identifies:
Engine Coolant Temperature
FMI 0 indicates:
Data valid but above normal operational range – most severe level
Together, the diagnostic information indicates that the ECU has detected an excessively high engine coolant temperature.
The relationship can be simplified as:
J1939 DTC
│
├── SPN → Which parameter?
│
└── FMI → What type of failure?
This provides much more useful information than a generic “Engine Fault” warning.
J1939 defines multiple FMI values for different types of faults.
Some commonly encountered examples include:
| FMI | General Meaning |
|---|---|
| 0 | Data valid but above normal range – most severe |
| 1 | Data valid but below normal range – most severe |
| 2 | Data erratic, intermittent, or incorrect |
| 3 | Voltage above normal or shorted high |
| 4 | Voltage below normal or shorted low |
| 5 | Current below normal or open circuit |
| 6 | Current above normal or grounded circuit |
| 7 | Mechanical system not responding properly |
| 9 | Abnormal update rate |
| 12 | Bad intelligent device or component |
| 13 | Out of calibration |
| 19 | Received network data in error |
The exact interpretation should still be checked against the relevant ECU or equipment manufacturer's diagnostic documentation.
The same SPN can appear with different FMI values.
Suppose an SPN identifies a pressure sensor.
The ECU might report:
SPN XXX FMI 3
This may indicate that the sensor circuit voltage is above the expected range.
Another fault could be:
SPN XXX FMI 4
This may indicate that the voltage is below the expected range.
Or:
SPN XXX FMI 0
This could indicate that the measured pressure itself is above the normal operating range.
The SPN remains the same, but the FMI changes the meaning of the fault.
This distinction is important because the troubleshooting process may be completely different.
SPN and FMI information is commonly carried in J1939 diagnostic messages.
One of the most important is:
DM1 — Active Diagnostic Trouble Codes
DM1 reports currently active diagnostic faults.
A simplified communication path is:
Engine ECU
↓
J1939 DM1
↓
SPN + FMI
↓
Mobile Controller
↓
HMI Display
The controller can receive the diagnostic message, decode the DTC information, and send relevant fault information to the HMI.
SPN and FMI are important, but they are not the only useful diagnostic information.
A J1939 diagnostic message may also provide information such as the Occurrence Count (OC).
The occurrence count indicates how many times a particular fault condition has been detected, subject to the behavior implemented by the ECU.
For example, an HMI diagnostic page might display:
Engine ECU
SPN: 110
FMI: 0
Occurrence Count: 3
Status: Active
This gives technicians more context than simply displaying a warning lamp.
Raw SPN and FMI numbers are useful to engineers, but they may not be intuitive for machine operators.
An HMI can convert diagnostic data into more readable information.
Instead of showing only:
SPN 110 FMI 0
the screen could display:
ENGINE COOLANT TEMPERATURE TOO HIGH
Additional technical information can remain available on a diagnostic page:
ENGINE FAULT
Source: Engine ECU
SPN: 110
FMI: 0
Occurrence Count: 3
Status: Active
Coolant Temperature: 108°C
This gives operators a clear warning while still providing detailed information for service technicians.
In a mobile control system, the controller can do more than simply forward diagnostic messages.
Depending on the application logic, it may use diagnostic information to trigger:
HMI warnings
Audible alarms
Fault logging
Limited operating modes
Protection strategies
Maintenance notifications
For example:
Engine ECU
↓
DM1: SPN + FMI
↓
Mobile Controller
↓
Fault Evaluation
↙ ↘
HMI Warning Machine Response
This allows diagnostic information to become part of the overall machine control strategy.
Not always.
This is an important distinction.
Suppose a DTC points to a pressure sensor parameter. The sensor itself may be faulty, but other possible causes include:
Damaged wiring
Loose connector
Short circuit
Open circuit
Poor ground
Unstable supply voltage
CAN communication problems
Actual mechanical pressure outside the normal range
Therefore, an SPN/FMI combination should be treated as a diagnostic starting point, not automatic proof that a particular component must be replaced.
A practical troubleshooting process can be:
1. Identify the ECU source
Determine which J1939 device reported the fault.
2. Read the SPN
Identify the affected parameter or system.
3. Read the FMI
Determine the reported failure mode.
4. Check live data
Compare the current sensor or machine value with expected operating conditions.
5. Inspect wiring and connectors
Check power, ground, harnesses, connectors, and sensor wiring.
6. Check CAN communication
Confirm that the ECU is online and J1939 communication is stable.
7. Verify the repair
After correcting the suspected problem, confirm that the active fault disappears and does not return.
For machine manufacturers, it is often useful to provide both the technical code and a readable description.
For example:
| Diagnostic Data | HMI Display |
|---|---|
| SPN 110 FMI 0 | Engine Coolant Temperature Too High |
| SPN XXX FMI 3 | Sensor Voltage Above Normal |
| SPN XXX FMI 4 | Sensor Voltage Below Normal |
| SPN XXX FMI 9 | Abnormal Update Rate |
This approach serves two different users:
Operators receive understandable warnings.
Service technicians still have access to the original SPN/FMI information for troubleshooting.
SPN and FMI are fundamental parts of J1939 diagnostics.
The basic concept is simple:
SPN identifies what parameter is associated with the fault.
FMI identifies what type of failure has been detected.
When combined with DM1 messages, ECU source information, occurrence counts, live machine data, and HMI diagnostics, SPN/FMI codes provide technicians with valuable information for troubleshooting mobile machinery.
For OEMs developing J1939-based control systems, integrating diagnostic information into the mobile controller and HMI can make machine faults easier to understand, improve service efficiency, and reduce troubleshooting time.