Complete Guide
J1939: Understanding Engine Data on Heavy Trucks
SAE J1939 guide for fleet managers: Deutsch connector, CAN High and CAN Low, PGN, SPN, FMI and the engine data you can actually read on a truck.
12 min read
What is SAE J1939?
SAE J1939 is a family of standards describing how the control units in a heavy vehicle talk to each other. The engine, transmission, braking system, dashboard and aftertreatment modules exchange messages continuously on a shared network.
That network runs on the CAN bus (Controller Area Network) with 29-bit extended identifiers. The historic speed is 250 kbit/s; the J1939-14 revision introduces 500 kbit/s, and many recent vehicles run at that speed.
The distinction that matters to a fleet manager: J1939 is not a diagnostic port bolted onto the vehicle for emissions testing. It is the vehicle's nervous system. When you connect to it, you are not querying a diagnostic module. You are listening to the ongoing conversation between control units.
That is why J1939 data is far richer, and far more frequent, than what a conventional diagnostic port exposes.
Which vehicles use J1939?
J1939 is widespread on high-output diesel vehicles and equipment:
• Road tractors and straight trucks
• Buses and coaches
• Excavators, loaders, graders, bulldozers
• Mining haul trucks
• Cranes, drilling rigs, compactors
• Generator sets and agricultural equipment
Here is the part most marketing content skips. The presence of J1939 tells you nothing about what the manufacturer chose to publish on the bus. Two trucks of the same weight class, from different makes, can expose different parameter sets.
Some older vehicles use J1708 / J1587, an earlier twisted-pair standard, often through a 6-pin Deutsch connector. You will also meet the FMS interface, a gateway standardised by European manufacturers that deliberately exposes a limited subset of data.
The practical rule: make, model and year determine what is readable. That check happens before hardware is purchased.
The 9-pin Deutsch connector
On a North American heavy vehicle, the usual connection point is a round 9-pin Deutsch connector, generally under the dash on the driver side.
Two variants are common:
• Type I, green body: 250 kbit/s bus
• Type II, black body: supports 250 and 500 kbit/s, and exposes a second CAN channel
Typical pin assignment:
A: battery ground
B: battery positive
C: CAN High (J1939)
D: CAN Low (J1939)
E: CAN shield
F: J1708 (+)
G: J1708 (-)
H: manufacturer / second CAN on Type II
J: manufacturer / second CAN on Type II
Older vehicles carry a 6-pin Deutsch connector, usually tied to J1708 / J1587 rather than J1939.
The detail that matters at install time: the physical connector does not guarantee the protocol. A black 9-pin connector indicates 500 kbit/s capability, not the presence of any particular parameter.
CAN High and CAN Low: how it works
The CAN bus carries information on two twisted wires, CAN High and CAN Low. The information is not carried by either wire's voltage, but by the difference between them.
At rest (recessive state), both lines sit near 2.5 V. In the dominant state, CAN High rises toward 3.5 V and CAN Low drops toward 1.5 V. That gap is what the control units read.
This differential behaviour is why CAN is robust inside a truck: electrical noise hits both wires equally and cancels out in the difference. It is also why the pair is twisted.
The bus is terminated by a 120 Ω resistor at each end. Measured between CAN High and CAN Low on a bus at rest, the equivalent resistance is therefore about 60 Ω. That is the first test a technician runs on a silent bus: a value far from 60 Ω points to a termination or wiring fault.
PGN, SPN and FMI: reading a J1939 message
Three acronyms come up constantly around J1939. They mean three different things.
PGN: Parameter Group Number
Identifies a group of parameters transmitted together in one message. PGN 61444 (EEC1) carries engine speed among others; PGN 65262 (ET1) carries engine temperatures.
SPN: Suspect Parameter Number
Identifies one specific parameter inside a group. Engine speed is SPN 190, coolant temperature is SPN 110.
FMI: Failure Mode Identifier
Describes the nature of a fault: value too high, value too low, open circuit, short circuit, erratic data, and so on.
A J1939 fault code therefore reads as a pair: SPN + FMI, along with an occurrence count. "SPN 110 / FMI 0" means an abnormally high coolant temperature, not a generic code like P0217.
That is a structural difference from OBD-II: where OBD-II hands you a five-character code, J1939 hands you the affected parameter and the failure mode separately.
What data can you read over J1939?
The parameters most useful in fleet management, with their usual PGN:
• Engine speed: PGN 61444 (EEC1)
• Wheel-based vehicle speed: PGN 65265 (CCVS)
• Coolant temperature: PGN 65262 (ET1)
• Instantaneous fuel rate and economy: PGN 65266 (LFE)
• Fuel level: PGN 65276 (DD)
• Total engine hours: PGN 65253 (HOURS)
• High-resolution total distance: PGN 65217 (VDHR)
• Active fault codes: PGN 65226 (DM1)
• Previously active fault codes: PGN 65227 (DM2)
Depending on the vehicle you may also get: engine load, accelerator pedal position, oil pressure, transmission temperature, PTO status, DEF level and aftertreatment parameters.
Two honest warnings.
First, a parameter listed in the standard is not a parameter guaranteed on your truck. The manufacturer decides what it broadcasts.
Second, resolution varies. J1939 fuel level is often transmitted in steps of 0.4 %, which is excellent for spotting a trend and not good enough to claim exactly eleven litres are missing.
How Tralogit uses J1939
The Tralogit device connects to the J1939 bus and listens to the messages broadcast by the vehicle's control units. Values are then normalised so that a Volvo truck and a Freightliner produce comparable metrics inside the same fleet.
In practice this feeds three uses:
Maintenance on engine hours
For a vehicle that covers little distance but runs for long periods, engine hours are a more reliable service trigger than mileage.
Fuel consumption tracking
Fuel rate and tank level make consumption comparable across vehicles, drivers and periods.
Fault code reporting
Active codes (DM1) reach the manager when they appear, not at the next shop visit.
One point worth stating plainly: J1939 reading is passive. Tralogit listens to the bus, commands no control unit and alters no vehicle parameter.
FAQ
Does an OBD device work on a heavy truck?
Not necessarily. A device built for a 16-pin OBD-II port has nothing to plug into on a truck fitted with a 9-pin Deutsch connector, and does not speak J1939. You need a J1939-capable device and the matching cable.
Where is the J1939 connector on a truck?
Most often under the dash on the driver side, near the steering column or the fuse panel. The exact location depends on the manufacturer and model.
What is the difference between J1939 and J1708?
J1708 is the earlier, slower standard, usually paired with the J1587 application protocol and a 6-pin Deutsch connector. J1939 runs on the CAN bus, carries far more data and has replaced it on recent vehicles. Some vehicles expose both.
Can reading J1939 damage the vehicle?
A properly implemented read is passive: the device listens to the bus without issuing commands. Where risk exists, it comes from incorrect wiring or unsuitable hardware. That is why compatibility and cabling are validated before installation.