Linux-сокет CAN - обработка фреймов ошибок

Я знаю, что если есть ошибка при передаче CAN, система сгенерирует конкретный кадр ошибки . Но я не могу понять, как заставить это работать.

Я настраиваю розетку CAN, а затем записываю данные:

write(s, (struct sockaddr *)&addr, sizeof(addr))

К шине ничего не подключено, поэтому я ожидал CAN_ERR_ACK, но ничего не пришло.

PS: прием ошибок включен.

Что случилось?


person rPulvi    schedule 18.02.2013    source источник


Ответы (1)


Возможно, вам придется включить получение ошибок

can_err_mask_t err_mask = CAN_ERR_ACK ;
setsockopt(skt, SOL_CAN_RAW, CAN_RAW_ERR_FILTER,&err_mask, sizeof(err_mask));
person Luka Rahne    schedule 18.02.2013
comment
Забыл написать, что прием ошибок включен, но фрейм ошибки получить не могу. У меня нет устройств, подключенных по проводу .. Может это может быть проблемой? - person rPulvi; 18.02.2013
comment
В этом случае мое оборудование генерирует CAN_ERR_CRTL (в can_id) и CAN_ERR_CRTL_RX_WARNING. Проверьте, что происходит с помощью Candump - person Luka Rahne; 18.02.2013
comment
вот такая ситуация: ./cansend can0 55 55 55 в другом терминале Candump отвечает <0x001> [3] 37 37 37 Нет фреймов ошибок ... - person rPulvi; 18.02.2013
comment
@rPulvi Вы включили фильтрацию всех кадров в Candump? Candump -tA любой, 0: 0, # FFFFFFF. Если вы не видите ошибки, возможно, вы включили loopback, или проблемы с драйверами, или кто-то принимает пакеты. - person Luka Rahne; 18.02.2013
comment
Ничего не поделаешь .. Я вижу только отправленный мной фрейм, без фреймов ошибок. Фильтрация включена, а шлейф отключен. - person rPulvi; 20.02.2013
comment
У меня нет других устройств, подключенных к CANbus .. может в этом проблема? Я все равно ожидаю получить кадры ошибок. Я ошибся? - person rPulvi; 26.02.2013
comment
Я думаю, вы правы. Я не эксперт, но интерфейсы Can в MCU или внешних генерируют ошибку / HW-прерывание, когда количество ошибок TX превышает число 96. Похоже, что у вас не полностью поддерживаются драйверы. Какое у вас оборудование, я использую PCAN-USB от Peak? - person Luka Rahne; 28.02.2013
comment
Я использую Karo TX25. Читая журнал ядра, я вижу, что шина переходит в выключенное состояние после отправки первого сообщения. - person rPulvi; 28.02.2013
comment
@rPulvi Уже поздно, но ... вы заметили, что 55 = 0x37? - person Astrinus; 09.07.2019