Конфигурация CAN-сети и поиск ID
Эта статья предназначена для настройки CAN-сети, проверки состояния CAN0, поиска CAN UUID и устранения распространенных ошибок CAN.
Сценарии использования:
- Подключение CAN-инструментальной платы через USB-CAN-модуль, такой как UTOC.
- Подключение CAN-инструментальной платы через плату с прошивкой USB-CAN-моста.
- Поиск CAN UUID на плате или инструментальной плате с прошивкой CAN.
- Ошибки Klipper, связанные с CAN0, CAN UUID или CAN-сетью.
Перед использованием
- Подключите UTOC или плату с прошивкой CAN-моста к хосту через USB.
- Войдите в систему хоста через сеть, а не через последовательный порт.
- В системе FlyOS-FAST CAN0 предварительно настроен на скорость 1M и буфер 1024, обычно ручная настройка CAN0 не требуется.
- Скорость CAN в прошивке инструментальной платы и основной платы должна соответствовать скорости CAN0 хоста.
- На обоих концах шины CAN требуются оконечные резисторы. Распиновка, сопротивление и проблемы с питанием могут привести к тому, что ID не будут найдены.
Подключение CAN и оконечные резисторы
Подключение и оконечные резисторы являются наиболее распространенными источниками проблем в CAN-сети.
Перед проверкой распиновки CAN-H/CAN-L, разъемов, обжима, перемычек или DIP-переключателей оконечных резисторов полностью выключите принтер и отключите его от источника питания. Не подключайте и не отключайте CAN-кабели, не регулируйте перемычки и не измеряйте сопротивление при включенном питании.
Проверка подключения
- После отключения питания убедитесь, что CAN-H подключен к CAN-H, а CAN-L — к CAN-L.
- После отключения питания проверьте CAN-кабели, разъемы и места обжима на наличие обрывов, ослабления или плохого контакта.
- При использовании UTOC используйте исправный USB-кабель для подключения к хосту.
- При использовании платы с USB-CAN-мостом убедитесь, что на нее прошита соответствующая прошивка.
- Соберите жгут проводов и корпус обратно, затем подайте питание и проверьте, распознает ли система CAN-устройство.
Проверка оконечных резисторов
На обоих концах шины CAN требуется оконечный резистор 120 Ом. После полного отключения питания мультиметром измерьте сопротивление между CAN-H и CAN-L.
| Измеренное значение | Заключение |
|---|---|
Около 60 Ом | Нормально, оконечные резисторы на обоих концах правильно подключены |
Около 120 Ом | Обычно оконечный резистор только на одном конце или обрыв линии |
Около 40 Ом | Возможно наличие лишнего оконечного резистора, проверьте промежуточные узлы |
Около 140 Ом | Возможна перепутанная распиновка CAN-H/CAN-L или неисправность линии |
Измерение оконечных резисторов должно производиться только при полном отключении питания. Выполнение этой операции при неполном отключении питания может привести к неточным показаниям и повреждению оборудования.
Проверка поддержки CAN хостом
Для хостов FLY этот шаг можно пропустить.
Выполните следующую команду для проверки поддержки CAN в ядре:
sudo modprobe can && echo "Ядро поддерживает CAN" || echo "Ядро не поддерживает CAN"
Если отображается Ядро поддерживает CAN, можно продолжать настройку. Если нет, рекомендуется заменить образ системы на поддерживающий SocketCAN.
Проверка распознавания CAN-устройства
Перед настройкой или поиском CAN ID рекомендуется убедиться, что хост распознал UTOC или устройство USB-CAN-моста.
Выполните:
lsusb
Интерпретация результатов:
1d50:606fприсутствует: устройство распознано системой, можно продолжать настройку или поиск CAN ID.- Сообщение
lsusbне найдена: установитеusbutils. 1d50:606fотсутствует: проверьте USB-кабель, UTOC, прошивку USB-CAN-моста и питание.- Обнаружено несколько
1d50:606f: рекомендуется оставить только одно CAN-мостовое устройство, чтобы избежать одновременного подключения нескольких источников CAN0.
Установка usbutils:
sudo apt-get update
sudo apt-get install usbutils
Дальнейшая настройка CAN0 и поиск CAN ID имеют смысл только после того, как система распознает CAN-мостовое устройство.
Настройка CAN0
Эта операция перезапишет существующую конфигурацию CAN0, после завершения потребуется перезагрузка системы. Для системы FlyOS-FAST выполнять этот шаг не нужно.
Определение менеджера сети
В разных системах используются разные менеджеры сети. Перед настройкой CAN0 следует определить, какая служба управляет сетью в текущей системе. Не используйте несколько способов для настройки одного can0 одновременно, иначе конфигурация может не применяться, теряться после перезагрузки или CAN0 будет работать некорректно.
Выполните следующие команды для проверки состояния распространенных сетевых служб:
systemctl is-active NetworkManager
systemctl is-active systemd-networkd
systemctl is-active networking
Также можно просмотреть конфигурационные файлы и состояние устройств:
ls /etc/network/interfaces /etc/network/interfaces.d/ 2>/dev/null
networkctl list 2>/dev/null
nmcli device status 2>/dev/null
Выберите способ настройки в зависимости от результатов:
| Результат | Описание | Рекомендация |
|---|---|---|
networking показывает active, и существует /etc/network/interfaces.d/ | Обычно в системах Debian, Armbian и т.д. | Используйте ifupdown |
systemd-networkd показывает active, networkctl list показывает сетевые устройства | Сетью управляет systemd-networkd | Используйте systemd-networkd |
NetworkManager показывает active, nmcli device status показывает сетевые устройства | Сетью управляет NetworkManager | Не смешивайте с двумя способами ниже, сначала обработайте по схеме NetworkManager текущей системы |
Несколько служб показывают active | В системе может быть смешанное управление сетью | Сначала определите, какая служба фактически управляет can0, затем выберите соответствующий способ |
Если невозможно определить, какой способ используется в текущей системе, сначала обратитесь к документации образа системы или производителя хоста. Для хостов FLY и системы FlyOS-FAST ручная настройка CAN0 обычно не требуется.
Запись конфигурации CAN0
После определения менеджера сети выберите соответствующую конфигурацию в зависимости от фактической системы.
- ifupdown
- systemd-networkd
ifupdown
Подходит для систем Debian, Armbian и т.д., использующих /etc/network/interfaces.d/ для управления сетью. Конфигурация для скорости 1M:
sudo /bin/sh -c "cat > /etc/network/interfaces.d/can0" << EOF
allow-hotplug can0
iface can0 can static
bitrate 1000000
up ifconfig \$IFACE txqueuelen 1024
pre-up ip link set can0 type can bitrate 1000000
pre-up ip link set can0 txqueuelen 1024
EOF
Для скорости 500K замените 1000000 на 500000 в приведенной выше команде, а затем выполните ее.
systemd-networkd
Подходит для систем, использующих systemd-networkd для управления сетью. Конфигурация для скорости 1M:
Создайте файл конфигурации сети:
sudo tee /etc/systemd/network/99-can.network > /dev/null <<'EOF'
[Match]
Name=can*
[CAN]
BitRate=1000000
RestartSec=100ms
EOF
Создайте файл конфигурации ссылки:
sudo tee /etc/systemd/network/99-can.link > /dev/null <<'EOF'
[Match]
OriginalName=can*
[Link]
TxQueueLength=1024
EOF
Для скорости 500K замените BitRate=1000000 на BitRate=500000.
После завершения настройки перезагрузите устройство:
sudo reboot
Проверка состояния CAN0
После перезагрузки выполните:
ip -details link show can0
Проверьте следующее:
bitrate: Скорость связи CAN, например1000000означает 1M.qlenилиtxqueuelen: Длина очереди отправки, рекомендуется1024.
Если отображается сообщение, что can0 не найден, сначала выполните:
ip link
lsusb
dmesg | grep -i can
Распространенные причины:
- UTOC не распознан системой или USB-кабель поддерживает только питание.
- На плату не прошита прошивка USB-CAN-моста.
- Файл конфигурации CAN0 не вступил в силу или система не была перезагружена.
- Образ системы не поддерживает SocketCAN.
Поиск CAN ID
Перед поиском убедитесь, что устройство находится в состоянии, доступном для поиска:
- Если UUID этого устройства уже записан в
printer.cfgи Klipper нормально к нему подключается, команда поиска может не отобразить это устройство снова. - Перед поиском можно временно закомментировать соответствующий раздел
[mcu], сохранить и перезапустить Klipper. - Отключите питание устройства примерно на 10 секунд, затем снова включите его и выполните команду поиска.
На обычном хосте выполните:
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
На хосте FLY выполните:
python3 ~/klipper/scripts/canbus_query.py can0
Интерпретация результатов:
Application: Klipper: Этот ID можно напрямую записать вprinter.cfgдля использования.Application: CANBOOTилиApplication: Katapult: Устройство все еще находится в загрузчике, сначала необходимо прошить прошивку Klipper.- ID не найдены: Сначала проверьте CAN0, распиновку, оконечные резисторы, питание и способ связи прошивки в соответствии с разделом «Порядок устранения неполадок при отсутствии ID» ниже.
Способ заполнения CAN ID
- Откройте веб-интерфейс принтера и найдите
printer.cfgв левой части. - Вставьте найденный UUID после
canbus_uuid:в соответствующем разделе[mcu]. - При использовании CAN-подключения не оставляйте одновременно
serial:иcanbus_uuid:в одном разделе[mcu]. - Сохраните и перезапустите Klipper.
Пример заполнения для CAN-прошивки:
[mcu]
canbus_uuid: xxxxxxxxxxxx
Для USB-прошивки используйте serial:, для CAN-прошивки используйте canbus_uuid:. При переходе с USB-прошивки на CAN-прошивку удалите или закомментируйте исходную строку serial:.
ID в документации являются примерами. ID каждой основной или инструментальной платы уникальны, вводите фактически найденный ID.
Устранение ошибок CAN: Если CAN0 и CAN ID настроены правильно, но все еще возникают проблемы со связью, обратитесь к разделу Устранение ошибок CAN.