SAE J1939 is a high-level protocol that defines how communication between nodes or electronic control units and diagnostics occur on a vehicle bus. It was originally developed by the Society of Automotive Engineers (SAE) in the US for car and heavy duty truck applications. Currently the J1939 standard is used worldwide by on and off highway heavy duty truck and machinery companies. J1939 is commonly used for communications throughout a vehicle or machine.

Companies that use J1939 include:

VOLVO trucks http://www.volvo.com/trucks/global/en-gb/home.htm
MACK http://www.macktrucks.com
John Deere http://www.deere.com
Caterpillar http://www.cat.com/
Detroit Diesel http://www.detroitdiesel.com/
Nissan Diesel http://www.nissandiesel.co.th/
Kubota http://www.kubota.com
Freightliner http://www.freightlinertrucks.com/
DongFeng http://www.dfmc.com.cn/main_en.aspx
SinoTruck http://www.sinotruck.com/
Daimler Trucks http://www.daimler-trucksnorthamerica.com/
Navistar http://www.navistar.com
Chery Auto http://www.cheryinternational.com/
SAIC MOTOR http://www.saicmotor.com/english/index.shtml
China National Heavy Duty Truck Group Corp., Ltd


Dong Feng Motor http://www.dfmc.com.cn/index_en.aspx
King Long http://www.king-long.com.cn/en/
Shannxi AutoMobile http://www.sxqc.com/english/company/company.asp

Since 2000, J1939 has been built on CAN, differentiating it from its predecessors, SAE J1708 and SAE J1587.

Message Transmission
Nearly all messages specified by J1939 are intended to be “broadcast” or sent to every node on the bus, regardless of whether each individual node can actually use the information. An advantage of this sort of communication is that is no need for request messages. Broadcasting messages also makes it easy to accommodate additional ECUs (with additional addresses) as they are added to the network.

In the event that a message must be sent to a specific device, that device’s address can be inserted into the message identifier.

Parameter Group Number (PGN)

J1939 packets, also called messages, contain 8 bytes of data along with a header. The header contains a PGN, short for Parameter Group Number. The PGN makes up part of the 29 bit identifier defined by CAN. Every message on the bus has an identifier that includes a PGN.

The PGN is used to identify the purpose of each message and its data. J1939 defines a standard set of PGNs for automotive, off-road, marine, and agricultural applications.

The PGN itself is an 18 bit value made by combining the values of the Extended Data Pagebit, the Data Page bit, the PDU format (PF), and the PDU Specific (PS).

PDU is short for Protocol Data Unit which simply means “message format”. Messages are either “PDU 1”, that is a message with a destination address, or “PDU 2”, a message that will be broadcast. Both the PF and the PS are 8 bits long.

PDU Format (PF) is a value that indicates if the message is to be broadcast or sent with a specific destination address. PDU Specific (PS) is variable and dependent on the PF field value. Depending on the PF value, the PS will either contain a specific destination address or a Group Extension.

The PGN indicates the Parameter Group (PG) that is being transmitted by each message. Each PG is specifically defined. The definition includes the assignment of each parameter in the 8 byte data field, the rate of transmission, and the message’s priority on the bus.

When a node receives a message, it checks the PGN to easily determine the type of data it contains.


The J1939 standard defines each parameter used in J1939 networks. SAE assigns a specific number to each defined parameter. This number is called the Suspect Parameter Number or SPN. Each SPN has a corresponding set of details that includes: data length in bytes; data type; resolution; offset; range; and a reference label or tag. SPNs that have the same details in common are grouped into Parameter Groups. When they are transmitted on the vehicle network, they will be sent using the same PGN.

Defining New Parameters

As technology changes, it is logical to expect new parameters that have not had a SPN defined by SAE. J1939 is prepared to handle this situation. The standard includes two types of messages (PGNs) that can be used to handle new parameters as they develop. They are the Proprietary A PGN and the Proprietary B PGN.

Sending Large Amounts of Data Using Multi-Packet Messages

J1939 also includes a procedure for sending messages that contain more than the standard 8 bytes of data. The data is sent in multiple packets as described by the Transport Protocol (TP). J1939 includes two different methods of TP, Broadcast Announce Message and Connection Management. Broadcast Announce Message (TP_BAM) broadcasts the data to everyone on the bus. Connection Management (TP_CM) is used to send the data to a specific address. This method of TP is also referred to as a RTS/CTS session because it involves sending “Request to Send” (RTS) messages and “Clear to Send” (CTS) messages back and forth between the transmitting and receiving nodes.

Long Messages (Transport Layer)

