J1939 vs CANBus

6.1k Views Asked by At

I know the general differences between J1939 and CANBus. Such as the ID bit count. Also I know J1939 lets you to send more than 8 bytes which CANBus cannot do. J1939 also provides point to point communcation between 2 nodes. This feature confuses my mind. In what cases would we need a point to point communication between 2 nodes? And while other nodes are keep broadcasting, wouldn't these 2 nodes (making point to point communication) miss the broadcasted data? Also in which cases we should prefer to use J1939 over CANBus? Rather than the time we want to use 8 bytes in one frame.

2

There are 2 best solutions below

2
On

J1939 it is a protocol running ON CANBus, J1939 can not brake the rules of CAN basis. Regarding your point to point question, some of the J1939 PGN's require to establish a connection with another ECU in order to transfer data packages using a transport protocol session. Other scenario is when you need to request a message to another ECU and you don't want the data from another ECU on the network the reason could be that may be that specific message it's not been broadcasted periodically and you will get it only on request e.g requesting the engine hours, identification number, address claim. Related to the 8 bytes of payload, some of the PGN could contain more than 8 bytes of data and in order to transfer this bytes you use a transport protocol session which consist of several 8 byte messages with an specific format

0
On

There is no difference between CAN and J1939. J1939 build on top of CAN 2.0b. When some device sends a big message using the J1939 Transfer protocol (J1939.TP) using BAM other devices can accept this message or ignore it. But there is one important limitation - the device can send only one BAM message at a time. The device also can send only one message part in 50ms. So if the device sends 400 bytes this will require (400/7*50) ~ 2.9s. The device can't send any other BAM message during this time. If the device sends CM message it can send one message to ECU 1 and another long message to ECU 2. J1939 is mostly used in trucs and buses. If you create device for truck you must use j1939.