SAE J1939 Programming with Arduino - Sending and Receiving Messages
This post is part of a series about SAE J1939 ECU Programming & Vehicle Bus Simulation with Arduino.
Proving the capability of the most basic task of sending and receiving regular 8-byte (CAN) messages must be seen as an unnecessary test, since that had already taken place in previous chapters.
Things change, however, with the transmission and reception of J1939 data frames with more than eight bytes.
Both sessions, BAM for messages broadcasting and RTS/CTS for peer-to-peer communication, are based on the exchange of multiple data packages and they require exact timing controls. In other words, both protocol functions come with a number of timeouts that need to be observed.
Note: The SAE J1939/21 Standard requires that an ECU supports one BAM and one RTS/CTS session simultaneously, and the ARD1939 protocol stack fulfills that requirement.
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.