The J1939 standard defines CAN as its physical layer and as such individual Frames or CAN Messages can be a maximum length of 8 bytes. For certain types of information, 8 bytes are not adequate to contain all the necessary data for a single J1939 message. Examples of this include transmitting a Vehicle Identification Number, or a series of Diagnostic Trouble Codes. To cover this need, J1939 defines a Transport Layer or protocol to enable multiple CAN messages to be combined into a single J1939 message with a maximum length of 1785 bytes. There are two main types of Long Messages, BAM (Broadcast Message) or Destination Specific (CTS/RTS). For BAM messages, the sender will simply transmit the entire J1939 message without waiting for a confirmation from the receiver. With Destination Specific messages, there is a CTS (clear to send) and RTS (request to send) sequence for transmission.

J1939 Diagnostics

ECU’s may send or receive Diagnostic Messages (DMs). If an ECU is capable of diagnostic messaging, each possible fault in the node will correspond with a Diagnostic Trouble Code (DTC).

Diagnostic functions and messages for obtaining diagnostic and calibration data are available in the J1939/73 document.

J1939 NAME

Each and every ECU on a J1939 network has a specific NAME. The NAME is 64 bits long and is determined by a unique combination of the following fields: Arbitrary Address Capable, Industry Group, Vehicle System Instance, Vehicle System, Reserved Bit, Function, Function instance, ECU Instance, Manufacturer Code, and Identity Number. The NAME gives each ECU a unique identity. Nodes on the network use the NAME to differentiate between each other. The NAME field is also essential to Network Management as it establishes node priority. The NAME translates to a number; the lowest numeric values have the highest priority when claiming addresses.

Multiple names and multiple addresses can coexist within one ECU.

Address Claiming

In J1939 all nodes or electronic control units on the vehicle network bus must claim a unique address to enable communication. For the most part, addresses are pre-assigned and in use immediately at the time of power up. In anticipation of future devices and functions, however, J1939 includes a method for dynamically assigning addresses. New devices must announce an address for themselves. This can be accomplished by two methods.

1) Sending an Address Claim message
By this method, the new (non-addressed) device sends out an Address Claim message indicating the address it would like to assume. All devices on the network compare this newly claimed address with their internal address tables. If the address is already in use by a device with a higher priority (determined by the NAME), the higher priority device indicates the conflict by sending out a Address Claim message.

2) Send a request to all nodes to report their claimed addresses
Alternately, a new (non-addressed) node can send out a Request for Address Claim. All devices on the network respond to this message by transmitting their addresses. The new node is then able to determine which addresses are currently in use, and send a message to claim an unused address.

Dynamic address support as described above is optional. Usually, only devices that are expected to have address conflicts support this functionality.

SAE Publications

Further information regarding J1939 can be found in several SAE publications. These publications are available from SAE, 400 Commonwealth Drive, Warrendale, PA 15096-0001. http://www.sae.org

SAE J1708—Serial Data Communications Between Microcomputer Systems in Heavy-Duty Vehicle Applications
SAE J1939—Recommended Practice for a Serial Control and Communications Vehicle Network
SAE J1939-11—Physical Layer—250K Bits/s, Shielded Twisted Pair
SAE J1939-13—Off-Board Diagnostic Connector
SAE J1939-15—Reduced Physical Layer, 250K Bits/s, Un-Shielded Twisted Pair (UTP)
SAE J1939-21—Data Link Layer
SAE J1939-31—Network Layer
SAE J1939-71—Vehicle Application Layer
SAE J1939-73—Application Layer - Diagnostics
SAE J1939-81—Network Management Protocol

J1939 & Vehicle Spy

Intrepid's Vehicle Spy software has many features designed for interacting with J1939 networks.

When monitoring messages in Vehicle Spy, Vehicle Spy users can view the PGN, SRC, PRIO, and DEST fields of the J1939 header along with all CAN message data. This information is organized in easy to read columns that can be customized based on user preference.

Vehicle Spy’s other J1939 specific features include an Address Manager, a Diagnostic Trouble Code Monitor / Simulator, and the ability to handle BAM and RTS/CTS long messages.

J1939 BAM and CTS/RTS Messages - Vehicle Spy enables you to transmit and receive J1939 transport layer messages with no scripting. (These are multi-packet messages longer than 8 bytes.) Simply setup a message in Vehicle Spy's built in Database Editor (DBC Editor) called the Messages Editor with the appropriate parameters.

Vehicle Spy also offers a user friendly message header setup with error checking.

The DTC Monitor / Simulator, you can view all active DM1 messages on the J1939 bus. It is also possible to simulate DTCs from multiple ECUs. Simply enter an ECU address and a list of SPNs for each ECU. Vehicle Spy takes care of all J1939 Transport messages (long messages) necessary for transmission.

The Address Manager enables you to view all claimed address on the J1939 bus. With this view you can also setup Vehicle Spy to claim its own address.


J1939 Tools

Learn about all J1939 Tools from Intrepid: Software Tools | Hardware Tools




Policy | Contact

© 2005-2016 Intrepid Control Systems, Inc. All rights reserved.

US Website China Website Japan Website Korea Website