Using CAN at higher bus loads has become an industrial requirement in many application domains. This is the case especially in the automotive where the 30% load threshold is now easily exceeded. The question is – what are the levers at our disposal to achieve that? This is a question we tried to answer with Hervé Perrault from PSA in a paper that was presented at the last CAN conference (ICC’2012). And here are our top 5 ways to optimize a CAN network:

  1. Keep the amount of data transmitted to a minimum, specifically limit the transmission frequency of the frames. This sounds obvious but this is not necessarily easy because it requires a rigorous identification and traceability of the temporal constraints, and thus it has impacts on the whole design flow.
  2. Desynchronize the stream of frames by using frame offsets: a nice performance boost for free, so really something to consider,
  3. Optimize the communication stacks so as to remove all departure from the ideal CAN behavior: e.g. a single FIFO waiting queue might degrade the temporal behavior of the whole CAN cluster, so “clean” communication stacks is something to look for if one wants to go above 50%,
  4. Reassign the priorities of the frames, so that the priority order better reflects the timing constraints, and Deadline-Monotonic (“the smaller the deadline, the higher the priority”) is a good starting point here.
  5. Re-consider the frame-packing (i.e., allocation of the signals to the frames and choice of the frame periods, so as to minimize the bandwidth usage while meeting timing constraints): not a huge gain to expect, but anyway a few additional percents of load.

You may find more details and pointers to relevant literature in the full paper and the slides than can be downloaded from here.

Questions/feedback? Would you see something else? Thank you