SAE J1939 — the heritage
ISOBUS did not start from scratch. It took SAE J1939 — the heavy-duty vehicle network already proven on trucks and buses — and built farming on top. Understanding what came from J1939 (and what ISO 11783 added) explains a lot of otherwise-arbitrary detail, especially the shape of the identifier and the PDU1/PDU2 split that trips up newcomers.
What J1939 contributed
J1939 turns raw CAN bits into a disciplined messaging system:
- The 29-bit identifier layout — priority, parameter group, and source address.
- PGNs (Parameter Group Numbers) — every message is a named group of parameters.
- The transport protocol — multi-packet BAM and RTS/CTS (see Part 3).
- The diagnostic “DM” family — DM1 active faults, DM2 history, and the rest, which ISO 11783-12 reuses almost verbatim.
- Address-based addressing — which ISO 11783-5 then upgraded to NAME-based claiming.
The identifier, decoded
29-bit extended CAN identifier
┌────────┬─────┬───────────┬────────────────┐
│ prio │ EDP │ PF · PS │ source address │
│ 3 bits │ DP │ (the PGN) │ 8 bits │
└────────┴─────┴───────────┴────────────────┘
- Priority — lower wins arbitration (safety low, status high).
- PGN — the message identity, assembled from the PF (PDU format) and, sometimes, the PS byte.
- Source address — who sent it.
PDU1 vs PDU2 — the classic confusion
The single most error-prone J1939 detail, inherited directly by ISOBUS:
PF < 240 → PDU1 (point-to-point)
the PS byte IS the destination address
e.g. "send this to address 0x26"
PF ≥ 240 → PDU2 (broadcast)
the PS byte is part of the PGN itself
e.g. "wheel speed, to everyone"
Get this wrong and you produce a frame that looks valid but routes to the wrong place
— a destination-specific PGN sent as broadcast, or a broadcast PGN “addressed” to a
node. machbus’s net::Identifier encodes/decodes this correctly; the failure mode is
worth knowing because it shows up in hand-built frames.
What ISO 11783 added on top
| J1939 gave… | ISO 11783 added… |
|---|---|
| address-based addressing | NAME-based address claiming (plug-and-play) |
| BAM + RTS/CTS transport | Extended TP for megabyte object pools and files |
| diagnostic DM family | ISOBUS diagnostics wrinkles (a sixth ID field, functionalities) |
| generic vehicle messages | the farming services: VT, TC, FS, SC, implement control, TIM |
In short: J1939 is the grammar; ISO 11783 is the agricultural language written in it.
From concept to code
| You read about… | Build it with… | See… |
|---|---|---|
| Identifiers, PGNs, PDU1/PDU2 | net::Identifier, net::Pgn | PGN request |
| J1939 diagnostics | j1939::diagnostic | ISO 11783-12 — diagnostics |
| Engine/powertrain messages | j1939 engine codecs, Powertrain plugin | ISO 11783-9 — the tractor ECU |
See also
- The networking foundation — the overview of parts 1–5 on top of this heritage.
- ISO 11783-2 — physical layer — the CAN bus underneath.