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

Поиск и устранение ошибок CAN

Эта статья предназначена для обработки распространенных ошибок CAN-сети,排查 аномалий связи, а также процедуры поиска, когда CAN ID не найден.

Сценарии применения:

  • В Klipper появляются ошибки, связанные с CAN0, CAN UUID или CAN-сетью.
  • CAN-устройства периодически отключаются или не обнаруживаются.
  • Необходимо排查 ошибки bytes_invalid, USB CANBUS bridge, BUS-OFF, Timer too close и другие.

Если требуется настроить CAN0, найти CAN ID или ознакомиться с правилами подключения и оконечных резисторов, сначала обратитесь к Настройка CAN-сети и поиск ID.

Распространенные ошибки и их диагностика

ОшибкаЧастая причинаСпособ устранения
OSError: [Errno 19] No such deviceВерхний компьютер не находит CAN-устройствоПроверить UTOC, USB-кабель, прошивку CAN-моста и питание
can.CanError: Failed to transmit: [Errno 100] Network is downCAN0 не запущен или настроен неправильноПеренастроить 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 closedKlipper нашел конфигурацию, но соединение прерваноПроверить качество CAN-сети, распиновку, оконечный резистор и скорость прошивки
Duplicate canbus_uuidНесколько конфигураций MCU используют один и тот же CAN UUIDЗаново найти UUID, убедиться, что каждый [mcu xxx] уникален
Unknown canbus_uuid xxxCAN UUID из конфигурации отсутствует в результатах поиска текущей сетиЗакомментировать соответствующую конфигурацию MCU, затем заново найти и вписать
Can not update MCU 'xxx' config as it is shutdownCAN MCU сначала перешел в состояние shutdown, последующее обновление конфигурации не удалосьПрокрутить klippy.log вверх, найти первую причину отключения или shutdown
USB CANBUS bridge 'mcu' is discarding!CAN-аппаратура USB-CAN мостового MCU отбросила сообщениеПосмотреть canstat_mcu, bus_state, питание, трансивер и жгут
can state BUS-OFF / ERROR-PASSIVEКонтроллер CAN перешел в состояние ошибкиОбесточить, проверить физическую шину, оконечные резисторы, распиновку и количество узлов

Больше ошибок Klipper см. в Распространенные сообщения об ошибках.

Поиск и устранение ошибок связи CAN

Электромагнитные помехи — частая причина

Значительная часть проблем с CAN-связью вызвана электромагнитными помехами (EMI). Провода шаговых двигателей, нагревателей и стола внутри 3D-принтера при работе с большим током создают сильное электромагнитное поле. Если линии CAN-связи (CANH/CANL) проложены вблизи и параллельно этим силовым проводам, помехи耦合ются на CAN-шину, что приводит к:

  • Тайм-аутам связи, периодическим отключениям MCU
  • Случайным отключениям CAN-устройств, невозможности сканирования canbus_query.py
  • Возникновению Timer too close или Communication timeout во время хоминга
  • Внезапному shutdown во время печати, при этом в логе нет явных аппаратных ошибок

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

Счетчик bytes_invalid CAN постоянно растет

Сообщение об ошибке: В klippy.log в строке статистики Stats за каждую секунду появляется ненулевое значение bytes_invalid, которое постоянно растет.

Причина ошибки: Сообщения CAN-шины были переупорядочены (reordered messages). Это серьезная проблема, которая может привести к нестабильности и случайным ошибкам на любом этапе печати.

Известные причины:

  • Версия ядра Linux ниже v6.6.0, существует ошибка переупорядочения драйвера gs_usb CAN.
  • Используется USB-CAN адаптер с прошивкой candlelight версии ниже v2.0.
  • Версия прошивки узла в режиме моста Klipper USB-to-CAN ниже v0.12.0.

Способы решения:

  1. Если используется USB-CAN адаптер candlelight, обновите прошивку до v2.0 или выше.
  2. Если используется режим моста Klipper USB-to-CAN, убедитесь, что мостовой узел прошит прошивкой Klipper v0.12.0+.
  3. Если bytes_invalid продолжает расти, значит, основная причина не устранена; необходимо продолжить排查 версию ядра и прошивки.
  4. Примечание: Увеличение bytes_invalid не вызвано аппаратными проблемами, такими как подключение или оконечные резисторы; это можно исправить только обновлением программного обеспечения/прошивки.

