Перейти к основному содержимому

Настройка Ethernet - CAN-FD

Программное обеспечение можно найти на GitHub https://github.com/VBCores/ethernet-can.

Далее инструкция по настройке платы Ethernet - CAN-FD. Как правило, первые два шага мы сделали уже за вас и их можно опустить.

1. Подготовка платы (Hardware)

На обратной стороне платы необходимо пропаять перемычки (jumper pads) для CAN-FD. В CAN-шине обязательно должны быть установлены резисторы по 120 Ом на первом и последнем устройстве (терминация). Без них связь работать не будет. Плата Ethernet - CAN-FD в типичном подключении выступает как крайнее устройство шины.

2. Прошивка (Firmware)

На плате необходимо прошить два микроконтроллера: STM32H7 и STM32G4. Для этого используйте STM32CubeProgrammer и подключитесь к плате через ST-Link. Скачайте прошивки из раздела Releases репозитория на GitHub.

Для микроконтроллера G4 дополнительно установите параметр Option Byte NSWBoot0 в значение 0 (снимите флажок в разделе OB → Option Bytes).

3. Настройка SD-карты на плате Ethernet - CAN-FD

  1. Отформатируйте SD-карту в формате FAT16.
  2. В корневой директории SD-карты создайте файл ethernet.ini. Его содержимое можно взять отсюда: https://github.com/VBCores/ethernet-can/blob/master/extra/SD-card/ethernet.ini

В файле указываются два IP-адреса: адрес компьютера-хоста (например, Raspberry Pi — запомните его, он понадобится дальше) и адрес самой платы Ethernet - CAN-FD. Важно понимать, что они будут обмениваться данными напрямую, без участия роутера.

Рекомендуется использовать адреса вида 10.0.0.*, где * — любое число на ваш выбор. В целом можно использовать любой диапазон, но желательно, чтобы он не совпадал с диапазоном адресов, которые выдает роутер (например, 192.168.1.*).

4. Настройка сети хоста

Ethernet - CAN-FD — это IP-устройство, работающее по протоколу UDP. Оно считывает статический IP-адрес устройства с SD-карты (ethernet.ini) и отправляет данные на статический IP-адрес хоста. Для корректной работы необходимо выполнить три условия:

  • ПК и устройство Ethernet - CAN-FD должны находиться в одной сети, поэтому их нужно соединить напрямую Ethernet-кабелем
  • устройство Ethernet - CAN-FD должно иметь уникальный IP-адрес (он был задан на предыдущем шаге)
  • IP-адрес хоста не должен меняться — речь идет не о DHCP-адресе от роутера, а о статическом адресе, который мы сейчас назначим вручную

Теперь настроим сеть на ПК.

  1. После подключения Ethernet - CAN-FD к ПК по Ethernet-кабелю выполните команду ip link и найдите имя Ethernet-интерфейса (чаще всего это eth0): Шаг 1

  2. В папке /etc/netplan создайте файл 10-ethernet-can.yaml:

cd /etc/netplan/
sudo nano 10-ethernet-can.yaml
  1. Вставьте в файл:
network:
version: 2
ethernets:
INTERFACE_NAME:
dhcp4: false
optional: false
addresses:
- 10.0.0.1/24

Вместо INTERFACE_NAME укажите имя своего интерфейса (например, eth0). Если на предыдущем шаге вы использовали диапазон 10.0.0.*, то ничего менять не нужно. Если использовали другой диапазон (например, 10.2.2.*), то здесь следует указать соответствующий адрес (например, 10.2.2.1/24).

В итоге файл должен выглядеть примерно так, как показано на скриншоте: Шаг 3

  1. Примените настройки:
sudo netplan try
sudo netplan apply

Если появятся предупреждения (warning) — их можно игнорировать.

  1. Перезагрузите ПК и заново подключите плату Ethernet - CAN-FD по кабелю.

  2. После перезагрузки выполните команду (подставив имя интерфейса) и убедитесь, что адрес назначен:

