Короткий ответ заключается в том, что узел должен контролировать линии CAN в течение определенного времени, пока он не попытается передать. Таким образом, если другой узел передает, он должен хранить молчание, пока другой узел не завершит работу.
Шина CAN основана на дифференциальной сигнализации. Две линии, CAN-High (CAN +) и CAN-Low (CAN-), имеют одинаковый потенциал, когда шина свободна. Чтобы отправить биты, передатчик CAN помещает дифференциальное напряжение на линии около 2 вольт.
Передатчик CAN сначала видит, свободна ли шина, и начинает ли она передавать. Арбитраж работает так, что передатчик контролирует шину во время передачи. Передача осуществляется, как указано выше, либо поддерживая две линии с одинаковым потенциалом или с дифференциальным потенциалом. Таким образом, если передатчик передает немного, сохраняя линии с одинаковым потенциалом (sic), но он видит, что две передающие линии имеют дифференциальный потенциал, это означает, что какой-то другой узел передает, и первый передатчик проиграл арбитраж. Затем он должен прекратить передачу.
Когда узел впервые начинает передачу, передаваемые биты остаются одинаковыми до тех пор, пока адрес передающего узла, очевидно, не будет разным. Если два узла начинают передачу вместе, они будут передавать синхронно, пока не будет достигнута часть адреса. Когда адрес отличается, узел заметит потенциальную разницу в строках, даже если он не помещает его в линии. Тогда он знает, что потерял и должен попытаться снова. Победивший узел продолжает передачу, не зная, что какой-то другой узел тоже пытался. Конечно, эта логика распространяется и на более чем два узла.
Надеюсь, это поможет.