Free J1939 PGN Decoder
Paste J1939 frames to see each parameter group, its SPN values with units, and any active fault codes.
What is a J1939 PGN Decoder?
SAE J1939 is the CAN protocol spoken by trucks, buses, tractors, construction machines and generators. Every frame carries a parameter group (PGN), and every PGN packs suspect parameters (SPNs) such as engine speed and coolant temperature. This decoder reads those frames without a DBC.
It splits each 29-bit identifier into priority, PGN, source and destination, then decodes common J1939-71 parameter groups into SPN values with units. DM1 and DM2 fault messages become lamp states and SPN/FMI codes, and requests, address claims and transport protocol frames are explained too.
Key Features
Identifier Split
Priority, data page, PDU format and specific, PGN, source and destination address for every frame.
SPN Values With Units
Engine, temperature, pressure, speed, fuel and electrical parameter groups decoded per J1939-71.
Fault Codes Explained
DM1 and DM2 lamps plus each SPN, FMI meaning and occurrence count.
Network Management
Requests, address claims with the NAME fields, and BAM and RTS/CTS transport frames.
Logs Stay Private
Frames are decoded in your browser and never uploaded.
Perfect for everyone
- Fleet technicians
- Heavy-equipment and off-highway engineers
- Telematics developers and anyone reading truck CAN logs
How to Use the J1939 PGN Decoder
Paste the frames and pick what to see.
Capture Traffic
Log the bus with candump -l, or copy frames from your logger or adapter software.
Paste or Open the Log
Each line holds one frame, in cansend, candump or spaced-byte form.
Read SPN Values
SPN values names each parameter group and lists its values, faults and requests.
Check the Identifiers
Identifier fields breaks every 29-bit ID into its fields, useful when building filters.
J1939 Frames, Decoded
Each row is J1939 traffic as candump writes it, and each answer is this decoder’s output in the mode on the chip. Try reading the PGN from the identifier before you reveal it.
“0CF00400#F07D7D2019000FFF”
“18FEEE00#6E4B602DFFFF52FF”
“18FEF100#FF0058FFFFFFFFFF”
“0CF00400#F07D7D2019000FFF 18EA00F9#E5FE00”
“18FECA00#04FF6E00030BFFFF”
“18FECA00#00FF00000000FFFF”
“18EA00F9#E5FE00”
“18EEFF00#3412A00000000090”
“18ECFF00#2014000300CAFE00 18EBFF00#0104FF6E00030BFF”
“100#F07D7D2019000FFF”
Inside the 29-Bit J1939 Identifier
J1939 packs addressing into the CAN identifier itself. These ten parts explain how 0CF00400 becomes a priority, a PGN and a source address.
Priority
The top three bits, 0 being the most urgent. Engine control messages usually run at 3, information at 6.
“What priority does 0CF00400 have?”
Extended Data Page
One reserved bit, zero in normal J1939 and set only by ISO 15765 and NMEA 2000 extensions.
“Is it usually set?”
Data Page
Selects between two pages of parameter groups, doubling the PGN space.
“How many pages are there?”
PDU Format (PF)
The byte after the data page. Values below 240 make a PDU1 message, 240 and above a PDU2 message.
“Which PF value starts PDU2?”
PDU Specific (PS)
In PDU2 it is part of the PGN. In PDU1 it is the destination address instead.
“What is PS in PDU1?”
Source Address
The bottom byte, the address of the controller that sent the frame.
“Who sent 0CF00400?”
PGN
Data page, PF and, for PDU2, PS together give the parameter group number.
“What PGN is 18FEEE00?”
PDU1 Destinations
A PDU1 message goes to one address, or to 255 for every node.
“What does destination 255 mean?”
PDU2 Broadcasts
PDU2 messages have no destination and are heard by everyone on the bus.
“Can PDU2 be addressed?”
Null Address
Address 254 is used by a node that failed to claim an address.
“Which address means none?”
Parameter Groups You Will See Most
A running engine broadcasts a handful of parameter groups many times a second. These are the ones this decoder knows by heart, and what each one carries.
EEC1, PGN 61444
Engine speed, torque mode and percent torque, sent every 10 to 20 milliseconds while the engine runs.
ET1, PGN 65262
Coolant, fuel, oil and turbo oil temperatures, plus intercooler temperature, once a second.
EFL/P1, PGN 65263
Oil pressure and level, coolant pressure and level, fuel delivery and crankcase pressure.
CCVS, PGN 65265
Wheel-based vehicle speed, along with cruise control switch states this decoder doesn’t list.
LFE and LFC
Fuel rate and economy in PGN 65266, and lifetime and trip fuel used in PGN 65257.
HOURS, PGN 65253
Total engine hours and revolutions, usually sent only when requested by a service tool.
VEP1 and AMB
Battery and charging voltages in PGN 65271, ambient, cab and inlet air temperatures in PGN 65269.
Reading DM1 Fault Codes
DM1 is how a J1939 controller reports what is wrong right now. Each fault is an SPN that says which parameter failed and an FMI that says how it failed, alongside the lamps the driver sees on the dashboard.
The Lamp Byte
The first byte holds four 2-bit lamp states: malfunction, red stop, amber warning and protect, in that order.
SPN
The 19-bit suspect parameter number names the failing value, such as SPN 110 for coolant temperature.
FMI
The failure mode identifier, 0 to 31, says whether the value is too high, too low, shorted, open or erratic.
Occurrence Count
How many times the fault has gone from inactive to active, up to 126.
Conversion Method
This decoder uses method 4, the only one allowed since 1996. Very old controllers used other bit orders.
Several Faults
Two or more faults don’t fit one frame, so DM1 arrives as a BAM transfer of several TP.DT packets.
DM2 for History
DM2, PGN 65227, has the same layout and lists faults that were active before but have cleared.
When to Decode J1939 Frames
Whenever a heavy vehicle’s bus needs reading without a full diagnostic suite.
Fleet Diagnostics
Decode a DM1 from a truck’s logger to see which fault lit the amber lamp.
Telematics Development
Check that your device reads engine hours, fuel used and speed from the right PGNs.
Off-Highway Machines
Read tractors, excavators and generators that share J1939 parameter groups.
Filter Building
Work out the identifier and mask for a PGN before configuring a CAN filter.
Learning J1939
See how one identifier encodes priority, PGN and addresses with real frames.
J1939 Pitfalls
Things that trip people up when reading J1939 traffic.
Source Address in the PGN
The source byte isn’t part of the PGN, so 18FEEE00 and 18FEEE03 are the same group from two senders.
PDU1 Destination
For PF below 240, the PS byte is a destination, so 18EA00F9 is PGN 59904 sent to address 0.
FF Means Missing
Bytes of FF are not available, and FE is an error indicator. They aren’t real readings.
Little-Endian Values
Multi-byte SPNs are little-endian, so 20 19 for engine speed is 0x1920.
Proprietary PGNs
PGNs 61184 and 65280 to 65535 are manufacturer-specific and need the OEM’s documentation.
Dynamic Addresses
Addresses can change after an address claim, so identify nodes by NAME on a mixed bus.