This post is part of a series about SAE J1939 ECU Programming & Vehicle Bus Simulation with Arduino.
One question that has been raised repeatedly is the one about SAE J1939 compliance. Officially, the SAE J1939-82 Standard describes the compliance tests and procedures to verify an SAE J1939 ECU will operate correctly on an SAE J1939 network.
Unfortunately, the SAE J1939 Standards Collection does not define at what level a device can truly be considered compliant.
There is an increasing number of SAE J1939 devices and software available in the market, but most of them fail to reveal their level of compliance with the SAE J1939 Standard.
Yet, others confuse with a list of supported J1939 standards in an attempt to separate them from the competition.
For that reason let’s have a look at the official SAE documents: The referenced standards (e.g. SAE J1939/21, SAE J1939/81, etc.) are part of the J1939 Standards Collection.
The “SAE Truck and Bus Control & Communications Network Standards Manual – 2007 Edition” is a colossal work of roughly 1600 pages where about 1000 pages refer to data such as Parameter Group Assignments, Address and Identify Assignments, Parameter Group Numbers, and more.
It was designed to follow the ISO/OSI 7-Layer Reference Model, where each layer is addressed by a corresponding document as demonstrated in the following image.
The SAE has named documents addressing the transport (4), session (5), and presentation (6) layer in the ISO/OSI 7-Layer Reference Model. These layers are, however, not documented (in all consequence they are not necessary for J1939) and thus the corresponding documents have not been created.
The SAE J1939/1x and SAE J1939/2x standards describe the physical layer (wiring) and the data link layer (CAN controller functions). In addition, the SAE J1939/21 standard describes the transport protocol (TP), which is responsible for the transport of messages with more than eight data bytes. The SAE J1939/81 standard describes the address claim process. In all truth (and I mentioned this earlier), that’s all a basic SAE J1939 application needs.
In other words, any SAE J1939 hardware must support SAE J1939/1x and SAE J1939/21, otherwise they’re useless, because these standards describe the CAN Bus physical layer and the basic protocol features. Any SAE J1939 software/firmware must support SAE J1939/81 (address claim process) and, if needed, SAE J1939/21 (transport of up to 1785 bytes per message).
Note: The implementation of the Transport Protocol (TP), i.e. the transport of up to 1785 data bytes in a message, is highly application-specific. Some ECUs and their control applications (CAs) will need it, some won’t.
Everything beyond SAE J1939/21 and SAE J1939/81 (e.g. SAE J1939/73 diagnostics, which belongs to the application layer) is cream on the cake but is not part of the actual protocol.
Some vendors in the J1939 business claim “compliance” with the SAE J1939/71 standard, which is a mere marketing hype. SAE J1939/71 describes the Parameter Group Numbers (PGNs), but while PGNs are being transmitted per J1939, they are, with a few exceptions, not features of the protocol. PGNs for protocol management such as transport protocol (TP) and address claim are defined in SAE J1939/21 and SAE J1939/81.
Caution is also advised in regards to an SAE J1939/81 (address claim procedure) compliance claim. Many devices in the marketplace will work only with one hard-coded node ID (which is still compliant with the standard). The problem starts, however, when that single address conflicts with an existing vehicle network where that particular address is already taken (I have worked with devices that didn’t care and continued sending data, even though their address conflicted with that of another device).
Note: The ARD1939 protocol stack, as introduced in a later chapter, supports the full SAE J1939/81 standard. It can negotiate a single address or an address range and removes itself from the bus in case of an address conflict. It also supports the full Transport Protocol (TP) according to SAE J1939/21.
SAE J1939 has become the accepted industry standard and the vehicle network technology of choice for off-highway machines in applications such as construction, material handling, and forestry machines. J1939 is a higher-layer protocol based on Controller Area Network (CAN). It provides serial data communications between microprocessor systems (also called Electronic Control Units - ECU) in any kind of heavy duty vehicles. The messages exchanged between these units can be data such as vehicle road speed, torque control message from the transmission to the engine, oil temperature, and many more.
A Comprehensible Guide to J1939 is the first work on J1939 besides the SAE J1939 standards collection. It provides profound information on the J1939 message format and network management combined with a high level of readability.