networks//network protocols//CAN//CAN arbitration
CAN arbitration is the bitwise priority mechanism by which CAN resolves two nodes starting to transmit at the same instant, so that the bus never loses a frame to a collision. Both send their identifier bit by bit, a dominant bit wins over a recessive one (an electrical fact of the differential pair: dominant is driven, recessive is only let go), and the node that sees the bus differ from what it sent backs off. The frame with the highest priority (the lowest identifier) continues without being destroyed; the loser retries afterwards.
CAN arbitration is the bitwise priority mechanism by which CAN resolves two nodes starting to transmit at the same instant, so that the bus never loses a frame to a collision. Both send their identifier bit by bit, a dominant bit wins over a recessive one (an electrical fact of the differential pair: dominant is driven, recessive is only let go), and the node that sees the bus differ from what it sent backs off. The frame with the highest priority (the lowest identifier) continues without being destroyed; the loser retries afterwards.
No collision is wasted and no central arbiter exists: priority is a property of the message, decided on the wire, in the time of one identifier. That is why CAN behaves so well in real-time embedded systems with many nodes. Classic shared Ethernet works differently, since a collision there destroys both frames and both wait a random time, and so does a polled bus such as Modbus RTU, where the master decides who speaks by asking.
SOFID10ID9ID8ID7ID6ID5ID4ID3ID2ID1ID00x0A0 brake pressure0000101000000x0C0 engine speed0000110x2F0 dashboard001bus000010100000winner0x0A0 frame at 500 kbit/s222 µs retries for the winner0 0x0A0 (brake pressure) wins: it is the lowest identifier and never reads back a bit it did not send. 0x0C0 drops out at bit ID6, 0x2F0 drops out at bit ID9; they retry when the bus is idle again.