Недостаточная очередь CAN-шины приводит к Timer too close

Сообщение об ошибке: При связи по CAN-шине появляется MCU 'xxx' shutdown: Timer too close.

Причина ошибки: Длина очереди по умолчанию (qlen), установленная ядром Linux для сетевого интерфейса CAN, обычно равна 10, что мало для требований Klipper к высокочастотной связи с малой задержкой. В официальных примерах Klipper часто используется txqueuelen 128; в FlyOS-FAST по умолчанию установлено 1024, что дает больший запас при большом количестве узлов или высокой нагрузке.

Способы решения:

  1. Проверьте текущую длину очереди CAN-интерфейса:
ip link show can0 | grep qlen
  1. Временно увеличьте длину очереди. Для обычных систем можно сначала протестировать 128, для систем FLY или машин с несколькими узлами — 1024:
sudo ip link set dev can0 qlen 128
# или
sudo ip link set dev can0 qlen 1024
  1. Постоянная настройка: добавьте параметр txqueuelen 128 или txqueuelen 1024 в файл /etc/network/interfaces.d/can0; если используется systemd-networkd, установите TxQueueLength= в файле .link.

USB CANBUS bridge is discarding / bus_state=off

Сообщение об ошибке: USB CANBUS bridge 'mcu' is discarding!, canstat_mcu: bus_state=off, can state BUS-OFF, ERROR-PASSIVE, затем появляется Timeout with MCU 'xxx' или Serial connection closed.

Причина ошибки: CAN-аппаратура USB-CAN мостового MCU перестала нормально отправлять или принимать сообщения. Обычно это не просто нехватка txqueuelen; чаще причинами являются плохой контакт в CAN-жгуте, неправильное расположение оконечных резисторов, аномалия трансивера или какого-то узла, колебания питания инструментальной платы, слишком длинная шина или слишком много узлов, приводящие к недостаточному запасу сигнала.

Метод排查:

Отключение питания

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

  1. Найдите в klippy.log строки Stats до и после USB CANBUS bridge 'mcu' is discarding!, запишите bus_state, rx_error, tx_error, tx_retries для canstat_mcu.
  2. Если bus_state изменился с active на off или passive, в первую очередь排查 проблемы аппаратной шины, не корректируйте только длину очереди Linux.
  3. После отключения питания убедитесь, что на CAN-шине есть только два оконечных резистора, и они находятся на физических концах шины; измеренное сопротивление CANH-CANL обычно должно быть близко к 60Ω.
  4. Тестируйте, уменьшая количество CAN-узлов: сначала оставьте только основную плату и одну инструментальную плату, затем постепенно добавляйте узлы, чтобы определить, какая инструментальная плата, какой жгут или какое ответвление вызывает аномалию при подключении.
  5. Проверьте питание инструментальной платы и состояние обжима разъемов; если какая-то инструментальная плата сбрасывается, мостовой конец может сначала выдать discarding, а затем другие MCU будут сообщены как тайм-аут.
  6. Для машин с несколькими инструментальными головками или длинными жгутами можно временно снизить скорость CAN для теста или распределить несколько инструментальных головок по двум USB-CAN адаптерам для перекрестной проверки.
  7. Если после обновления Klipper и прошивок всех CAN-узлов ошибка воспроизводится, замените готовый CAN-кабель, USB-CAN адаптер или модуль трансивера инструментальной платы для перекрестного тестирования.

Частичное обнаружение UUID у нескольких CAN-узлов

Сообщение об ошибке: canbus_query.py обнаруживает UUID только некоторых инструментальных плат, или на одной CAN-шине нормально работают любые один-два узла, но при добавлении третьего или более узлов все они перестают обнаруживаться, возникает тайм-аут соединения, BUS-OFF.

Частые причины:

  • Новая инструментальная плата не вошла в режим Katapult / Klipper CAN, или скорость CAN в прошивке не совпадает со скоростью can0 на верхнем компьютере.
  • CANH/CANL какого-то узла перепутаны, плохой обжим, поврежден трансивер, что при подключении парализует всю шину.
  • Оконечные резисторы находятся не на физических концах шины, или на инструментальной плате, распределительной плате, переходной плате ошибочно включены лишние оконечные резисторы.
  • Жгуты нескольких инструментальных головок образуют слишком длинные петли, звездообразные ответвления или неоднородности импеданса, и при увеличении количества узлов запас сигнала становится недостаточным.
  • Инструментальные платы разных партий используют разные bootloader, прошивки Katapult или Klipper, состояние поиска不一致.

