1

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.

Raxian
  • 17
  • 1
  • 5
  • 4
    Comparing J1939 vs CAN makes as much sense as comparing a car vs car tires. CAN is the physical and data link layers which J1939 runs on top of. You cannot have J1939 without CAN. And there is no such thing as point to point communication unless there are only 2 nodes present, because CAN doesn't work like that. So your question makes no sense. Start by studying CAN, bus arbitration and identifiers. Forget all about J1939 until you have grasped how the hardware works. – Lundin Sep 25 '20 at 10:43
  • I know J1939 is a higher level protocol. But as I have seen J1939 can send BAM messasge and also CM message. BAM is a broadcast one and CM is according to article is point to point communication. But maybe they meant BAM does not have handshaking where CM has handshaking in it. – Raxian Sep 25 '20 at 10:50
  • That's just how the higher layer protocol is defined. Everything in CAN revolves around message identifiers and which nodes that respond to which messages. Everything is sent to every single node. Only one message at a time can be sent. – Lundin Sep 25 '20 at 11:38
  • So that is nothing but setting the filters and masks of the CAN node so that only 1 specific node will respond. Other than that it is still a broadcasted message. – Raxian Sep 25 '20 at 11:44
  • Study CAN. Start here: https://www.can-cia.org/can-knowledge/ – Lundin Sep 25 '20 at 11:46

2 Answers2

1

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

  • This does not provide an answer to the question. Once you have sufficient [reputation](https://stackoverflow.com/help/whats-reputation) you will be able to [comment on any post](https://stackoverflow.com/help/privileges/comment); instead, [provide answers that don't require clarification from the asker](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i-do-instead). - [From Review](/review/late-answers/30586998) – MD. RAKIB HASAN Dec 15 '21 at 10:47
  • I do not agree with you, but ok I will just comment then – alejandro mendoza Dec 17 '21 at 15:57
0

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.

vromanov
  • 881
  • 6
  • 11