J1939 Next Level: J1939 on CAN FD
J1939-17 and J1939-22
In 2020–21, J1939-17 and J1939-22 were officially released, defining J1939 over CAN FD. This means that J1939 can now communicate using CAN FD frames, significantly improving transmission efficiency to meet the trend of electrification in future heavy-duty vehicles.

Feature
- Arbitration bitrate 500Kbps, Data bitrate 2Mbps.
- Although CAN FD is backward compatible with CAN 2.0, J1939-22 prohibits transmitting CAN 2.0 frames on the network and only allows CAN FD frames.
- The only exception that uses a CAN 2.0 frame is the Address Claim.
- One J1939 frame can contain multiple Parameter Groups.
Multi-PG
In CAN 2.0, a J1939 message is only sufficient to carry a single J1939 PG (Parameter Group), whereas in CAN FD, since the payload size is increased to 64 bytes, multiple PGs can be included in a single message. Each parameter group is referred to as a C-PG (Contained PG), and a frame composed in this way is called a Multi-PG Frame. C-PGs do not necessarily match the size of the CAN FD DLC. In such cases, padding must be added to align with the FD DLC size.
For details regarding FD DLC, please refer to the earlier article “In-Depth Analysis of the CAN FD Protocol – FD Frame”.
CAN FD Payload Example
| C-PG_1 | C-PG_2 | C-PG_3 | … | C-PG_n | Padding |
|---|---|---|---|---|---|
| Data | Data | Data | … | Data | Align |
Contained PG
In Classical J1939, the PGN is placed in the CAN-ID field, whereas in J1939 FD, it is placed in the C-PG Header, which in turn is carried within the FD Data Payload. Apart from the PGNs originally defined in Classical J1939, which remain unchanged, TOS (Type of Service) and TF (Trailer Format) have been added.
- If TOS = 0 → Padding
- If TOS = 1 or 2 → C-PG Payload
C-PG Header Structure
| TOS | Service | Header Length | Payload | TF | PGN |
|---|---|---|---|---|---|
| 3 bits | 3 bits | 18 bits | 8 bits | TF bits | PGN bits |
CAN-ID Field
Since the C-PG already contains the PGN, what is placed in the CAN-ID field? The fact is, the Multi-PG also has its own PGN, defined as 0x2500. Therefore, the CAN-ID field still follows the original format of Classical J1939.
29-bit CAN-ID
| Priority | EDP | DP | PF | PS | SA |
|---|---|---|---|---|---|
| 3 bits | 1 bit | 1 bit | 8 bits | 8 bits | 8 bits |
| 0x00 | 0x00 | 0x25 | DA | -- | -- |
Global Multi-PG – 11-bit CAN-ID
Classical J1939 does not use the 11-bit CAN ID format, but in J1939 FD there is a type of Multi-PG that does use an 11-bit CAN ID, namely the Global Multi-PG. The first three bits are called AppPI (Application Protocol Indicator). According to the definition in J1939-22, these three bits must be 0 for the frame to be recognized as a Multi-PG, while the remaining 8 bits represent the SA (Source Address).
11-bit CAN-ID
| AppPI | SA (Source Address) |
|---|---|
| 3 bits (000b) | 8 bits |
Articles
Technical Analysis
-
Understanding SocketCAN Linux Unified Interface for CAN Networks
-
Introduction to Convolutional Neural Networks (CNN)
-
Example of Convolution Operation
-
CNN Pooling Operation Example
-
J1939 Next Level: J1939 on CAN FD
-
SUNCAN J1939 Application – OBD Simulator Linux
-
In-Depth Analysis of the CAN FD Protocol FD Frame
-
Why CAN FD Matters: A Leap Beyond Classical CAN
J1939 Next Level: J1939 on CAN FD
J1939-17 and J1939-22
In 2020–21, J1939-17 and J1939-22 were officially released, defining J1939 over CAN FD. This means that J1939 can now communicate using CAN FD frames, significantly improving transmission efficiency to meet the trend of electrification in future heavy-duty vehicles.