Метод排查:

Отключение питания

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

  1. Оставьте только CAN-интерфейс верхнего компьютера и одну целевую инструментальную плату, убедитесь, что UUID одиночного узла обнаруживается.
  2. Поочередно заменяйте короткие кабели, порты и инструментальные платы, чтобы определить, проблема в конкретном узле или возникает только при увеличении количества узлов.
  3. Сверьте bootloader, способ связи прошивки Klipper и скорость CAN для каждой инструментальной платы, убедитесь, что все узлы一致 с can0.
  4. Убедитесь, что canbus_uuid в каждом [mcu xxx] уникален; если устройство уже внесено в конфигурацию, перед поиском можно временно закомментировать соответствующую конфигурацию MCU и перезапустить Klipper.
  5. Измерьте сопротивление CANH-CANL при отключенном питании; около 60Ω обычно означает, что на каждом конце есть по одному 120Ω оконечному резистору; при значительном отклонении сначала разберитесь с оконечными резисторами.
  6. Если любые два узла стабильны, а три и более нестабильны, в первую очередь проверьте топологию шины, длину кабелей, расположение оконечных резисторов и документацию распределительной платы; при необходимости разделите на две CAN-шины.

Узел CAN-шины не отвечает

Сообщение об ошибке: CAN-устройство внезапно отключается, canbus_query.py не может его обнаружить.

Частые причины:

  • Отсутствие или неправильные оконечные резисторы CAN (между CANH-CANL должно быть ровно два резистора по 120 Ом).
  • Ослабление, плохой обжим или неплотное соединение CANH/CANL.
  • CAN-кабель не является витой парой с экраном или проложен параллельно силовым проводам, что вызывает электромагнитные помехи (самая распространенная и скрытая причина).
  • Аномалия питания USB-CAN адаптера.

Ключевые моменты排查 помех:

Аномалии CAN-связи, вызванные электромагнитными помехами, часто проявляются как "периодические" и "случайные": иногда все работает нормально, иногда внезапно теряется связь, а после перезагрузки все восстанавливается. При排查 следует обратить особое внимание на:

  • Трассировку: Проложен ли CAN-кабель связи рядом с проводами моторов, нагревателей, стола в кабель-канале? Сигналы шаговых двигателей с высокоскоростной ШИМ-модуляцией и шум переключения нагревателей являются самыми сильными источниками помех.
  • Заземление экрана: При использовании экранированного кабеля заземлен ли экран только с одной стороны (только на стороне верхнего компьютера)? Заземление с обеих сторон создает контур заземления, что, наоборот, вносит помехи.
  • Расположение оконечных резисторов: Установлены ли оконечные резисторы на физических концах CAN-шины и включены ли они через перемычки на плате, DIP-переключатели или готовые оконечные интерфейсы?
  • Спецификация CAN-кабеля: Используется ли витая пара (шаг скрутки не более нескольких сантиметров)? Параллельные провода (не витая пара) практически не подавляют синфазные помехи.
  • Целостность заземления: Надежно ли заземлены блок питания и корпус машины? Металлическая рама незаземленной машины действует как большая антенна, легко улавливая окружающий шум.

Метод排查:

Отключение питания

Следующие аппаратные проверки должны выполняться только при полностью выключенном принтере и отключенном от сети питании: проверка CANH/CANL, перетрассировка кабелей, регулировка экрана, включение/отключение оконечных резисторов, измерение сопротивления CANH-CANL.

  1. Убедитесь, что на CAN-шине есть ровно два оконечных резистора по 120 Ом, предпочтительно используйте встроенные перемычки, DIP-переключатели или готовые оконечные интерфейсы.
  2. Проверьте надежность подключения CANH/CANL, полностью ли вставлены разъемы.
  3. Сначала отключите питание, затем выполняйте операции. С помощью мультиметра измерьте сопротивление между CANH и CANL (в норме около 60 Ом).
  4. Перетрассируйте кабели: Проложите CAN-кабель связи отдельно от силовых проводов, соблюдая расстояние не менее 2-3 см, избегайте параллельной прокладки.
  5. Убедитесь в заземлении экрана: Экран заземлен только на стороне верхнего компьютера, на стороне инструментальной платы он должен быть изолирован; не разбирайте блок питания и не изменяйте заземление сети самостоятельно.
  6. Используйте candump для мониторинга трафика CAN-шины, наблюдайте, не появляются ли大量 ошибочных кадров (error frames).
  7. Временно снизьте скорость/ускорение печати для теста; если проблема исчезает, это указывает на прямую корреляцию между помехами и интенсивностью работы драйверов двигателей.

