Цитата(vptr @ Mar 22 2013, 13:51)

Легче всего, если внутри пакета будет уникальный признак датчика, а если этого нет то опять же можно попробовать по времени вылавливать пакеты от датчиков относительно какой-то временной точки отсчета, которую вам надо организовать.
Предполагается, что при включении мастер будет запрашивать по очереди все устройства для получения из заводских номеров и еще кое-какой информации. Когда произойдет обращение к устройствам с одним идентификаторам, они начнут передачу одновременно, коллизия произойдет при передаче данных. Вопрос в том, может ли контроллер одного из них узнать об этом? Ведь арбитраж происходит только по ИД? Если бы устройство могло узнать об ошибке, оно бы инкрементировало "суб-идентификатор" (например два младших бита идентификатора). После окончания ответа первого устройства оно выдает свой ответ, но уже со своим идентификатором и мастер узнает о наличии двух устройств.
Таким образом, вопрос лишь в том, может ли устройство узнать о том, что при передаче произошла коллизия в поле данных? До сих пор с CAN-ом иметь дела не приходилось, не знаю его тонкостей.
Цитата(KRS @ Mar 22 2013, 23:15)

А вот если с одинаковым ID но разными данными - будет выставлена ошибка! Увеличатся счетчики ошибок у обоих устройств и они могут быстро попасть в bus off.
Почему у обоих? Я полагаю ошибка будет у того, кто первым передал рецессивный бит, а тот, кто передавал доминантный этого не заметит.
Или при ошибке передача не остановится и если дальше доминантный бит окажется у другого, то данные перемешаются?
Цитата(KRS @ Mar 22 2013, 23:15)

Но это все хорошо на этапе идентификации устройств и назначении им идентификаторов (как DHCP)
Да, примерно так и хотим сделать: 9 старших бит раздать датчикам по их назначению, а 2 младших использовать для отличия датчиков одного назначения.