SAE J1939 Message Format And Interpretation Of PGNs
It happens on a regular basis that I am contacted by a user of our SAE J1939 ECU Simulator Board With USB Port, complaining that our device does not display a PGN correctly or modifies the PGN before transmitting. The real problem here is a misinterpretation of the PGN and its purpose. For instance, a PGN between 61184 (0xEF00) and 61439 (0xEFFF) will always be displayed as 61184. The EF portion indicates a peer-to-peer message, where the second byte indicates the destination address. For instance, 0xEF20 sends data to node address 0x20 (32dec).
This is only one popular example. Consequently, a detailed knowledge of the PGN and its interpretation is essential when it comes to exploring and analyzing SAE J1939 data traffic. Studying the official SAE J1939 documentation (the SAE J1939 Standards Collection) is a good start, but makes for a dry reading. The following provides a quick overview, making it simpler to understand the standards. It is based on two components:
- Our book A Comprehensible Guide to J1939, available in print or PDF download.
- Our presentation SAE J1939 - Serial Control And Communications Vehicle Network.
SAE J1939 Message Format
The 18-Bit PGN is embedded in the CAN Bus data frame as part of the 29-bit message identifier. Out of the 18 bits, only 16 are used by the SAE J1939 Standard. To complicate things, the SAE J1939 Standard delves into acronyms and confusing descriptions. For instance, a PF between 0 and 239 indicates a destination address in PS, where a PF between 240 and 255 indicates an extension to the PDU format... There was a reason to write a comprehensible guide.
Let's describe the PGN Range in normal engineering terms:
As shown above, there are PGN ranges assigned by the SAE (Society of Automotive Engineers) and those assigned by manufacturers (meaning these PGNs are available for users). The most important range for engineers is 0xF000 (61440) and 0xFEFF (65279), because this is the range containing the PGNs as defined by SAE J1939/71, i.e. the PGNs containing vehicle data.
The SAE J1939/71 Standard also describes SPN (Suspect Parameter Numbers), which are NOT part of an SAE J1939 data frame. SPNs are mere documentation features.
In the above example, I refer to PGN 65262 - Engine Temperature. In this case, the SPNs describe the use of the data field for parameters such as Engine Coolant Temperature, Fuel Temperature, and more.
As I mentioned previously, the SAE J1939/71 Standard contains descriptions of all PGNs and SPNs. The following image gives you an example based on PGN 65262:
SAE J1939 Starter Kit And Network Simulator
Our JCOM.J1939 Starter Kit And Network Simulator is designed to allow the experienced engineer as well as the beginner to experiment with SAE J1939 data communication without the need of connecting to a real-world J1939 network, i.e. a diesel engine. It may sound obvious, but in order to establish a network, you need at least two nodes, and that fact applies especially to CAN/J1939 where the CAN controller will basically shut down after transmitting data without receiving a response. For that reason, our jCOM.J1939 Starter Kit And Network Simulator consists of two J1939 nodes, namely our jCOM.J1939.USB, an SAE J1939 ECU Simulator Board With USB Port.
The jCOM.J1939.USB gateway board is a high-performance, low-latency vehicle network adapter for SAE J1939 applications. The board supports the full SAE J1939 protocol according to J1939/81 Network Management (Address Claiming) and J1939/21 Transport Protocol (TP).