Back to Guides

J1939 Protocol Explained: The Complete Guide for Truck Technicians

PrimoDeTech Editorial3/30/2026 4 viewsProtocols & Standards

J1939 Protocol Explained: The Complete Guide for Truck Technicians

Semi trucks on the highway

The SAE J1939 protocol is the standard communication language used by heavy-duty trucks, buses, and off-highway equipment to exchange data between electronic control units (ECUs). Developed by the Society of Automotive Engineers (SAE), J1939 runs on a Controller Area Network (CAN) bus at 250 kbps and uses a structured system of Suspect Parameter Numbers (SPNs) and Failure Mode Identifiers (FMIs) to report fault codes. If you work on Class 6-8 trucks from manufacturers like Freightliner, Kenworth, Peterbilt, Volvo, or International, you interact with J1939 every time you plug in a diagnostic scanner. Unlike the OBD-II system found in passenger cars, J1939 was purpose-built for the complexity of commercial vehicles -- covering the engine, transmission, ABS, aftertreatment, body controller, and dozens of other networked modules. Understanding how this protocol works is essential for any truck mechanic or fleet technician who wants to diagnose problems faster, reduce downtime, and avoid unnecessary parts swaps.

This guide breaks down every aspect of J1939 in plain language: how messages are structured, what SPN and FMI codes mean, connector pinouts, baud rates, how it compares to OBD-II, and the practical steps for reading fault codes on the shop floor.


What Is the J1939 Protocol?

SAE J1939 is a set of standards that defines how electronic modules in heavy-duty vehicles communicate with each other over a shared wiring network. Think of it as the common language that lets the engine control module (ECM), transmission control unit (TCU), antilock braking system (ABS), instrument cluster, and aftertreatment system all talk to each other in real time.

J1939 was first published in the early 1990s and has been updated continuously. It is built on top of the CAN 2.0B protocol, which means it uses a two-wire differential bus (CAN High and CAN Low) with 29-bit extended identifiers.

Key characteristics of J1939

  • Physical layer: Twisted-pair shielded wiring (CAN_H and CAN_L)
  • Data rate: 250 kbps (standard), with some newer implementations supporting 500 kbps
  • Identifier length: 29-bit extended CAN identifiers
  • Max cable length: Up to 40 meters for the backbone
  • Termination: 120-ohm resistors at each end of the bus

Pro Tip: When you measure resistance across CAN_H and CAN_L with everything disconnected, you should see approximately 60 ohms (two 120-ohm resistors in parallel). If you read 120 ohms, you are missing a terminating resistor. If you read near 0 or infinity, you have a wiring problem.


How J1939 Messages Work

Truck front view

Every piece of information on a J1939 network is transmitted as a message (also called a frame). Each message contains a Parameter Group Number (PGN) that identifies what type of data it carries. Within each PGN, there are one or more Suspect Parameter Numbers (SPNs) -- these are the individual data points.

J1939 Message Structure

A J1939 message frame consists of these parts:

FieldSizeDescription
Priority3 bits0 (highest) to 7 (lowest); braking messages use priority 3, engine data typically uses 6
Reserved1 bitSet to 0
Data Page1 bitExtends the PGN range
PDU Format (PF)8 bitsDetermines if the message is broadcast or peer-to-peer
PDU Specific (PS)8 bitsDestination address (peer-to-peer) or Group Extension (broadcast)
Source Address8 bitsIdentifies which ECU sent the message
Data FieldUp to 8 bytesThe actual parameter values (SPNs)

Common PGNs You Will See on the Shop Floor

PGNNameKey SPNs IncludedTypical Broadcast Rate
61444 (0xF004)Electronic Engine Controller 1 (EEC1)Engine Speed (SPN 190), Driver Demand Torque (SPN 512)10-20 ms
65262 (0xFEEE)Engine Temperature 1 (ET1)Engine Coolant Temp (SPN 110), Fuel Temp (SPN 174)1000 ms
65263 (0xFEEF)Engine Fluid Level/Pressure 1 (EFL/P1)Oil Pressure (SPN 100), Coolant Level (SPN 111)500 ms
65265 (0xFEF1)Cruise Control/Vehicle Speed (CCVS)Vehicle Speed (SPN 84), Cruise Control (SPN 595)100 ms
65226 (0xFECA)Active Diagnostic Trouble Codes (DM1)All active fault codes on the sending module1000 ms
65227 (0xFECB)Previously Active DTCs (DM2)All stored/inactive fault codesOn request
65228 (0xFECC)Diagnostic Data Clear (DM3)Clears previously active DTCsOn request
65229 (0xFECD)Freeze Frame Parameters (DM4)Snapshot data at time of faultOn request

