Bitwise Arbitration — How CAN Decides Who Transmits
The Core Mechanism
When multiple nodes start transmitting simultaneously, the bus resolves the collision non-destructively — the highest-priority message always wins, and no data is lost. The mechanism relies on one physical property: dominant (0) overwrites recessive (1) on the bus.
Step-by-Step Arbitration Example
Three ECUs start transmitting at the same moment:
- ECU A — Engine RPM: ID = 0x100 = 001 0000 0000
- ECU B — Wheel Speed: ID = 0x120 = 001 0010 0000
- ECU C — Throttle Position: ID = 0x110 = 001 0001 0000
| Bit Position | ECU A (0x100) | ECU B (0x120) | ECU C (0x110) | Bus State | Result |
|---|---|---|---|---|---|
| ID10 (MSB) | 0 | 0 | 0 | 0 (dominant) | All match, continue |
| ID9 | 0 | 0 | 0 | 0 (dominant) | All match, continue |
| ID8 | 1 | 1 | 1 | 1 (recessive) | All match, continue |
| ID7 | 0 | 0 | 0 | 0 (dominant) | All match, continue |
| ID6 | 0 | 0 | 0 | 0 (dominant) | All match, continue |
| ID5 | 0 | 1 | 0 | 0 (dominant) | ECU B loses (sent 1, read 0) |
| ID4 | 0 | — | 1 | 0 (dominant) | ECU C loses (sent 1, read 0) |
| ID3–ID0 | 0000 | — | — | 0000 | ECU A wins |
Key Concept: Lower numerical ID = higher priority. ID 0x000 is the highest possible priority; ID 0x7FF is the lowest. Safety-critical messages (ABS, airbag) get low IDs; comfort features get high IDs.
Why Arbitration is Non-Destructive
The losing nodes detect they lost because they read a different bit value than they transmitted. They immediately switch to receive mode and retry after the bus becomes idle. The winning node never knows arbitration occurred — its message is delivered intact.
Common Mistake: The arbitration field is the only part where simultaneous transmission is expected. Any bit conflict outside arbitration is an error, not arbitration.
Message Priority Design Guidelines
| Priority Range (11-bit) | Typical Assignment | Cycle Time |
|---|---|---|
| 0x000 – 0x0FF | Safety-critical: ABS, ESP, airbag | 5–20 ms |
| 0x100 – 0x2FF | Powertrain: engine RPM, throttle | 10–50 ms |
| 0x300 – 0x4FF | Chassis: suspension, parking brake | 20–100 ms |
| 0x500 – 0x6FF | Body: doors, windows, HVAC | 50–500 ms |
| 0x700 – 0x7FF | Diagnostics and network management | On-demand |
Exercise: Look at the communication matrix for a vehicle project you work on. List the 5 messages with the lowest IDs and the 5 with the highest. Do priorities match the safety hierarchy?