ip addr show INTERFACE_NAME

Шаг 6

к сведению

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

  1. Далее выполните ping 10.0.0.2 (IP вашей платы Ethernet - CAN-FD). Устройство должно ответить.

5. Установка ПО на компьютер

После настройки сети необходимо установить дополнительное программное обеспечение:

cd ~
sudo apt update
sudo apt install -y build-essential cmake libboost-program-options-dev python3 python3-systemd can-utils iproute2 kmod

Затем скачайте репозиторий вместе с подмодулями и соберите проект:

git clone --recurse-submodules https://github.com/VBCores/ethernet-can
cd ethernet-can
cmake -S . -B build
cmake --build build
sudo cmake --install build

После установки должны появиться следующие файлы:

  • /opt/voltbro/ethernet-can/bin/ethernet-can
  • /opt/voltbro/ethernet-can/bin/start_ethernet_can.py
  • /opt/voltbro/ethernet-can/systemd/ethernet-can.service

6. Настройка конфигурации (.ini)

Создадим и настроим конфигурационный файл .ini:

cd /opt/voltbro/ethernet-can/
sudo nano config_ethernet.ini

Вставьте в файл следующий шаблон:

# Received VCAN frames can be sent immediately upon arrival or collected in batches and sent periodically.
# Immediate transmission increases load on Eth-CAN board.
[DATA_ACQUIZITION]
Period = 10000000 # ns. For immediate transmission set to zero.

[NETWORK_PARAMS]
Host_IP_address = 10.0.0.1
Device_IP_address = 10.0.0.2

# To enable board's FDCAN peripherals, set corresponding network interface to each bus you want to use
[HOST_INTERFACE_MAP]
bus0 = vcan1.0
bus1 = vcan1.1
bus2 = vcan1.2
bus3 = vcan1.3
bus4 = vcan1.4
bus5 = vcan1.5

# To enable FDCAN BRS mode set both the nominal and data rates. To enable classic CAN mode set data rate to zero.
# Some nominal/data combinations may not work.
[FDCAN_PARAMS]
Nominal_baud = 1000 # kbit/s. Values: 125, 250, 500, 1000.
Data_baud = 8000 # kbit/s. Values: 1000, 2000, 4000, 8000.

Сохраните файл и сначала запустите start_ethernet_can.py вручную:

sudo /opt/voltbro/ethernet-can/bin/start_ethernet_can.py

Обратите внимание: каждый файл .ini описывает одну плату Ethernet - CAN-FD. Скрипт start_ethernet_can.py сканирует все файлы *.ini, проверяет их, создает необходимые интерфейсы VCAN и запускает единый процесс хоста с параметрами для всех найденных плат.

Проверим работу. Подключите к Ethernet - CAN-FD любое CAN-устройство (например, микроконтроллерный модуль VBCores VB32G4), загрузите на него простую прошивку, отправляющую данные по CAN (можно использовать пример: https://github.com/VBCores/VBCoreG4_examples/tree/main/examples/can/can_fd).

На ПК откройте второй терминал и прослушайте CAN-шину с помощью команды candump vcan1.N, где N — номер канала (см. маркировку на плате Ethernet - CAN-FD). Если данные появляются — всё работает. После этого можно настроить автозапуск.

7. Автозапуск

Выполните:

sudo install -m 0644 /opt/voltbro/ethernet-can/systemd/ethernet-can.service /etc/systemd/system/ethernet-can.service
sudo systemctl daemon-reload
sudo systemctl enable --now ethernet-can.service

Проверить статус сервиса можно командами:

systemctl status ethernet-can.service
journalctl -u ethernet-can.service -f

Вы должны увидеть примерно следующее: Шаг 6

Дополнительно проверьте, что сообщения приходят:

candump vcanX.Y

где X.Y — это имя CAN-интерфейса, указанного в конфигурационном файле ([HOST_INTERFACE_MAP]), например vcan1.0.