Данные, подлежащие обработке в реальном масштабе времени, должны передаваться быстро. Это требует не только высокой скорости передачи, но и быстрого предоставления шины, когда несколько устройств запрашивают ее для пересылки своих сообщений одновременно.
В системах реального времени срочность пересылаемых по сети сообщений бывает разной. Быстро меняющиеся величины должны передаваться более часто и, следовательно, с меньшей задержкой, чем относительно медленно меняющиеся параметры.
Передающий узел в CAN-протоколе слышат все другие узлы в сети и подтверждают это. Всякий раз, когда шина свободна от передачи, узел может начинать передавать. Если узел передает, эта передача должна быть завершена прежде, чем другой узел может пытаться передавать. Если два или больше узлов начинают передавать в одно и то же время, конфликт решается при помощи неразрушающего (недеструктивного – nondestructive) поразрядного алгоритма арбитража, использующего поле арбитража, в состав которого входит приоритет сообщения.
11(29)-битовое поле идентификатора передается от старшего к младшему значащему биту. Доминирующий уровень – логический 0. Одновременная передача бита с доминирующим уровнем (логический 0) и бита с рецессивным уровнем (логическая 1) дает в результате уровень логического 0.
В течение передачи поля арбитража каждый передатчик контролирует текущий уровень на шине и сравнивает его с битом, который он должен передавать. Если значения равны, узел способен затем продолжить передачу. Если бит с пассивным уровнем (логическая 1) был передан, а активный бит (логический 0) обнаружен на шине, то данный узел теряет право передачи и должен прекратить передачу последующих данных (рисунок 1.4). Узел, который потерял шину, может сделать попытку передачи снова, когда текущая передача завершена.
Рисунок 1.4 – Пример поразрядного арбитража
Идентификатор с наименьшим двоичным значением имеет наивысший приоритет. Приоритеты задаются во время проектирования системы и динамически изменяться не могут. Приоритетным является не передающий или приемный узел, а сообщение, имеющее меньшее значение идентификатора. Если в сети один из узлов (сервер) будет ответственным за принятие решений, то он должен иметь наименьший адрес из задействованных.
Эффективность сети CAN определяется тем, что шина используется только теми станциями, у которых есть отложенные («повисшие») запросы на передачу. Эти запросы обрабатываются в порядке степени важности сообщений для всей системы. Преимущества этого механизма особенно сказываются при сильной загрузке системы. Так как приоритеты доступа к шине базируются на сообщениях, можно гарантировать малое время задержки в системах реального времени.