Feature
- Arbitration bitrate 500Kbps, Data bitrate 2Mbps.
- Although CAN FD is backward compatible with CAN 2.0, J1939-22 prohibits transmitting CAN 2.0 frames on the network and only allows CAN FD frames.
- The only exception that uses a CAN 2.0 frame is the Address Claim.
- One J1939 frame can contain multiple Parameter Groups.
Multi-PG
In CAN 2.0, a J1939 message is only sufficient to carry a single J1939 PG (Parameter Group), whereas in CAN FD, since the payload size is increased to 64 bytes, multiple PGs can be included in a single message. Each parameter group is referred to as a C-PG (Contained PG), and a frame composed in this way is called a Multi-PG Frame. C-PGs do not necessarily match the size of the CAN FD DLC. In such cases, padding must be added to align with the FD DLC size.
For details regarding FD DLC, please refer to the earlier article “In-Depth Analysis of the CAN FD Protocol – FD Frame”.
CAN FD Payload Example
| C-PG_1 | C-PG_2 | C-PG_3 | … | C-PG_n | Padding |
|---|---|---|---|---|---|
| Data | Data | Data | … | Data | Align |
Contained PG
In Classical J1939, the PGN is placed in the CAN-ID field, whereas in J1939 FD, it is placed in the C-PG Header, which in turn is carried within the FD Data Payload. Apart from the PGNs originally defined in Classical J1939, which remain unchanged, TOS (Type of Service) and TF (Trailer Format) have been added.
- If TOS = 0 → Padding
- If TOS = 1 or 2 → C-PG Payload
C-PG Header Structure
| TOS | Service | Header Length | Payload | TF | PGN |
|---|---|---|---|---|---|
| 3 bits | 3 bits | 18 bits | 8 bits | TF bits | PGN bits |
CAN-ID Field
Since the C-PG already contains the PGN, what is placed in the CAN-ID field? The fact is, the Multi-PG also has its own PGN, defined as 0x2500. Therefore, the CAN-ID field still follows the original format of Classical J1939.
29-bit CAN-ID
| Priority | EDP | DP | PF | PS | SA |
|---|---|---|---|---|---|
| 3 bits | 1 bit | 1 bit | 8 bits | 8 bits | 8 bits |
| 0x00 | 0x00 | 0x25 | DA | -- | -- |
Global Multi-PG – 11-bit CAN-ID
Classical J1939 does not use the 11-bit CAN ID format, but in J1939 FD there is a type of Multi-PG that does use an 11-bit CAN ID, namely the Global Multi-PG. The first three bits are called AppPI (Application Protocol Indicator). According to the definition in J1939-22, these three bits must be 0 for the frame to be recognized as a Multi-PG, while the remaining 8 bits represent the SA (Source Address).
11-bit CAN-ID
| AppPI | SA (Source Address) |
|---|---|
| 3 bits (000b) | 8 bits |
Articles
Technical Analysis
-
Understanding SocketCAN Linux Unified Interface for CAN Networks
-
Introduction to Convolutional Neural Networks (CNN)
-
Example of Convolution Operation
-
CNN Pooling Operation Example
-
J1939 Next Level: J1939 on CAN FD
-
SUNCAN J1939 Application – OBD Simulator Linux
-
In-Depth Analysis of the CAN FD Protocol FD Frame
-
Why CAN FD Matters: A Leap Beyond Classical CAN
J1939 Next Level: J1939 on CAN FD
J1939-17 and J1939-22
In 2020–21, J1939-17 and J1939-22 were officially released, defining J1939 over CAN FD. This means that J1939 can now communicate using CAN FD frames, significantly improving transmission efficiency to meet the trend of electrification in future heavy-duty vehicles.

Feature
- Arbitration bitrate 500Kbps, Data bitrate 2Mbps.
- Although CAN FD is backward compatible with CAN 2.0, J1939-22 prohibits transmitting CAN 2.0 frames on the network and only allows CAN FD frames.
- The only exception that uses a CAN 2.0 frame is the Address Claim.
- One J1939 frame can contain multiple Parameter Groups.
Multi-PG
In CAN 2.0, a J1939 message is only sufficient to carry a single J1939 PG (Parameter Group), whereas in CAN FD, since the payload size is increased to 64 bytes, multiple PGs can be included in a single message. Each parameter group is referred to as a C-PG (Contained PG), and a frame composed in this way is called a Multi-PG Frame. C-PGs do not necessarily match the size of the CAN FD DLC. In such cases, padding must be added to align with the FD DLC size.
For details regarding FD DLC, please refer to the earlier article “In-Depth Analysis of the CAN FD Protocol – FD Frame”.
CAN FD Payload Example
| C-PG_1 | C-PG_2 | C-PG_3 | … | C-PG_n | Padding |
|---|---|---|---|---|---|
| Data | Data | Data | … | Data | Align |
Contained PG
In Classical J1939, the PGN is placed in the CAN-ID field, whereas in J1939 FD, it is placed in the C-PG Header, which in turn is carried within the FD Data Payload. Apart from the PGNs originally defined in Classical J1939, which remain unchanged, TOS (Type of Service) and TF (Trailer Format) have been added.
- If TOS = 0 → Padding
- If TOS = 1 or 2 → C-PG Payload
C-PG Header Structure
| TOS | Service | Header Length | Payload | TF | PGN |
|---|---|---|---|---|---|
| 3 bits | 3 bits | 18 bits | 8 bits | TF bits | PGN bits |
CAN-ID Field
Since the C-PG already contains the PGN, what is placed in the CAN-ID field? The fact is, the Multi-PG also has its own PGN, defined as 0x2500. Therefore, the CAN-ID field still follows the original format of Classical J1939.
29-bit CAN-ID
| Priority | EDP | DP | PF | PS | SA |
|---|---|---|---|---|---|
| 3 bits | 1 bit | 1 bit | 8 bits | 8 bits | 8 bits |
| 0x00 | 0x00 | 0x25 | DA | -- | -- |
Global Multi-PG – 11-bit CAN-ID
Classical J1939 does not use the 11-bit CAN ID format, but in J1939 FD there is a type of Multi-PG that does use an 11-bit CAN ID, namely the Global Multi-PG. The first three bits are called AppPI (Application Protocol Indicator). According to the definition in J1939-22, these three bits must be 0 for the frame to be recognized as a Multi-PG, while the remaining 8 bits represent the SA (Source Address).
11-bit CAN-ID
| AppPI | SA (Source Address) |
|---|---|
| 3 bits (000b) | 8 bits |
Articles
Technical Analysis
-
Understanding SocketCAN Linux Unified Interface for CAN Networks
-
Introduction to Convolutional Neural Networks (CNN)
-
Example of Convolution Operation
-
CNN Pooling Operation Example
-
J1939 Next Level: J1939 on CAN FD
-
SUNCAN J1939 Application – OBD Simulator Linux
-
In-Depth Analysis of the CAN FD Protocol FD Frame
-
Why CAN FD Matters: A Leap Beyond Classical CAN
J1939 Next Level: J1939 on CAN FD
J1939-17 and J1939-22
In 2020–21, J1939-17 and J1939-22 were officially released, defining J1939 over CAN FD. This means that J1939 can now communicate using CAN FD frames, significantly improving transmission efficiency to meet the trend of electrification in future heavy-duty vehicles.

