What J1939 is
J1939 is a set of standards from SAE International that defines how the electronic controllers (ECUs) on heavy vehicles talk to each other over a CAN bus network. CAN moves the frames; J1939 says what the frames mean. It fixes the bit rate, how identifiers are built, how each piece of data is numbered and scaled, how devices claim addresses and how fault codes are reported, so an engine from one maker and a gearbox, dashboard or telematics box from another can share data without custom work.
It began with diesel trucks and buses in North America and is now the common language of commercial vehicles worldwide, including the lorries, coaches and plant on USA roads and sites. The same approach underpins ISOBUS (ISO 11783) on tractors and implements and NMEA 2000 on boats, and diesel engines carry J1939 into generators, pumps and rail vehicles.
For a vehicle computer, J1939 is where the vehicle’s own data lives: engine and road speed, fuel rate, temperatures, odometer and the active fault codes.
How J1939 works
J1939 uses CAN’s 29-bit extended identifier and packs three things into it. A three-bit priority decides which frame wins when two transmit at once. An 18-bit parameter group number (PGN) says what the frame contains. An eight-bit source address says which ECU sent it, with addresses 0 and 1 normally taken by the engines and 3 by the transmission.
Each PGN carries up to eight bytes holding one or more suspect parameter numbers (SPNs), and the standard gives each SPN a position, length, resolution and offset. Engine speed, for example, is SPN 190 inside PGN 61444 (Electronic Engine Controller 1), sent every few milliseconds with a resolution of 0.125 rpm per bit. Decoding J1939 is mostly a matter of looking up those definitions, which SAE publishes as the J1939 Digital Annex.
Most data is broadcast on a fixed schedule whether anyone is listening or not. Other values are sent only when requested. Messages longer than eight bytes, such as a list of fault codes or a vehicle identification number, are split by the transport protocol into up to 255 packets, which allows up to 1,785 bytes. When a device joins the network it announces the address it wants with an address claim, and conflicts are settled by a 64-bit name that every device carries.
-
//
J1939-11, -14 and -15. Physical layers: shielded twisted pair at 250 kbit/s (-11), unshielded at 250 kbit/s (-15) and the 500 kbit/s version (-14) used on newer vehicles.
-
//
J1939-13. The off-board diagnostic connector, a nine-pin round Deutsch connector in the cab.
-
//
J1939-21. The data link layer: identifier layout, requests and the transport protocol.
-
//
J1939-71. The vehicle application layer, where most PGNs and SPNs are defined.
-
//
J1939-73. Diagnostics, including the DM1 active fault code message.
-
//
J1939-81. Network management and address claiming.
-
//
J1939-22. A newer data link layer that carries J1939 over CAN FD with larger payloads.
J1939 vs CAN, OBD-II and CANopen
J1939 is often compared with the other names that appear on vehicle and machine datasheets. They sit at different layers or serve different vehicles.
| Feature | J1939 | Raw CAN | OBD-II | CANopen |
|---|---|---|---|---|
| What it is | Higher-layer protocol for heavy vehicles | Physical and data link layer only (ISO 11898) | Emissions diagnostics for light vehicles | Higher-layer protocol for machines and automation |
| Identifier | 29-bit, carrying PGN and source address | 11-bit or 29-bit, meaning set by each design | 11-bit or 29-bit over CAN since 2008 US models | 11-bit, carrying a function code and node ID |
| Typical bit rate | 250 or 500 kbit/s | Up to 1 Mbit/s, or more with CAN FD | 500 kbit/s on most cars | Up to 1 Mbit/s |
| Data definitions | Public, in J1939-71 and the Digital Annex | None | Standard parameter IDs (SAE J1979) | Object dictionary and device profiles |
| Connector | Nine-pin Deutsch (J1939-13) | Any | 16-pin J1962 under the dashboard | Often DB9 or M12 |
| Where you find it | Trucks, buses, tractors, plant, generators | Inside every CAN system | Petrol and light diesel cars and vans | Industrial machines, lifts, robots |
In short, CAN is the transport and J1939 is one of the languages spoken over it. A truck may expose J1939 at its diagnostic socket while a car exposes OBD-II, and some light commercial vehicles do both.
J1939 fault codes
When an ECU detects a fault it reports it in a DM1 message, broadcast about once a second while the fault is active. Each diagnostic trouble code carries the SPN that is affected, a failure mode identifier (FMI) from 0 to 31 that says what is wrong with it, and an occurrence count. A code read as “SPN 110 FMI 0”, for instance, means the engine coolant temperature is above its normal operating range at the most severe level.
DM1 also carries the state of the warning lamps, such as the malfunction indicator and the amber and red stop lamps, so a computer that reads DM1 can show the driver or the fleet office the same warnings the dashboard shows. Previously active codes are held in DM2, and other DM messages clear codes or read freeze-frame data.
Reading J1939 from an in-vehicle computer
A computer joins a J1939 network through a CAN port and software that understands the protocol. On Linux, SocketCAN includes a J1939 protocol stack, and most data loggers and telematics applications ship with J1939 decoding built in.
Several of our in-vehicle computers list two CAN 2.0B ports with J1939 support alongside their GNSS and ignition control, so they can log engine data and run the fleet application in one box. Where a computer has no CAN port, our CAN bus I/O modules include a USB adapter with two isolated CAN ports that runs SAE J1939 firmware.
On most modern trucks and buses in Europe the safer connection is the FMS interface, a gateway defined by the major truck makers that passes a filtered, read-only set of J1939 data to third-party equipment. It keeps aftermarket devices off the vehicle’s internal networks, which also protects the warranty. Connecting directly to the diagnostic socket is common for testing and on older vehicles, ideally in listen-only mode so the computer cannot disturb the bus.
Once the data is in the computer, it usually feeds fleet telematics: fuel and idling reports, driver behavior and maintenance planning from engine hours and fault codes.
Quick answers on J1939
J1939: common questions
What does J1939 stand for?
It is an SAE document number. SAE International numbers its standards, and J1939 is the series for serial control and communications on heavy-duty vehicles. The letters do not abbreviate anything.
What is a J1939 connector?
The nine-pin Deutsch diagnostic socket. Defined in J1939-13, it is usually under the dashboard. A black connector (type 1) suits 250 kbit/s; a green one (type 2) also supports 500 kbit/s.
What baud rate does J1939 use?
250 kbit/s on most vehicles. Newer vehicles built to J1939-14 run at 500 kbit/s, so a logger must match the network’s rate before it can read anything.
What is a PGN in J1939?
The parameter group number. It identifies the content of a message, such as engine temperatures or vehicle speed, and is carried inside the 29-bit CAN identifier.
Is J1939 used in cars?
Rarely. Cars and most light vans use OBD-II for diagnostics and their own CAN messages internally. J1939 is for trucks, buses and off-highway machines.
Does J1939 support CAN FD?
Yes, through J1939-22. It carries J1939 data in larger CAN FD frames, though most vehicles in service still run classical CAN.
We supply in-vehicle computers with CAN and J1939 interfaces as part of a complete system, and as standard we set the bit rate, the CAN drivers and the ignition behavior for your vehicles before the system ships.