Pro Tip: PGN 65226 (DM1) is your best friend. Every ECU on the truck that has an active fault code will broadcast it on DM1 once per second. This is what your diagnostic scanner reads when it pulls active codes.


SPN and FMI: How J1939 Fault Codes Work

This is where J1939 differs most from passenger car diagnostics. Instead of a single five-character code like P0300, J1939 uses a combination of SPN (Suspect Parameter Number) and FMI (Failure Mode Identifier) to describe exactly what failed and how it failed.

What Is an SPN?

The SPN identifies which component or parameter has the problem. There are over 10,000 defined SPNs in the J1939 standard. Each one maps to a specific sensor, actuator, or data value.

What Is an FMI?

The FMI tells you how the parameter failed. There are 32 defined FMIs.

FMI Reference Table

FMIDescriptionWhat It Means in Practice
0Data valid but above normal operating range (most severe)Sensor reading dangerously high
1Data valid but below normal operating range (most severe)Sensor reading dangerously low
2Data erratic, intermittent, or incorrectSignal jumping around, possible loose connection
3Voltage above normal or shorted to high sourceWiring short to power
4Voltage below normal or shorted to low sourceWiring short to ground
5Current below normal or open circuitBroken wire or disconnected sensor
6Current above normal or grounded circuitWiring shorted to ground (current path)
7Mechanical system not responding or out of adjustmentPhysical/mechanical failure
8Abnormal frequency, pulse width, or periodSignal timing is wrong
9Abnormal update rateCAN messages not arriving on schedule
10Abnormal rate of changeValue changing too fast to be real
11Root cause not knownGeneral failure, needs further diagnosis
12Bad intelligent device or componentECU internal failure
13Out of calibrationNeeds recalibration
14Special instructionsManufacturer-specific, check OEM documentation
15Data valid but above normal operating range (least severe)Slightly high but not critical
16Data valid but above normal operating range (moderate)Moderately high
17Data valid but below normal operating range (least severe)Slightly low but not critical
18Data valid but below normal operating range (moderate)Moderately low
31Condition existsGeneral status indicator, not necessarily a hard failure

Real-World Example

Say your scanner shows: SPN 110 - FMI 4

  • SPN 110 = Engine Coolant Temperature Sensor
  • FMI 4 = Voltage below normal or shorted to low source

Diagnosis: The coolant temp sensor circuit has a short to ground or the signal wire is broken. Check the connector at the sensor, look for chafed wires against the block, and measure voltage at the ECM harness connector.

Use our DTC Lookup Tool to quickly decode any SPN/FMI combination and get manufacturer-specific repair guidance.


J1939 Connector Pinout: 9-Pin vs 6-Pin

Trucks in parking area

Heavy-duty trucks use a 9-pin Deutsch connector (also called the J1939 diagnostic connector) rather than the 16-pin OBD-II port found in cars. Some older equipment and certain applications use a 6-pin Deutsch connector.

9-Pin Deutsch HD Connector (SAE J1939-13)

PinFunctionWire Color (Typical)
ABattery GroundBlack
BBattery Positive (+12V)Red
CCAN High (J1939+)Yellow
DCAN Low (J1939-)Green
ECAN Shield / GroundBare or Silver
FNot Used (Reserved)--
GJ1708 Data (+)White/Green
HJ1708 Data (-)White/Blue
JBattery Ground (Backup)Black

6-Pin Deutsch Connector (Common on Off-Highway)

PinFunction
ANot Used
BNot Used
CCAN High (J1939+)
DCAN Low (J1939-)
ECAN Shield
FBattery Ground

Warning: Never probe the diagnostic connector with a standard multimeter on a live bus without understanding what you are doing. Shorting CAN_H to ground or battery power can damage every ECU on the network. Always use a CAN-capable breakout box or a purpose-built diagnostic tool designed for J1939 networks.


J1939 vs OBD-II: A Detailed Comparison

One of the most common questions from technicians transitioning from automotive to heavy-duty work is how J1939 differs from OBD-II. The short answer: they are fundamentally different systems designed for different vehicles.

J1939 vs OBD-II Comparison Table

