How do you calculate CAN bus load, and why should it be kept below 70-80%?
Bus load is the percentage of time the bus is occupied by frame transmissions. It is calculated by summing the bit-time of all frames transmitted in one second and dividing by the bus bit rate:
Bus Load = (Sum of all frame lengths in bits per second) / (Bus bit rate) x 100%
For a standard CAN 2.0A frame with 8 data bytes, the nominal frame length is 111 bits (SOF + 11-bit ID + RTR + IDE + r0 + 4-bit DLC + 64 data bits + 15-bit CRC + CRC delim + ACK + ACK delim + 7-bit EOF). With worst-case bit stuffing (one stuff bit per 5 data bits in the stuffable region), the maximum frame length grows to approximately 130 bits. Add the 3-bit inter-frame space, and each frame occupies roughly 133 bit times.
Example: On a 500 kbit/s bus, a single message sent at 100 Hz occupies 133 bits x 100 / 500000 = 2.66% of bus bandwidth. A typical automotive body network with 30 messages at various rates might total 40-50% bus load.
Why keep it below 70-80%: CAN's arbitration mechanism works perfectly under any load, but high bus load has practical consequences. (1) Worst-case latency increases — a low-priority message may be delayed by multiple arbitration losses. At 90% load, a low-priority message might wait 10+ frame times before winning arbitration. For real-time systems, this latency must be bounded and budgeted. (2) Error recovery consumes bandwidth — a corrupted frame is retransmitted, temporarily adding to the load. At 90% load, one retransmission can push the bus into transient overload, cascading delays. (3) Oscillator tolerance — production CAN nodes have clock frequency variations (typically +/-0.5%). High bus load reduces the timing margin available to absorb these variations without errors.
Industry guidelines: automotive networks typically target 30-50% for safety-critical buses and 50-70% for body/comfort networks. CiA (CAN in Automation) recommends a maximum of 70% for industrial networks.
Source: CAN Q&A
