Linux 2.6 на imx: не удается зарегистрировать отправленные кадры CAN с помощью candump

#linux #can-bus #socketcan #canutils

#linux #can-bus #socketcan #canutils

Вопрос:

У меня есть пользовательская сборка linux 2.6, работающая на процессоре imx. Связь CAN с внешними узлами работает как шарм, но фреймы, которые я отправляю на узлы из моего приложения, не печатаются при использовании «candump can0» в терминале (когда я запускаю то же приложение на своем хосте с помощью usb-CAN ключа, эта проблема не возникает).

При отправке расширенных CAN-фреймов они отображаются с использованием candump.

Я понимаю, что может быть удобно, чтобы отправляемые сообщения фильтровались, но у меня должна быть возможность выбора.

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

Драйвер FlexCAN имеет следующие конфигурационные файлы:

прервать br_propseg dump_rx_mb состояние обратного цикла пробуждение bcc br_pseg1 dump_xmit_mb maxmb std_msg xmit_maxmb битрейт br_pseg2
ext_msg модальная подсистема boff_rec br_rjw fifo power tsyn br_clksrc драйвер прослушивает smp uevent br_presdiv
dump_reg local_priority srx_dis wak_src

Ответ №1:

Для пакета can-utils требуется SocketCAN, который был интегрирован в стандартное ядро 2.6.30.

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

Из bash:

 ifconfig can0 down
ip link set can0 type can loopback on
ifconfig can0 up
candump can0|grep C0FFEE
  

и в другом терминале:

 cansend can0 00C0FFEE#00112233445566
  

Комментарии:

1. Используется FlexCAN. Я попробовал ваше предложение, но эта команда не распознается, поэтому вместо этого я сделал «echo 1> /sys /bus / platform / devices/ FlexCAN.0 / loopback». В результате прием сообщений перестал работать. Я обнаружил одну странную вещь: если я отправляю фрейм удаленного запроса, например 123 # R, эти сообщения печатаются с помощью candump.

Ответ №2:

Хорошо, я много раз сталкивался с этой проблемой, но сдавался. Но знайте, что я наткнулся на решение:

Этим поведением управляет файл настроек с именем srx_dis в папке FlexCAN. Итак, если вы хотите иметь возможность считывать CAN-фреймы, которые вы отправляете на imx53_loco, выполните следующие действия:

 ifconfig can0 down
echo 0 > /sys/bus/platform/devices/FlexCAN.0/srx_dis
ifconfig can0 up
  

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