Blog

SAE J1939 SPN List Explained: Structure, Decoding, and Common Parameter Numbers

August 25, 2026

If you've decoded a J1939 fault code or looked inside a message like PGN 61444, you've already run into SPN Suspect Parameter Number. It's one of the most-referenced identifiers in heavy-duty diagnostics, right alongside PGN, but the two are often confused. This guide explains exactly what an SPN is, how it's structured, how it works together with FMI to form a diagnostic trouble code, and lists the SPNs you'll see most often on a real J1939 network.

What Is an SPN?

SPN stands for Suspect Parameter Number. It identifies a single, specific data parameter on a J1939 network a sensor reading, a status flag, or a calculated value such as engine speed, coolant temperature, or boost pressure.

Where a PGN identifies an entire message (a container that can carry several parameters at once), an SPN identifies one parameter inside that container. Every SPN is documented in the SAE standard mainly J1939-71 (Vehicle Application Layer) for normal operating parameters, and J1939-73 (Diagnostics Layer) for parameters used specifically in diagnostic contexts with its bit position, byte offset, scaling, resolution, and valid range fully specified.

SPNs matter for two related but distinct reasons:

  • Signal decoding telling a decoder where inside a PGN's data field to find a given value and how to scale the raw bits into engineering units.
  • Diagnostic trouble codes identifying which parameter is at fault when an ECU reports a problem.

SPN Structure

An SPN is a 19-bit value, giving the standard room for roughly 524,000 possible parameter identifiers far more than the number of PGNs, since a single PGN commonly carries several SPNs.

Unlike a PGN, an SPN isn't broken into sub-fields the way PGNs are split into DP/PF/PS it's simply a flat numeric identifier assigned by SAE, published alongside its definition:

Attribute Description
SPN number The unique numeric identifier (e.g., 190 for Engine Speed)
Parameter name Human-readable description of what's being measured
Data length How many bits/bytes the parameter occupies inside its PGN
Resolution The scaling factor applied to the raw bits
Range The valid engineering-unit range for the parameter
Operational range The range under normal operating conditions
Reference PGN Which PGN(s) the SPN is transmitted inside

SPN vs. PGN vs. FMI: How the Three Fit Together

These three identifiers get used together constantly, and mixing them up is one of the most common sources of confusion for anyone new to J1939 diagnostics.

Aspect PGN SPN FMI
Full name Parameter Group Number Suspect Parameter Number Failure Mode Identifier
What it identifies A message (group of parameters) A single data parameter The type of failure on that parameter
Bit width 18 bits 19 bits 5 bits
Answers the question "What message is this?" "What parameter is this?" "What's wrong with it?"
Example 61444 (EEC1) 190 (Engine Speed) 3 (Voltage Above Normal)
Defined in J1939-71, J1939-73 J1939-71, J1939-73 J1939-73

A diagnostic trouble code is essentially the combination of these: SPN + FMI tells you which parameter failed and how it failed, while the DTC is transported inside a diagnostic PGN like DM1 (65226) or DM2 (65227).

Worked Example: SPN + FMI Inside a DM1 Message

Say a scan tool reports a fault of SPN 102, FMI 3. Decoded:

  • SPN 102 Boost Pressure (turbocharger intake manifold pressure sensor)
  • FMI 3 Voltage Above Normal, or Shorted to High Source

Put together, this reads as: "The boost pressure sensor circuit voltage is reading higher than expected — check for a short to power or a failing sensor.

This SPN/FMI pair is carried inside PGN 65226 (DM1 – Active Diagnostic Trouble Codes), along with an Occurrence Count (OC) tracking how many times the fault has been detected, and a lamp status section indicating whether the malfunction indicator lamp (MIL) or other warning lamps should be illuminated.

Common J1939 SPNs Reference List

Below are some of the most frequently referenced SPNs across engine, vehicle, and diagnostic functions. Always confirm exact scaling and byte position against the current SAE J1939-71/73 revision or your ECU's own J1939 database (DBC) before using these in production decoding logic.