FeatureJ1939 (Heavy-Duty)OBD-II (Passenger Car)
Vehicle typesClass 6-8 trucks, buses, off-highwayCars, light trucks (up to Class 5)
Connector9-pin Deutsch16-pin OBD-II (SAE J1962)
CAN speed250 kbps (standard)500 kbps (typical)
Identifier length29-bit extended11-bit standard (CAN 2.0A) or 29-bit
Fault code formatSPN + FMI (e.g., SPN 110 FMI 4)5-character DTC (e.g., P0115)
Number of defined parameters10,000+ SPNs~1,500 PIDs
Multi-ECU supportNative -- dozens of ECUs per vehicleLimited, typically focused on powertrain
Transport protocolBAM and Connection Management for multi-packetISO 15765 (ISO-TP)
Mandated by law (US)EPA 2010+ for emissions-related dataCARB/EPA since 1996
Location of connectorTypically on dash left side or under dashWithin 2 feet of steering column
Typical scan toolHD diagnostic scannerGeneric OBD-II reader

Key Practical Differences

Fault code granularity. An OBD-II code like P0115 tells you "Engine Coolant Temperature Circuit Malfunction." The equivalent J1939 code -- SPN 110 FMI 11 -- tells you the same sensor has a problem, and the FMI narrows down the failure mode. In practice, the SPN/FMI system gives you more diagnostic direction before you even pick up a wrench.

Network complexity. A typical passenger car might have 10-15 modules on the CAN bus. A modern Class 8 truck can have 30 or more ECUs, all sharing the same J1939 backbone. This means more data, more potential fault sources, and more need for a good diagnostic tool that can filter and interpret the traffic.

Protocol layers. OBD-II is a request-response system -- your scanner asks the ECU a question, and the ECU responds. J1939 is primarily broadcast-based -- ECUs continuously broadcast their data on the bus, and other modules (including your scanner) simply listen. Some operations like clearing codes still use request-response, but the core architecture is different.


How to Read J1939 Fault Codes: Step by Step

Truck on bridge

Here is the practical process for pulling and interpreting J1939 fault codes on a heavy-duty truck.

What You Need

  1. A J1939-compatible diagnostic scanner -- This is not optional. Consumer OBD-II readers will not work on the 9-pin connector and cannot interpret J1939 messages. Browse our heavy-duty diagnostic tools for recommended options.
  2. 9-pin to 6-pin adapter -- If you work on mixed fleets or off-highway equipment.
  3. A laptop with diagnostic software (optional but recommended for advanced work) -- Software like Cummins INSITE, Detroit Diesel DDDL, or multi-brand platforms.
  4. The SPN/FMI reference material -- Use our DTC Lookup Tool or the SAE J1939 Digital Annex.

Step-by-Step Process

Step 1: Connect to the diagnostic port. Locate the 9-pin Deutsch connector. On most trucks, it is on the driver side of the dash, near the steering column, or on the lower left kick panel.

Step 2: Key on, engine off (KOEO). Turn the ignition to the "on" position without starting the engine. This powers up all ECUs and starts the J1939 network.

Step 3: Let your scanner read DM1 messages. Your scanner will listen for PGN 65226 (DM1) broadcasts from every ECU on the bus. Each module with an active fault will report its SPN/FMI combination.

Step 4: Record all active codes. A typical readout might look like this:

  • ECM: SPN 3226 FMI 0 -- Aftertreatment SCR Catalyst Conversion Efficiency (too high)
  • ACM: SPN 4094 FMI 18 -- DEF Tank Level (moderately low)
  • ABS: SPN 791 FMI 5 -- Wheel Speed Sensor, Steer Axle Left (open circuit)

Step 5: Check stored/inactive codes. Request DM2 (PGN 65227) to see previously active faults. These are codes that were active at some point but are no longer present. They provide crucial diagnostic history.

Step 6: Cross-reference each SPN/FMI. Look up each code in the DTC Lookup Tool or OEM service literature. The SPN tells you what is affected, the FMI tells you the failure mode, and the combination points you toward specific diagnostic steps.

Step 7: Repair and clear. After making the repair, use DM3 (PGN 65228) to clear stored codes. Active codes (DM1) will clear themselves automatically once the fault condition is no longer detected.

Pro Tip: Always check DM2 stored codes before clearing anything. If a truck has a recurring intermittent problem, the stored code history is your best evidence trail. Clearing codes before documenting them is one of the most common mistakes in heavy-duty diagnostics.


J1939 Baud Rate and Network Topology

The standard J1939 baud rate is 250 kbps (kilobits per second). This has been the default since the protocol was introduced and remains the standard for the main vehicle backbone.

However, modern trucks increasingly use multiple CAN buses at different speeds:

  • J1939 backbone: 250 kbps -- Engine, transmission, ABS, aftertreatment
  • Secondary CAN: 500 kbps -- Body controller, instrument cluster, telematics
  • J1939 FMS (Fleet Management Systems): 250 kbps -- A read-only gateway bus for telematics

The gateway module (often the body controller or a dedicated gateway ECU) bridges these networks, translating messages between buses running at different speeds. When diagnosing communication faults, always identify which bus the affected module lives on.


