Цитата(syoma @ Apr 4 2013, 17:36)

Это сообщение может иметь даже одинаковый идентификатор для всех - в случае коллизии узлы узнают, что она произошла и повторят передачу через случайные интервалы времени. Проблем тут не будет.
Главное при отправке указать что бы была только одна попытка отправить! Все CAN контроллеры это умеют, но по разному немного.
Этот механизм довольно сложно отладить в том смысле, что в большинстве случаев конфликтов реально не будет! Но можно налететь на то что в один момент два или больше устройства будут это делать одновременно и система будет стартовать с большими задержками. Поэтому стоит исходить из худшего - и делать одноразовую передачу и при ошибке опять случайную задержку (плюс можно хеш серийник использовать и добавлять несколько бит в ID)
У нас возникла подобная проблема - все много лет было хорошо, но вдруг одна система стала долго стартовать - как раз такие конфликты и пошли.
Цитата(777777 @ Mar 25 2013, 14:10)

Таким образом, вопрос лишь в том, может ли устройство узнать о том, что при передаче произошла коллизия в поле данных?
Конечно может, по коду ошибки.
Но там где такое возможно лучше использовать одноразовую передачу (по умолчанию происходит следующая попытка, а т.к. пытаться будут опять оба устройства произойдет такая же ошибка и они так будут до бас офа бодаться)