SPN Parameter Name Typical Unit Carried In (PGN)
190 Engine Speed rpm 61444 (EEC1)
512 Driver's Demand Engine – Percent Torque % 61444 (EEC1)
513 Actual Engine – Percent Torque % 61444 (EEC1)
91 Accelerator Pedal Position 1 % 61443 (EEC2)
84 Wheel-Based Vehicle Speed km/h 65265 (CCVS)
110 Engine Coolant Temperature °C 65262 (ET1)
175 Engine Oil Temperature 1 °C 65262 (ET1)
100 Engine Oil Pressure kPa 65263 (EFL/P1)
102 Engine Intake Manifold #1 Pressure (Boost) kPa 65270 (IC1)
105 Engine Intake Manifold 1 Temperature °C 65270 (IC1)
96 Fuel Level 1 % 65276
183 Engine Fuel Rate L/h 65266 (LFE)
247 Engine Total Hours of Operation hours 65253 (HOURS)
158 Battery Potential / Power Input 1 V 65271
168 Electrical Potential (Battery) V 65271

How FMI Values Are Structured

FMI is a 5-bit field (values 0-31) standardized in J1939-73, describing the nature of a fault rather than which parameter it affects. A handful of the most common FMI values:

FMI Meaning
0 Data Valid But Above Normal Operating Range – Most Severe
1 Data Valid But Below Normal Operating Range – Most Severe
2 Data Erratic, Intermittent, or Incorrect
3 Voltage Above Normal or Shorted to High Source
4 Voltage Below Normal or Shorted to Low Source
5 Current Below Normal or Open Circuit
7 Mechanical System Not Responding or Out of Adjustment
9 Abnormal Update Rate
13 Out of Calibration
31 Condition Exists

How to Decode an SPN From a Raw Bus Trace

  1. Identify the PGN the frame belongs to (see our companion guide,SAE J1939 PGN List Explained, for that process).
  2. Look up the PGN's parameter table in J1939-71 or -73 to see which SPNs live inside it and at what byte/bit offset.
  3. Extract the raw bits at that offset from the 8-byte data field.
  4. Apply the resolution and offset defined for that SPN to convert raw bits into engineering units (for example, Engine Speed uses a resolution of 0.125 rpm/bit with no offset).
  5. For diagnostic messages (DM1/DM2) the SPN is packed alongside FMI, Occurrence Count, and an SPN Conversion Method bit inside a 4-byte diagnostic trouble code structure these need to be unpacked together, since the SPN field itself is split across parts of three bytes.

In practice, this bit-level unpacking is exactly what a J1939 protocol stack or Diagnostic Event Manager module is built to automate — production code typically calls something like faults_post_active(SPN, FMI, OC) rather than manually shifting and masking bytes for every fault.

Frequently Asked Questions

What does SPN mean in J1939?

SPN stands for Suspect Parameter Number. It's a unique identifier assigned to a specific data parameter — like engine speed or coolant temperature — that can be transmitted normally as part of a PGN, or referenced in a diagnostic trouble code when that parameter is faulting.

What's the difference between SPN and PID?

PID (Parameter ID) is the OBD-II equivalent used in the 16-bit CAN protocol (ISO 15765/SAE J1979) for light-duty vehicles. SPN is the J1939 equivalent used in heavy-duty vehicle networks. They serve a similar conceptual purpose but come from different standards with different numbering and bit-width conventions.

How many bits is an SPN?

An SPN is a 19-bit value, giving the standard space for roughly 524,000 unique parameter identifiers, though the actual number of defined SPNs is far smaller and grows with each SAE revision.

Can one SPN appear in more than one PGN?

It's uncommon but possible some parameters are duplicated across related PGNs for legacy or redundancy reasons. As a rule, always confirm the SPN-to-PGN mapping against your specific ECU's J1939 database rather than assuming a single fixed relationship.

What does SPN 190 mean?

SPN 190 is Engine Speed, transmitted in rpm as part of PGN 61444 (Electronic Engine Controller 1) — one of the most frequently read parameters in J1939 telematics and diagnostic applications.

How is an SPN different from an FMI?

SPN identifies which parameter has a problem; FMI identifies what kind of problem it has. A full diagnostic trouble code needs both — SPN 102 (Boost Pressure) with FMI 3 (Voltage Above Normal) is a complete, actionable fault description, while either value alone is not.