реклама на сайте
подробности

 
 
> Коллизия в CAN
drnoob
сообщение Feb 20 2015, 08:22
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 20-02-15
Пользователь №: 85 274



Ребята, помогите разобраться.
В стандарте J1939 сказано, что если два узла с одинаковыми идентификаторами и разными данными осуществляют передачу одновременно, то произойдет коллизия. Коллизия приведет к ошибке, количество ошибок определит статус узла(активная ошибка, пассивная ошибка, отключение от шины). Но непонятно как отловить эту коллизию? По каким признакам определить, что произошла именно коллизия?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
lead_seller
сообщение May 6 2015, 10:10
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-10-08
Пользователь №: 41 225



Вообще в CAN коллизия ошибкой не является и не ведет к порче данных. Передатчик, проигравший арбитраж, перестает передавать и ждет освобождения шины, после чего передает свое сообщение.
Ошибкой может стать блокировка шины, когда на шине образуется доминанта, и передатчики не могут запустить передачу. Тогда формируются ошибки шины связи.
Go to the top of the page
 
+Quote Post
adnega
сообщение May 6 2015, 10:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(lead_seller @ May 6 2015, 13:10) *
Вообще в CAN коллизия ошибкой не является и не ведет к порче данных.

Вы не путаете коллизию с потерей арбитража?
Go to the top of the page
 
+Quote Post
lead_seller
сообщение May 6 2015, 18:36
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-10-08
Пользователь №: 41 225



Цитата(adnega @ May 6 2015, 13:17) *
Вы не путаете коллизию с потерей арбитража?


А чем проигрыш арбитража отличается от коллизии в CAN? При учете того, что с шины уходит тот передатчик, который из-за коллизии не может установить передаваемое состояние. При это данные, передаваемые выигравшим передатчиком, не искажаются.

Да, внимательно перечитал старт темы, вношу правку - я расписывал про коллизию и арбитраж на MAC уровне CAN.
ТС же говорил о коллизии на уровне протокола, когда на шине будут работать два устройства с одинаковым адресом. Такую коллизию поймать средствами MAC-уровня невозможно, это должно решаться как раз на протокольном уровне.

Сообщение отредактировал lead_seller - May 6 2015, 18:43
Go to the top of the page
 
+Quote Post
adnega
сообщение May 6 2015, 21:48
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(lead_seller @ May 6 2015, 21:36) *
А чем проигрыш арбитража отличается от коллизии в CAN?

Хоть это и не относится к вопросу ТС... давайте разберемся)

Если адреса узлов разные и передача стартует одновременно, то узел с меньшим адресом выигрывает арбитраж и продолжает передавать.
Проигравший не просто отвалится, он еще и корректно примет эту посылку.

Но это только в поле адреса узла. Если при передаче данных и служебных полей будет обнаружен доминант при передаче рецессива, то
узел не перейдет в режим слушателя, а начнет активно действовать:
1) увеличит счетчик ошибок передачи (+8?);
2) если счетчик меньше определенного значения (<127?), то выставит несколько доминантов (6?) на шине - мол, ошибка (активная). Все кто принимал увидят эту ошибку и увеличат свои счетчики ошибок приема;
3) если счетчик больше определенного числа, то выставит несколько рецессивов (6?) - тоже ошибка, только пассивная;
4) если счетчик переполнился (255), то наступает bus-off на сколько-то idle-циклов шины (13?).
5) если счетчик не переполнился, то будет повторная передача (если она включена, зависит от протокола, настроек контроллера и т.п.). При этом bus-off гарантируется.

Итого: два одинаковых id узла на шине страшное зло! а не просто потеря арбитража.

PS. В деталях могу напутать, но общий смысл такой.
Go to the top of the page
 
+Quote Post
lead_seller
сообщение May 7 2015, 07:49
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-10-08
Пользователь №: 41 225



Цитата(adnega @ May 7 2015, 00:48) *
Хоть это и не относится к вопросу ТС... давайте разберемся)

Если адреса узлов разные и передача стартует одновременно, то узел с меньшим адресом выигрывает арбитраж и продолжает передавать.
Проигравший не просто отвалится, он еще и корректно примет эту посылку.

Но это только в поле адреса узла. Если при передаче данных и служебных полей будет обнаружен доминант при передаче рецессива, то
узел не перейдет в режим слушателя, а начнет активно действовать:
1) увеличит счетчик ошибок передачи (+8?);
2) если счетчик меньше определенного значения (<127?), то выставит несколько доминантов (6?) на шине - мол, ошибка (активная). Все кто принимал увидят эту ошибку и увеличат свои счетчики ошибок приема;
3) если счетчик больше определенного числа, то выставит несколько рецессивов (6?) - тоже ошибка, только пассивная;
4) если счетчик переполнился (255), то наступает bus-off на сколько-то idle-циклов шины (13?).
5) если счетчик не переполнился, то будет повторная передача (если она включена, зависит от протокола, настроек контроллера и т.п.). При этом bus-off гарантируется.

Итого: два одинаковых id узла на шине страшное зло! а не просто потеря арбитража.

PS. В деталях могу напутать, но общий смысл такой.


Спасибо за информацию. Действительно начал вчитываться в доступное, там расписывается алгоритм арбитража именно в Arbitration field. Не подскажите, где можно посмотреть именно по коллизиям вне поле арбитража? К сожалению доступа к ISO 11898 не имею, а общедоступные статьи описывают только арбитраж в поле заголовка пакета.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 22:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01421 секунд с 7
ELECTRONIX ©2004-2016