From eLinux.org
Jump to: navigation, search

SAE J1939 in Linux


See also on Wikipedia.

SAE J1939 defines a higher layer protocol on CAN. It implements a more sophisticated addressing scheme and extends the maximum packet size above 8 bytes. Several derived specifications exists, which differ from the original j1939 on the application level, like MilCAN, NMEA2000 and especially ISO-11783 (ISOBUS). This last one specifies the so-called ETP (Extended Transport Protocol) which is has been included in this implementation. This inclusion results in a maximum packet size of ((2^24)-1)*7 bytes


  • SAE J1939-21 : data link layer
  • SAE J1939-81 : network management
  • ISO 11783-6  : Virtual Terminal (Extended Transport Protocol)


SAE J1939 got in mainline kernel since v5.4

You will probably also want to use can-utils

Getting Started with J1939

The can-utils repository contains a good [1].