What are comprehensive differences between J1939/Extended CAN vs. J1939/CAN FD?

Thread Starter


Joined Jan 4, 2017
How does messaging work in CAN FD? How are PGNs and SPNs defined for CAN FD?

For Extended CAN, SAE J1939-71 defines PGNs and SPNs. All the PGNs and SPNs defined in SAE J1939-71 don't apply to CAN FD? For example, in SAE J1939-71 PGN 65267 is Vehicle Position. There are two SPN's in this PGN. Each SPN is 4 bytes. This makes 8 byte data field. How to construct some message like Vehicle Position in CAN FD?

If some Electronic Control Unit (ECU) is communicating over J1939 with extended CAN, how to determine if this ECU needs capability of CAN FD?

SAE J1939-21, Transport layer protocol defines messages that have data field more than 8 bytes. Why not just use SAE J1939-21 to send large size messages? Is CAN FD faster?

Is data field size the only difference between CAN FD and extended CAN? Does 8 times larger data field makes CAN FD much faster than extended CAN?

What code changes are needed to update from J1939/extended CAN to J1939/CAN FD ? is different J1939 stack needed? Are different CAN drivers needed? If yes, please provide comparison of J1939 stack changes and CAN driver changes.

What are other significant differences between J1939/extended CAN and J1939/CAN FD ?
It has been a few years since I looked into this and don't have access to the information any more...

If I remember correctly there is no difference between extended and FD. It's all a matter of what is in the identifier. I have worked on vehicles with the earliest 1939 up to the latest versions and they all work on the same diagnostic equipment except that with the advent of emissions controls a lot of messages are now in the proprietary range of PGNs and SPNs which causes problems with older tools (the number of messages outgrew the original standard). Looking at the data stream on diagnostic tools shows mostly eight byte messages still to this day. Some manufacturers have moved away from the standards altogether and created their own internal network leaving the 1939 network to handle diagnostic duties and any aftermarket add-ons that need access to the vehicle information.
Another issue I ran in to is not all manufacturers use the same messages for the same thing. While they did follow the standard for the most part there is a lot of information that can be conveyed in different messages with different SPNs meaning the same thing.

While I believe there are people on here with an in depth knowledge of the subject, they are not very willing to say much. The 1939 standard is normally used on bigger vehicles that can cause catastrophic damage and many just don't want to be involved with someone "tinkering" with it along with the variations between manufacturers adds a lot of "I really don't know" to the whole thing.


Joined Feb 24, 2006
CAN frames can exist with data fields of 0 to 8 bytes only. This information is encoded in the data length code field. CAN receivers will throw an ERROR Frame if other values are used. The only possible way to accommodate a longer data field is to use a fragmentation protocol where long frames of data can be broken up into fragments of 8 bytes or less. I'm not sure if this even exists in the J1939 standard. It does in other networks that use CAN for a physical and data link layer.