J1939 vs J1587: Understanding Heavy Truck Diagnostic Protocols
Published: 2026-06-28
If you've ever plugged a diagnostic scan tool into a truck and wondered why some codes show up as 'SPN 1569 FMI 31' and others as 'MID 128 PID 102 FMI 3', you're not alone. Heavy-duty trucks use two parallel diagnostic protocols, and understanding the difference is essential for accurate troubleshooting.
J1939 (SPN/FMI)
SAE J1939 is the modern standard, using CAN bus at 250 kbps. It organizes fault codes by Suspect Parameter Number (SPN) and Failure Mode Identifier (FMI). J1939 codes are standardized across all engine manufacturers — an SPN 100 FMI 1 means 'low oil pressure' whether it's on a Cummins, Detroit, or Volvo engine. J1939 is required on all trucks built after 2010.
J1587 (MID/PID/SID)
SAE J1587 is the legacy protocol, running on J1708 physical layer at 9600 bps. It organizes faults by Message Identifier (MID), Parameter Identifier (PID), and Subsystem Identifier (SID). J1587 is still present on many 1995–2015 trucks and remains useful for diagnosing body controller and instrument cluster issues that J1939 doesn't cover.
Why Both Matter
On trucks built between 2007–2015, both protocols run simultaneously. A J1939 code might tell you 'SPN 102 — Intake Manifold Pressure Low', but the corresponding J1587 PID 102 might provide additional freeze-frame data about the exact pressure and temperature at the moment of the fault. Skipping J1587 means losing valuable diagnostic context.
Related Fault Codes
MID 128 PID 102 FMI 3
🟠 CHECK SOON
MID 130 PID 52 FMI 5
MID 128 PID 111 FMI 4
🟠 CHECK SOON
MID 128 PSID 90 FMI 4
🟠 CHECK SOON