I'm managing a legacy system (created by my predecessors) which uses CANBUS. In the system there are multiple nodes, which are run by the MC9S08DZ60 microcontroller each. There are of course separate isolator and transceiver. Every node is configured to have a piece of unique hardware information, lets call it CANMAC.
The way the system is designed is that when the system makes a "cold start", nodes try to agree on themselves who is the bus master. They send with the same CANID (001) to the bus their CANMAC and listen on the bus. The node with highest CANMAC gets elected to bus master.
When there are small amount of nodes, everything is kind of ok. At least the election stops and bus master starts its job.
But with larger number of nodes the elections keep on going for ever. Because some nodes have not seen some other nodes and their higher CANMACs.
This is what I get into logs (I have obfuscated it a bit):
14531ms 001: "Valid election candidate message with CANMAC, 7 bytes payload"
14532ms 001: "Valid election candidate message with CANMAC, 7 bytes payload"
14532ms 000: ??? 00 08 00 00
14532ms 000: ??? 00 08 00 00
14533ms 000: ??? 00 08 00 00
14533ms 000: ??? 00 08 00 00
14533ms 000: ??? 00 08 00 00
14534ms 000: ??? 00 08 00 00
14534ms 000: ??? 00 08 00 00
14534ms 000: ??? 00 08 00 00
14534ms 000: ??? 00 08 00 00
14535ms 000: ??? 00 08 00 00
14535ms 000: ??? 00 08 00 00
14535ms 000: ??? 00 08 00 00
14536ms 000: ??? 00 08 00 00
14536ms 000: ??? 00 08 00 00
14536ms 000: ??? 00 08 00 00
14537ms 000: ??? 00 08 00 00
14537ms 001: "Valid election candidate message with CANMAC, 7 bytes payload"
14538ms 001: "Valid election candidate message with CANMAC, 7 bytes payload"
Now what I ask is:
Is it possible that these messages senders, while sending with the same CANID 001 almost at the same time, are able to circumvent the CANBUS natural collision avoidance/arbitration by broadcasting concurrently and essentially overrun bits on the bus causing unknown messages to form to observer?