Конфигурация CAN сети и поиск ID
Эта статья предназначена для обработки конфигурации CAN сети, проверки статуса CAN0, поиска CAN UUID и устранения распространенных ошибок CAN.
Сценарии применения:
- Подключение инструментальной платы CAN через USB-to-CAN модуль, такой как UTOC.
- Подключение инструментальной платы CAN через материнскую плату с прошивкой USB-CAN моста.
- Материнская плата или инструментальная плата уже имеют прошивку CAN, необходимо найти CAN UUID.
- В Klipper возникают ошибки, связанные с CAN0, CAN UUID или CAN сетью.
Примечания перед использованием
- Подключите UTOC или материнскую плату с прошивкой CAN моста к хост-компьютеру через USB.
- Войдите в бэкенд хост-компьютера по сети, не используйте последовательный порт.
- В системе FlyOS-FAST CAN0 предварительно настроен на скорость 1M и буфер 1024, обычно ручная настройка CAN0 не требуется.
- Скорость CAN в прошивке инструментальной платы и материнской платы должна соответствовать скорости CAN0 хост-компьютера.
- На обоих концах CAN шины требуются терминальные резисторы. Проблемы с порядком проводов, резисторами и питанием могут привести к невозможности поиска ID.
Подключение CAN и терминальные резисторы
Подключение и терминальные резисторы являются наиболее распространенным источником проблем в CAN сети. При проверке сначала отключите питание, затем проверьте порядок проводов и резисторы.
Проверка подключения
- Убедитесь, что CAN устройство правильно запитан.
- Убедитесь, что CAN-H подключен к CAN-H, а CAN-L к CAN-L.
- При использовании UTOC подключите 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
Только после того, как система распознает CAN-мостовое устройство, последующая настройка CAN0 и поиск CAN ID имеют смысл.
Настройка 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, порядок проводов, терминальные резисторы, питание и способ связи прошивки согласно порядку устранения неполадок ниже.
Способ заполнения 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.
Распространенные сообщения об ошибках
| Ошибка | Распространенная причина | Способ устранения |
|---|---|---|
OSError: [Errno 19] No such device | Хост-компьютер не может найти CAN устройство | Проверьте UTOC, USB-кабель, прошивку CAN моста и питание |
can.CanError: Failed to transmit: [Errno 100] Network is down | CAN0 не запущен или настроен неправильно | Перенастройте CAN0 и перезагрузите |
can.CanError: Failed to transmit: [Errno 105] No buffer space available | Недостаточно CAN буфера или проблемы с сетевой очередью системы | Убедитесь, что буфер равен 1024, при необходимости перенастройте CAN0 |
mcu 'xxx': Invalid CAN uuid | Неправильно указан CAN UUID или устройство не в сети | Повторно найдите UUID, проверьте порядок проводов, питание и терминальные резисторы |
Serial connection closed | Klipper нашел конфигурацию, но соединение прервано | Проверьте качество CAN сети, порядок проводов, терминальные резисторы и скорость прошивки |
Больше ошибок Klipper можно найти в Распространенные сообщения об ошибках.
Порядок устранения неполадок, если ID не найден
- Выполните
ip -details link show can0, чтобы убедиться, что CAN0 существует и находится в рабочем состоянии. - Убедитесь, что скорость CAN в прошивке инструментальной платы и материнской платы соответствует скорости CAN0 хост-компьютера.
- Если ID устройства уже записан в
printer.cfg, временно закомментируйте соответствующую конфигурацию, выключите устройство примерно на 10 секунд, затем снова включите его для поиска. - Проверьте, не перепутаны ли CAN-H и CAN-L, нет ли обрывов или плохого контакта.
- Убедитесь, что на обоих концах CAN сети есть по одному терминальному резистору
120Ω, после полного отключения питания измерьте сопротивление между CAN-H и CAN-L, оно должно быть примерно60Ω. - Убедитесь, что инструментальная плата или материнская плата нормально запитаны.
- Убедитесь, что при компиляции прошивки был выбран правильный способ связи.
- Если результат поиска показывает
Application: CANBOOTилиApplication: Katapult, сначала прошейте прошивку Klipper, затем повторите поиск.
Правила терминальных резисторов
| Тип устройства | Требование к терминальному резистору | Инструкция по эксплуатации |
|---|---|---|
| CAN инструментальная плата | Требуется терминальный резистор 120Ω | Включить через перемычку на плате или DIP-переключатель |
| CAN интерфейс материнской платы | Требуется терминальный резистор 120Ω | Включить через перемычку на плате или DIP-переключатель |
| Преобразователи типа UTOC | Обычно имеют встроенный резистор 120Ω | Дополнительно включать терминальный резистор не нужно |
Быстрый порядок устранения неполадок
- Сначала проверьте устройство: выполните
lsusb, убедитесь, что виден1d50:606f. - Затем проверьте конфигурацию: выполните
ip -details link show can0, убедитесь, что CAN0 существует, скорость правильная, буфер равен1024. - Наконец, проверьте аппаратное обеспечение: полностью отключите питание, измерьте CAN-H и CAN-L, убедитесь, что сопротивление составляет примерно
60Ω.
Если после всех проверок аномалии сохраняются, попробуйте заменить USB-кабель, CAN-кабель, UTOC или CAN-мостовое устройство для перекрестного тестирования.
Обновление прошивки CAN устройства
Этот раздел предназначен для случаев, когда устройство уже подключено к CAN сети, и необходимо обновить прошивку материнской платы или инструментальной платы через CAN. Названия прошивок и способы компиляции для разных продуктов различаются, сначала скомпилируйте новую прошивку в соответствии с инструкцией для соответствующего продукта.
Подготовка
- Скомпилируйте новую прошивку в соответствии с инструкцией для продукта.
- Убедитесь, что можно найти CAN UUID устройства, или что
canbus_uuid:этого устройства уже указан вprinter.cfg. - Остановите службу Klipper:
sudo systemctl stop klipper
Выполнение обновления
Замените <CAN_UUID> в команде ниже на фактический ID устройства.
Выберите соответствующую команду в зависимости от версии системы.
- FlyOS-FAST 1.3.8 и выше или системы, в которых Klipper обновлялся после 9 апреля 2026 года:
python3 ~/klipper/lib/katapult/flashtool.py -u <CAN_UUID>
- Старые версии системы, т.е. FlyOS-FAST до 1.3.8, или системы, в которых Klipper не обновлялся до 9 апреля 2026 года:
python3 ~/klipper/lib/canboot/flash_can.py -u <CAN_UUID>
После -u должен быть пробел, а затем вводится CAN UUID.
Появление сообщения CAN Flash Success обычно означает успешную прошивку.
Действия после обновления
После завершения обновления перезапустите Klipper:
sudo systemctl start klipper
Если после обновления подключиться не удается, выполните повторный поиск CAN ID и убедитесь, что canbus_uuid: в printer.cfg все еще корректен.
Финальный контрольный список
Если CAN ID не найден или Klipper не может подключиться к CAN устройству, быстро проверьте по следующему порядку:
can0распознается системой.bitrateсоответствует скорости CAN, установленной при компиляции прошивки.qlenилиtxqueuelenравен1024.- CAN-H и CAN-L не перепутаны.
- Терминальные резисторы на обоих концах CAN шины правильные.
- Питание инструментальной платы или материнской платы в норме.
- Способ связи прошивки выбран правильно.
- В
printer.cfgиспользуется фактически найденныйcanbus_uuid:. - В одном
[mcu]не включены одновременноserial:иcanbus_uuid:.