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

 
 
> Как ограничить количество попыток достучаться до устройства по CAN
Yaumen
сообщение Nov 4 2009, 06:02
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Стоит следующая задача на LPC2366 попытаться ограничить количество попыток отправить пакет одному из устройств.

По умолчанию сообщение будет отсылаться отправлять до 255 раз пока CAN не перейдет в режим "Bus OFF". Можно конечно настроить регистр CANEWL чтобы получить прерывание при достижении определенного количества ошибок, но насколько я понял, этот счетчик ошибок инкрементируется при возникновении любой ошибки, связанной с работой CAN, включая борьбу за шину между несколькими устройствами. Поэтому если я установлю маленькое значение, а наступит момент когда несколько устройств будут пытаться захватить шину, то моему устройству может не хватить попыток передать сообщение, а если я настрою большое значение, то при свободной шине и недоступности устройства, которому предназначен пакет, он все равно будет пытаться отправляться большое число раз.

Как резюме, может кто подскажет как научить CAN считать только отстуствие ACK от устройства назначения!!!?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Nov 4 2009, 16:43
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Yaumen @ Nov 4 2009, 09:02) *
По умолчанию сообщение будет отсылаться отправлять до 255 раз пока CAN не перейдет в режим "Bus OFF"

Это не так! Только отсутсвие ACK - превдет к ERROR PASSIVE, а в этом режиме счетчики ошибок на отсутствие ACK не увеличиваются и пакет будет передаваться бесконечно к BUS OFF это не приведет, если нет других ошибок! К тому же, насколько я помню в активном режиме, отсутсвие АСК увеличивает tx error сразу на 8!



Цитата(Yaumen @ Nov 4 2009, 09:02) *
Как резюме, может кто подскажет как научить CAN считать только отстуствие ACK от устройства назначения!!!?

НИКАК!!!
если вы получили АСК - это значит что все устройства на CAN шине, независимо от фильтров, получили ваш пакет правильно, было ли в данный момент нужное устройство на шине или нет неизвестно. В дальнейшем все контроллеры могли выкинуть этот пакет по фильтрам и он не дошел до приложения, по ACK об этом вы не узнаете.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 03:12
Рейтинг@Mail.ru


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