Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 addressingNAME-based address claiming (plug-and-play)
BAM + RTS/CTS transportExtended TP for megabyte object pools and files
diagnostic DM familyISOBUS diagnostics wrinkles (a sixth ID field, functionalities)
generic vehicle messagesthe 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/PDU2net::Identifier, net::PgnPGN request
J1939 diagnosticsj1939::diagnosticISO 11783-12 — diagnostics
Engine/powertrain messagesj1939 engine codecs, Powertrain pluginISO 11783-9 — the tractor ECU

See also