J1979-2: The Next-Generation Standard

Truck at sunset

Looking ahead, SAE J1979-2 is the next-generation diagnostic standard that the EPA and CARB are moving toward for heavy-duty vehicle emissions compliance. Expected to begin phased adoption around 2027, J1979-2 represents a significant evolution from the current approach.

What Is Changing with J1979-2?

  • Unified diagnostic services (UDS): J1979-2 is based on ISO 14229 (UDS), bringing heavy-duty diagnostics closer to the architecture already used in European trucks and modern passenger cars.
  • Expanded data capacity: Support for CAN FD (Flexible Data Rate) allows message payloads up to 64 bytes instead of the current 8-byte limit, enabling richer diagnostic data in fewer frames.
  • Standardized emissions diagnostics: More granular emissions monitoring parameters that go beyond what current J1939 DM messages provide.
  • Backward compatibility concerns: Vehicles will need to support both legacy J1939 and the new UDS-based services during the transition period.

What This Means for Technicians

In practical terms, you will need diagnostic tools that support both the traditional J1939 SPN/FMI system and the new J1979-2 UDS framework. The transition will not happen overnight -- expect a multi-year rollout where new trucks have both systems running in parallel.

The core J1939 network for real-time vehicle communication is not going away. J1979-2 primarily affects the diagnostic layer -- how your scanner talks to the truck for emissions testing and fault reporting.

Pro Tip: When purchasing new diagnostic equipment, verify that the manufacturer has committed to J1979-2 support via firmware updates. A tool that only supports legacy J1939 diagnostics may have a limited useful lifespan as the new standard rolls out. Check our latest diagnostic tools for future-ready options.


Frequently Asked Questions

What is the J1939 protocol used for?

J1939 is the communication standard used in heavy-duty trucks (Class 6-8), buses, and off-highway equipment. It allows electronic control units (ECUs) like the engine controller, transmission, ABS, and aftertreatment system to exchange data over a shared CAN bus network. It is also the protocol used for diagnostic fault code reporting in commercial vehicles.

Can I use an OBD-II scanner on a truck with J1939?

No. OBD-II scanners are designed for the 16-pin J1962 connector and use different communication protocols (ISO 15765, SAE J1850, etc.). Heavy-duty trucks use a 9-pin Deutsch connector and the J1939 protocol. You need a scanner specifically designed for heavy-duty vehicles to read J1939 fault codes.

What do SPN and FMI mean in J1939 fault codes?

SPN stands for Suspect Parameter Number, which identifies the specific component or parameter that has a problem (e.g., SPN 110 = Engine Coolant Temperature). FMI stands for Failure Mode Identifier, which describes how the parameter failed (e.g., FMI 4 = Voltage below normal or shorted to low source). Together, SPN + FMI give you a precise description of the fault. Use our DTC Lookup Tool to decode any SPN/FMI combination.

What is the difference between J1939 and J1708?

J1708/J1587 is the older communication standard that predates J1939. J1708 runs at 9600 baud (much slower), uses a single-wire RS-485 physical layer, and has a simpler message structure. J1939 replaced J1708 as the primary diagnostic and communication protocol starting in the early 2000s. However, many trucks still have J1708 wiring on pins G and H of the 9-pin diagnostic connector for backward compatibility.

What baud rate does J1939 use?

The standard J1939 baud rate is 250 kbps (kilobits per second). Some secondary vehicle networks run at 500 kbps, but the main J1939 backbone has used 250 kbps since the protocol was established. The upcoming CAN FD extensions will support higher data rates, but classic J1939 remains at 250 kbps.


Wrapping Up

The J1939 protocol is the foundation of everything electronic in modern heavy-duty trucks. Whether you are pulling active fault codes from a Cummins X15, troubleshooting a communication dropout on a Freightliner Cascadia, or checking aftertreatment parameters on a Paccar MX-13, you are working with J1939 data every single day.

Mastering the SPN/FMI system, understanding the message structure, and knowing your way around the 9-pin diagnostic connector will make you a faster, more accurate diagnostician. Pair that knowledge with the right diagnostic tools and a reliable fault code reference, and you will spend less time guessing and more time fixing.

As the industry transitions toward J1979-2 and CAN FD, the technicians who understand both the legacy and next-generation systems will be the most valuable people in the shop. Start building that knowledge now.


This guide is maintained by the PrimoDeTech technical team and updated regularly to reflect the latest SAE J1939 revisions and EPA requirements. Last updated: March 2026.

J1939protocolSPNFMIOBD-IIheavy-duty

Need Help Choosing?

Our product specialists can recommend the right diagnostic tool for your specific needs.