Полудуплексный
Сначала узлы проверяют, свободна ли линия.
Как только она станет свободна, они начинают писать сообщение. Во время записи каждого бита (стадия 1) происходит одновременно чтение (стадия 2). Нуль всегда забивает единицу. Сначала передаётся идентификатор. Во время записи идентификатора если контроллер записал 1, а прочитал 0, он понимает, что у другого (других) сообщение имеет больший приоритет и он прерывает запись. Поэтому сообщение с максимальным приоритетом будет передано без задержки и коллизии (если други узлы не используют такой же идентификатор). Все эти процедуры (а также CRC, бит подтверждение, вставка инверсного бита, если подряд 6 одинаковых и т.д. ) автоматически выполняется на уровне микросхем и, в основном, не требует вмешательство программиста. Его дело организовать протокол верхнего уровня (CANopen, DeviceNet, CANkingdom...)