Поиск и устранение ошибок 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 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-сети, распиновку, оконечный резистор и скорость прошивки |
Duplicate canbus_uuid | Несколько конфигураций MCU используют один и тот же CAN UUID | Заново найти UUID, убедиться, что каждый [mcu xxx] уникален |
Unknown canbus_uuid xxx | CAN UUID из конфигурации отсутствует в результатах поиска текущей сети | Закомментировать соответствующую конфигурацию MCU, затем заново найти и вписать |
Can not update MCU 'xxx' config as it is shutdown | CAN 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.
Способы решения:
- Если используется USB-CAN адаптер candlelight, обновите прошивку до v2.0 или выше.
- Если используется режим моста Klipper USB-to-CAN, убедитесь, что мостовой узел прошит прошивкой Klipper v0.12.0+.
- Если
bytes_invalidпродолжает расти, значит, основная причина не устранена; необходимо продолжить排查 версию ядра и прошивки. - Примечание: Увеличение
bytes_invalidне вызвано аппаратными проблемами, такими как подключение или оконечные резисторы; это можно исправить только обновлением программного обеспечения/прошивки.
Недостаточная очередь CAN-шины приводит к Timer too close
Сообщение об ошибке: При связи по CAN-шине появляется MCU 'xxx' shutdown: Timer too close.
Причина ошибки: Длина очереди по умолчанию (qlen), установленная ядром Linux для сетевого интерфейса CAN, обычно равна 10, что мало для требований Klipper к высокочастотной связи с малой задержкой. В официальных примерах Klipper часто используется txqueuelen 128; в FlyOS-FAST по умолчанию установлено 1024, что дает больший запас при большом количестве узлов или высокой нагрузке.
Способы решения:
- Проверьте текущую длину очереди CAN-интерфейса:
ip link show can0 | grep qlen
- Временно увеличьте длину очереди. Для обычных систем можно сначала протестировать
128, для систем FLY или машин с несколькими узлами —1024:
sudo ip link set dev can0 qlen 128
# или
sudo ip link set dev can0 qlen 1024
- Постоянная настройка: добавьте параметр
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-узлы и не подключайте/отключайте жгуты инструментальных плат, когда устройство находится под напряжением.
- Найдите в
klippy.logстрокиStatsдо и послеUSB CANBUS bridge 'mcu' is discarding!, запишитеbus_state,rx_error,tx_error,tx_retriesдляcanstat_mcu. - Если
bus_stateизменился сactiveнаoffилиpassive, в первую очередь排查 проблемы аппаратной шины, не корректируйте только длину очереди Linux. - После отключения питания убедитесь, что на CAN-шине есть только два оконечных резистора, и они находятся на физических концах шины; измеренное сопротивление CANH-CANL обычно должно быть близко к
60Ω. - Тестируйте, уменьшая количество CAN-узлов: сначала оставьте только основную плату и одну инструментальную плату, затем постепенно добавляйте узлы, чтобы определить, какая инструментальная плата, какой жгут или какое ответвление вызывает аномалию при подключении.
- Проверьте питание инструментальной платы и состояние обжима разъемов; если какая-то инструментальная плата сбрасывается, мостовой конец может сначала выдать
discarding, а затем другие MCU будут сообщены как тайм-аут. - Для машин с несколькими инструментальными головками или длинными жгутами можно временно снизить скорость CAN для теста или распределить несколько инструментальных головок по двум USB-CAN адаптерам для перекрестной проверки.
- Если после обновления 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 полностью выключите принтер и отключите от источника питания.
- Оставьте только CAN-интерфейс верхнего компьютера и одну целевую инструментальную плату, убедитесь, что UUID одиночного узла обнаруживается.
- Поочередно заменяйте короткие кабели, порты и инструментальные платы, чтобы определить, проблема в конкретном узле или возникает только при увеличении количества узлов.
- Сверьте bootloader, способ связи прошивки Klipper и скорость CAN для каждой инструментальной платы, убедитесь, что все узлы一致 с
can0. - Убедитесь, что
canbus_uuidв каждом[mcu xxx]уникален; если устройство уже внесено в конфигурацию, перед поиском можно временно закомментировать соответствующую конфигурацию MCU и перезапустить Klipper. - Измерьте сопротивление CANH-CANL при отключенном питании; около
60Ωобычно означает, что на каждом конце есть по одному120Ωоконечному резистору; при значительном отклонении сначала разберитесь с оконечными резисторами. - Если любые два узла стабильны, а три и более нестабильны, в первую очередь проверьте топологию шины, длину кабелей, расположение оконечных резисторов и документацию распределительной платы; при необходимости разделите на две CAN-шины.
Узел CAN-шины не отвечает
Сообщение об ошибке: CAN-устройство внезапно отключается, canbus_query.py не может его обнаружить.
Частые причины:
- Отсутствие или неправильные оконечные резисторы CAN (между CANH-CANL должно быть ровно два резистора по 120 Ом).
- Ослабление, плохой обжим или неплотное соединение CANH/CANL.
- CAN-кабель не является витой парой с экраном или проложен параллельно силовым проводам, что вызывает электромагнитные помехи (самая распространенная и скрытая причина).
- Аномалия питания USB-CAN адаптера.
Ключевые моменты排查 помех:
Аномалии CAN-связи, вызванные электромагнитными помехами, часто проявляются как "периодические" и "случайные": иногда все работает нормально, иногда внезапно теряется связь, а после перезагрузки все восстанавливается. При排查 следует обратить особое внимание на:
- Трассировку: Проложен ли CAN-кабель связи рядом с проводами моторов, нагревателей, стола в кабель-канале? Сигналы шаговых двигателей с высокоскоростной ШИМ-модуляцией и шум переключения нагревателей являются самыми сильными источниками помех.
- Заземление экрана: При использовании экранированного кабеля заземлен ли экран только с одной стороны (только на стороне верхнего компьютера)? Заземление с обеих сторон создает контур заземления, что, наоборот, вносит помехи.
- Расположение оконечных резисторов: Установлены ли оконечные резисторы на физических концах CAN-шины и включены ли они через перемычки на плате, DIP-переключатели или готовые оконечные интерфейсы?
- Спецификация CAN-кабеля: Используется ли витая пара (шаг скрутки не более нескольких сантиметров)? Параллельные провода (не витая пара) практически не подавляют синфазные помехи.
- Целостность заземления: Надежно ли заземлены блок питания и корпус машины? Металлическая рама незаземленной машины действует как большая антенна, легко улавливая окружающий шум.
Метод排查:
Следующие аппаратные проверки должны выполняться только при полностью выключенном принтере и отключенном от сети питании: проверка CANH/CANL, перетрассировка кабелей, регулировка экрана, включение/отключение оконечных резисторов, измерение сопротивления CANH-CANL.
- Убедитесь, что на CAN-шине есть ровно два оконечных резистора по 120 Ом, предпочтительно используйте встроенные перемычки, DIP-переключатели или готовые оконечные интерфейсы.
- Проверьте надежность подключения CANH/CANL, полностью ли вставлены разъемы.
- Сначала отключите питание, затем выполняйте операции. С помощью мультиметра измерьте сопротивление между CANH и CANL (в норме около 60 Ом).
- Перетрассируйте кабели: Проложите CAN-кабель связи отдельно от силовых проводов, соблюдая расстояние не менее 2-3 см, избегайте параллельной прокладки.
- Убедитесь в заземлении экрана: Экран заземлен только на стороне верхнего компьютера, на стороне инструментальной платы он должен быть изолирован; не разбирайте блок питания и не изменяйте заземление сети самостоятельно.
- Используйте
candumpдля мониторинга трафика CAN-шины, наблюдайте, не появляются ли大量 ошибочных кадров (error frames). - Временно снизьте скорость/ускорение печати для теста; если проблема исчезает, это указывает на прямую корреляцию между помехами и интенсивностью работы драйверов двигателей.
Порядок排查 при ненахождении 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, а затем выполните поиск.
Правила установки оконечных резисторов
Перед регулировкой перемычек оконечных резисторов, DIP-переключателей или переподключением CAN-кабеля полностью выключите принтер и отключите от источника питания.
| Тип устройства | Требование к оконечному резистору | Инструкция по эксплуатации |
|---|---|---|
| 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:.