Application over 29-bit CAN
SAE J1939
Heavy-duty CAN application layer for trucks and buses.
Bitrate
250 / 500 kbit/s
Topology
CAN bus
Introduced
1994
Overview
J1939 standardizes Parameter Group Numbers (PGNs) and Suspect Parameter Numbers (SPNs) on top of 29-bit CAN. It is the backbone of trucks, agricultural and construction equipment.
Frame format
| Field | Bits | Description |
|---|---|---|
| Priority | 3 | Message priority (0 highest) |
| PGN | 18 | Parameter Group Number |
| Source Addr | 8 | Source ECU address |
| Data | 0–64 | PGN-specific payload |
Byte structure — request & response
SAE J1939 (over 29-bit CAN)
Frame template
[Priority:3b][R:1b][DP:1b][PF:8b][PS:8b][SA:8b] = 29-bit CAN ID + [Data:0–8B]Request
| Off | Size | Field | Value | Description |
|---|---|---|---|---|
| 0 | 3 bit | Priority | 0b110 (6) | 0 = highest, 7 = lowest. |
| — | 1 bit | Reserved | 0 | Reserved bit. |
| — | 1 bit | Data Page | 0 | Selects PGN page 0/1. |
| — | 8 bit | PDU Format (PF) | 0xEA | 0xEA = PGN 59904 Request. |
| — | 8 bit | PDU Specific (PS) | 0x00 | Destination address (0x00 = engine ECU). |
| — | 8 bit | Source Addr | 0xF9 | Tester source address. |
| 0–2 | 3 B | Requested PGN | 00 EE 00 | Little-endian PGN being requested (0x00EE00 = Address Claim). |
Response
| Off | Size | Field | Value | Description |
|---|---|---|---|---|
| 0 | 3 bit | Priority | 0b110 | Same priority class. |
| — | 8 bit | PF | 0xEE | 0xEE → response PGN 60928 Address Claim. |
| — | 8 bit | PS | 0xFF | Broadcast. |
| — | 8 bit | SA | 0x00 | Engine ECU source. |
| 0–7 | 8 B | Data | 00 00 40 7D 00 00 00 00 | Address-claim NAME field. |
J1939 frames always use the 29-bit CAN ID. The 'Request' PGN (59904) lets nodes ask any other node for any PGN.
Use cases
- · Trucks
- · Buses
- · Agricultural machinery
- · Marine
Pros
- Standardized PGN/SPN catalog
- Plug-and-play across vendors
Cons
- Inherits CAN bandwidth limits
Request / Response examples
Engine speed PGN 61444 (0xF004)
Request
ID:0x0CF00400Data:FFFFFF007D00FFFF
Response
(broadcast)
Bytes 3–4 = 0x007D = 125 → 1000 RPM (factor 0.125).