Порядок排查 при ненахождении ID

  1. Выполните ip -details link show can0, убедитесь, что CAN0 существует и находится в рабочем состоянии.
  2. Убедитесь, что скорость CAN в прошивке инструментальной платы и основной платы совпадает со скоростью CAN0 на верхнем компьютере.
  3. Если ID устройства уже записан в printer.cfg, сначала временно закомментируйте соответствующую конфигурацию, затем выключите питание примерно на 10 секунд и снова включите для поиска.
  4. Проверьте, не перепутаны ли CAN-H и CAN-L, нет ли обрыва или плохого контакта.
  5. Убедитесь, что на каждом конце CAN-сети есть по одному 120Ω оконечному резистору, и после полного отключения питания измерьте сопротивление между CAN-H и CAN-L; оно должно быть около 60Ω.
  6. Убедитесь, что инструментальная плата или основная плата正常но запитаны.
  7. Убедитесь, что при компиляции прошивки был выбран правильный способ связи.
  8. Если результат поиска показывает Application: CANBOOT или Application: Katapult, сначала прошейте прошивку Klipper, а затем выполните поиск.

Правила установки оконечных резисторов

Отключение питания

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

Тип устройстваТребование к оконечному резисторуИнструкция по эксплуатации
CAN инструментальная платаТребуется 120Ω оконечный резисторВключить через перемычку на плате или DIP-переключатель
CAN-интерфейс основной платыТребуется 120Ω оконечный резисторВключить через перемычку на плате или DIP-переключатель
Преобразовательный модуль типа UTOCОбычно уже имеет встроенный 120Ω резисторДополнительно включать оконечный резистор не нужно

Быстрый порядок排查

  1. Сначала посмотрите устройство: выполните lsusb, убедитесь, что видно 1d50:606f.
  2. Затем посмотрите конфигурацию: выполните ip -details link show can0, убедитесь, что CAN0 существует, скорость правильная, буфер равен 1024.
  3. Наконец, посмотрите аппаратуру: полностью отключите питание и измерьте CAN-H и CAN-L, убедитесь, что сопротивление около 60Ω.

Если после всех проверок проблема остается, попробуйте заменить USB-кабель, CAN-кабель, UTOC или CAN-мостовое устройство для перекрестного тестирования.

Справочная информация по обновлению прошивки CAN-устройств

Этот раздел предназначен для случаев, когда вы уже можете подключиться к CAN-сети и вам нужно обновить прошивку основной платы или инструментальной платы через CAN. Имена прошивок и способы компиляции для разных продуктов различаются, поэтому сначала скомпилируйте новую прошивку в соответствии с учебником для соответствующего продукта.

Подготовка

  1. Скомпилируйте новую прошивку в соответствии с учебником для продукта.
  2. Убедитесь, что CAN UUID устройства найден, или что canbus_uuid: для этого устройства уже заполнен в printer.cfg.
  3. Остановите службу 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 обычно означает успешную прошивку.

Loading...

Действия после обновления

После завершения обновления перезапустите Klipper:

sudo systemctl start klipper

Если после обновления подключиться не удается, заново найдите CAN ID и убедитесь, что canbus_uuid: в printer.cfg все еще правильный.

Итоговый контрольный список

Если CAN ID не найден или Klipper не может подключиться к CAN-устройству, можно быстро проверить по следующему порядку:

  1. can0 распознается системой.
  2. bitrate совпадает со скоростью CAN, установленной при компиляции прошивки.
  3. qlen или txqueuelen равен 1024.
  4. CAN-H и CAN-L не перепутаны.
  5. Оконечные резисторы на обоих концах CAN-шины правильные.
  6. Питание инструментальной платы или основной платы正常ное.
  7. Правильно выбран способ связи в прошивке.
  8. В printer.cfg используется фактически найденный canbus_uuid:.
  9. В одном [mcu] не включены одновременно serial: и canbus_uuid:.
Loading...