Introduction to J1939
The standard for J1939 describes an industrial protocol based on CAN. It originated as a vehicle bus in the American car and heavy-duty truck industry but has since found use in other types of applications.
NMEA2000 is an extension to the base J1939, aimed specifically at marine applications. It contains all the standard J1939 specifics and additional marine specific messages. NMEA2000 devices and J1939 devices work on the same network.
To use the NMEA2000 name, a device must pass a certification process.
PGNs
In J1939 messages, data is marked by an identifier called a PGN (Parameter Group Name). The content of a specific PGN is always in a fixed form. Many different working groups have defined their own PGNs and these should be used if possible. However, manufacturer or application specific PGN definitions are possible, too.
It should be noted that contrary to CANopen, the J1939 standards do not describe any data handling or storing. Thus, it is up to the user application to define which data is sent or where it comes from; or where received data is stored and how it is handled.
Transport protocols
J1939 contains a transport layer for single frame messages which is used by default for all PGNs with 8 or less bytes of data. For longer messages the ISO 11783 multipacket protocol is used. NMEA2000 also defines the Fast Packet transport layer as an alternative. There are other transport protocol options in other standards building on J1939, but these are not included in the stack.
Regardless of transport protocol, the handling is similar: Data is written or read from an array, the stack handles the transport itself automatically.
Single Frame | Multi Packet | Fast Packet |
in ISO J1939 | In ISO J1939 | NMEA2000 |
8 byte | Up to 1785 bytes | Up to 233 byte |
|
| Faster than Multi Packet but no handshaking |
Transport protocol options
Address claim
Many J1939 devices do not use fixed nodeIDs to identify themselves on the network. Instead, they use an address claim mechanism:
When a device goes active on the network, it tries to claim a certain identity.
Other devices on the network may deny this claim.
I.e., when they have already claimed it themselves.
The devices will then increment its wanted ID and try again.
The same device may end up with a different ID, depending on which other devices are on the network and their boot order. It is up to the applications then, to make sure the correct data is communicated between devices.