What is SAE J1939?
The Society of Automotive Engineers (SAE) developed the J1939 standard to be the preferred CAN for equipment used in industries ranging from agriculture, construction, and fire/rescue to forestry, materials handling as well as on and off-highway vehicles. It is a high-level protocol that defines how communication between nodes (modules) occurs on the bus. The J1939 network is a specific communication system, supporting specific sets of applications and a specific industry, rather than being generalized.
What kinds of messages are sent on a J1939 network?
Any electronic control unit (ECU) using J1939 is permitted to transmit a message on the network when the bus is idle. Every message includes a 29-bit identifier, which defines the message priority, what data is contained within the 8-byte data array that follows the identifier, and which ECU sent the message.
What is a PGN?
A Parameter Group Number (PGN) is a part of the 29-bit identifier sent with every message. The PGN is a combination of the Reserved bit (always 0), the data page bit (currently only 0, 1 is reserved for future use), the PDU Format (PF) and PDU Specific (PS). PDU stands for Protocol Data Unit, and can also be read as the message format. The PF and PS are both a byte (8-bits) long.
The PS is dependent on the value in the PF field. If the PF value is between 0 and 239, the PS field will contain the destination address of the node that will receive the message. If the Global Address (FF16) is used, then all nodes on the bus will receive the message. This type of message, ” one that can be directed to a specific ECU on the bus by sending the message to its address “, is called a PDU1 message.
If the PF field is between 240 and 255, then the PS field will contain a Group Extension (GE). The GE provides a larger set of values to identify messages that are broadcasted to all nodes on the network. This type of message, ” one that is sent to all ECUs on the bus “, is called a PDU2 message.
The PGN uniquely identifies the Parameter Group (PG) that is being transmitted in the message. Each PG (a grouping of specific parameters) has a definition that includes the assignment of each parameter within the 8-byte data field (size in bytes, location of LSB), and the transmission rate and priority of the message. The structure of a PGN permits a total of up to 8672 different parameter groups to be defined per page.
When an ECU receives a message, it uses the PGN in the identifier to recognize the type of data that was sent in the message.
What is an SPN?
Each parameter used in the J1939 network is described by the standard. A Suspect Parameter Number (SPN) is a number that has been assigned by the SAE committee to a specific parameter. Each SPN has the following detailed information associated with it: data length (in bytes); data type; resolution, offset; range; and a tag (label) for reference. SPNs that share common characteristics will be grouped into a Parameter Group (PG) and will be transmitted to the network using the same PGN.
What happens if my ECU has parameters that have not been assigned an SPN by the SAE Committee?
The J1939 standard has two types of messages (PGNs) that can be used by manufacturers to handle parameters or messages that are not already covered by the standard.
The Proprietary A PGN (00EF0016) is a PDU1 message, and is used where the manufacture wants to direct the message to a specific destination node. How the data field of this message is used is up to each manufacturer.
Alternatively, Proprietary B PGNs (00FF0016 to 00FFFF16) are PDU2 messages allowing the manufacture to define the GE fields, as they desire. The data length and how the data fields of these messages are used are up to each manufacturer. Two manufacturers may use the same GE value, and the receivers of the information would have to differentiate between the two manufactures.
What happens if I have to send more than 8-bytes of data?
The J1939 standard has defined a method of communicating more than 8 bytes of data by sending the data in packets as specified in the Transport Protocol (TP). There are two types of TP, one for broadcasting the data, and the other for sending it to a specific address.
A Broadcast Announce Message (BAM) is received by all ECUs on the network, and they do not have to send any messages back to the originator in order for the BAM session to proceed. In a BAM session the transmitting module simply sends the data packets one after another at a predefined rate.
A specific TP, however, it directed at a particular address. The ECU at that address must respond to the commands sent by the transmitting module in order for the TP session to proceed. To begin a session, the originator sends a Request to Send (RTS) and the responder sends a Clear to Send (CTS). For this reason, this type of TP is called an RTS/CTS session. Either the originator or the responder can abort an RTS/CTS session at any time.
It is not mandatory for all J1939 ECUs to support TP sessions. If, however, the module does support TP, it must be able to, at a minimum, support one BAM and one RTS/CTS session concurrently from the same source address. It can only originate one destination specific connection with a given destination at a time, but an ECU might be able to support simultaneous CTS/RTS sessions with different addresses. Check with the manufacturer whether or not a node can support multiple simultaneous TP sessions (RTS/CTS and/or BAM).
How are diagnostics supported?
A Diagnostic Message (DM) may be sent and/or received by an ECU. If the ECU supports diagnostic messaging, each type of potential fault in the module will have associated with it a Diagnostic Trouble Code (DTC).
A DTC is a combination of four independent fields: the Suspect Parameter Number (SPN) of the channel or feature that can have faults; a Failure Mode Identifier (FMI) of the specific fault; the occurrence count (OC) of the SPN/FMI combination; and the SPN conversion method (CM) which tells the receiving mode how to interpret the SPN. Together, the SPN, FMI, OC and CM form a number that a diagnostic tool can use to understand the failure that is being reported.
When an ECU detects a fault, it will send an Active Diagnostic Trouble Code, DM1, message. The DM1 message send by the ECU will also contain the status lamps of the module. While the fault is still present, the ECU will continue to broadcast the DM1 message to the network every second. When the fault clears, the ECU will send a final DM1 message showing that there are no further faults present. If multiple faults are present simultaneously, the ECU will send all the active faults in a single DM1 by using the Broadcast Announce Message (BAM) in a Transport Protocol session. Refer to a product’s datasheet to see if it will send a DM1, and what type of DTCs it supports.
An ECU on the bus may respond to the data in the DM1, or a diagnostic tool may be connected to the network to show an operator all the active faults on the network. Refer to a product’s datasheet to see if and how it will respond to a DM1.
There are lots of other features for diagnostics, such as retrieval of information from a log by requesting a DM2, Previously Active DTCs, which are supported by the J1939 standard.
What is a NAME, and why is it important?
A J1939 NAME is comprised 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.
Every ECU on a J1939 network has an exclusive combination of the above fields, which results in a unique NAME for each module. The NAME is not only used to identify the module to other nodes on the bus, but it is also used in Network Management. The combination of the NAME field will form a number, and the lower numeric value NAMEs have a higher priority. If more than one node on the network attempt to claim the same address, they will arbitrate for the address, and the module with the higher priority NAME will be able to claim the address.