Feature
- Arbitration bitrate 500Kbps, Data bitrate 2Mbps.
- Although CAN FD is backward compatible with CAN 2.0, J1939-22 prohibits transmitting CAN 2.0 frames on the network and only allows CAN FD frames.
- The only exception that uses a CAN 2.0 frame is the Address Claim.
- One J1939 frame can contain multiple Parameter Groups.
Multi-PG
In CAN 2.0, a J1939 message is only sufficient to carry a single J1939 PG (Parameter Group), whereas in CAN FD, since the payload size is increased to 64 bytes, multiple PGs can be included in a single message. Each parameter group is referred to as a C-PG (Contained PG), and a frame composed in this way is called a Multi-PG Frame. C-PGs do not necessarily match the size of the CAN FD DLC. In such cases, padding must be added to align with the FD DLC size.
For details regarding FD DLC, please refer to the earlier article “In-Depth Analysis of the CAN FD Protocol – FD Frame”.
CAN FD Payload Example
| C-PG_1 | C-PG_2 | C-PG_3 | … | C-PG_n | Padding |
|---|---|---|---|---|---|
| Data | Data | Data | … | Data | Align |
Contained PG
In Classical J1939, the PGN is placed in the CAN-ID field, whereas in J1939 FD, it is placed in the C-PG Header, which in turn is carried within the FD Data Payload. Apart from the PGNs originally defined in Classical J1939, which remain unchanged, TOS (Type of Service) and TF (Trailer Format) have been added.
- If TOS = 0 → Padding
- If TOS = 1 or 2 → C-PG Payload
C-PG Header Structure
| TOS | Service | Header Length | Payload | TF | PGN |
|---|---|---|---|---|---|
| 3 bits | 3 bits | 18 bits | 8 bits | TF bits | PGN bits |
CAN-ID Field
Since the C-PG already contains the PGN, what is placed in the CAN-ID field? The fact is, the Multi-PG also has its own PGN, defined as 0x2500. Therefore, the CAN-ID field still follows the original format of Classical J1939.
29-bit CAN-ID
| Priority | EDP | DP | PF | PS | SA |
|---|---|---|---|---|---|
| 3 bits | 1 bit | 1 bit | 8 bits | 8 bits | 8 bits |
| 0x00 | 0x00 | 0x25 | DA | -- | -- |
Global Multi-PG – 11-bit CAN-ID
Classical J1939 does not use the 11-bit CAN ID format, but in J1939 FD there is a type of Multi-PG that does use an 11-bit CAN ID, namely the Global Multi-PG. The first three bits are called AppPI (Application Protocol Indicator). According to the definition in J1939-22, these three bits must be 0 for the frame to be recognized as a Multi-PG, while the remaining 8 bits represent the SA (Source Address).
11-bit CAN-ID
| AppPI | SA (Source Address) |
|---|---|
| 3 bits (000b) | 8 bits |
Articles
Technical Analysis
-
Understanding SocketCAN Linux Unified Interface for CAN Networks
-
Introduction to Convolutional Neural Networks (CNN)
-
Example of Convolution Operation
-
CNN Pooling Operation Example
-
J1939 Next Level: J1939 on CAN FD
-
SUNCAN J1939 Application – OBD Simulator Linux
-
In-Depth Analysis of the CAN FD Protocol FD Frame
-
Why CAN FD Matters: A Leap Beyond Classical CAN


