Настройка CAN на RPI
Настройка CAN и CAN FD на Raspberry PI
Для работы с CAN необходимо установить CAN-utils - набор полезных и удобных инструментов отладки, использующих интерфейс SocketCAN. Для установки их на Raspberry, используйте следующую команду:
CAN-utils содержат следующие полезные инструменты:
candump - позволяет отображать, фильтровать и записывать CAN пакеты
canplayer - воспроизводит записанные CAN пакеты
cansend - отправляет один CAN пакет
cangen - генерирует случайные пакеты
canbusload - отображение текущей нагрузки на шину CAN
В данной инструкции будут рассмотрены утилиты candump и cansend, потому что ими мы и будем чаще всего пользоваться. С остальными утилитами мы предлагаем читателю ознакомиться самостоятельно на страничке github.
Чтобы запустить интерфейс для работы с CAN на Raspberry вводим команду
Если у вас вышла ошибка "Cannot find device "can0"", сделайте следующее:
В конец открывшегося файла добавьте строчку
![](https://voltbro.gitbook.io/~gitbook/image?url=https%3A%2F%2F3551773033-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FBjLyfPc4FcQUfXFi5fQr%252Fuploads%252FYHDEyA6N8TralEimDG3x%252Fimage.png%3Falt%3Dmedia%26token%3Deb6aefa0-06d7-4f53-b49a-e2675b232c53&width=768&dpr=4&quality=100&sign=fc265533&sv=1)
Сохраните (Ctrl+S) и закройте(Ctrl+X) файл. Перезагрузите raspberry:
Сообщения, получаемые и отправляемые через CAN - это некоторое количество байтов. Чтобы посмотреть что в CAN посылаются пакеты мы используем утилиту candump:
Введя эту команду, мы увидим абсолютно все пакеты, передаваемые по CAN. Если нам нужно посмотреть сообщения, имеющие определенный ID, например 100, мы переводим ID в 16-ричную систему счисления (в нашем примере 100=0х64) и выполняем команду candump can0,ID:7ff
Для ID 100 она выглядит слующим образом:
Используем утилиту cansend для отправки сообщения (4 байта DE AD BE EF) в CAN, ID сообщения 100 (0х64):
Команда отключения интерфейса:
CAN-FD
Шина CAN-FD – это следующий этап развития классической шины CAN. CAN-FD обеспечивает более высокую скорость передачи данных и больший объем передаваемых данных в одном кадре. Если вы проделали все шаги по установке CAN-utils, описанные выше, ничего дополнительно устанавливать не придется. Отличаться будет только команда запуска интерфейса:
Далее мы будем использовать CAN-FD, с точки зрения использования утилит, ничего не поменяется. Прочитать подробнее о различиях CAN и CAN-FD можно здесь.
Удобно, чтобы не включать интерфейс для общения с CAN-FD каждый раз, настроить автозапуск CAN-utils. Для этого создадим небольшой скрипт canup.sh в домашней дирректории и пропишем туда команду запуска CAN-FD
Сделаем файл исполняемым:
Добавим созданный скрипт в автозапуск. Чтобы запустить программу при запуске Raspberry Pi, вам просто нужно изменить файл /etc/rc.local
на SD-карте (с Pi или путем изменения файла /etc/rc.local
в счете rootfs
с карты, подключенной к вашему ПК).
Должен открыться файл в редакторе nano. Чтобы поставить в автозапуск программу canup.sh, просто найдите строку
в файле и добавьте командную строку, вызывающую вашу программу, перед строкой exit:
![](https://voltbro.gitbook.io/~gitbook/image?url=https%3A%2F%2F3551773033-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FBjLyfPc4FcQUfXFi5fQr%252Fuploads%252FrHoDJEb9Z32uHMHr4Y2Z%252Fimage.png%3Falt%3Dmedia%26token%3D846243cd-8463-4923-b4fd-f2956637e109&width=768&dpr=4&quality=100&sign=7ddeecda&sv=1)
Сохраняем Ctrl + S и закрываем Ctrl + X файл. Перезагружаем Raspberry
Полезно знать команду
Эта команда позволяет получить информацию об интерфейсе can0. Отметим, что, если при получении и отправке сообщений не возникает никаких ошибок, то в записи об ошибках вы увидите 0, как показано ниже
![](https://voltbro.gitbook.io/~gitbook/image?url=https%3A%2F%2F3551773033-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FBjLyfPc4FcQUfXFi5fQr%252Fuploads%252FmuIMEnTgWPUQq3d0irA3%252Fimage.png%3Falt%3Dmedia%26token%3Dd568e8f5-03ef-4dea-8bd4-a34acd859531&width=768&dpr=4&quality=100&sign=4a072b07&sv=1)
В данном разделе было описано как установить CAN-utils для взаимодействия с CAN и CAN-FD на Raspberry Pi 4, а также установки включения этого интерфейса в автозапуск. Далее разберем примеры получения и отправки сообщений по CAN-FD на низком уровне с помощю Arduino.
Last updated