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

Компиляция прошивки CAN

Перед прошивкой

Проверка текущего режима и пути действий

  • Важное примечание: Если плата инструмента уже находится в режиме Klipper-CAN, то после компиляции прошивки её можно прошить напрямую с помощью команды. Команда автоматически переведёт её в режим Katapult и завершит прошивку.
  • Заводское состояние: Плата предварительно прошита прошивкой Katapult в режиме CAN со скоростью 1M.
  • Определение состояния (по LED): Если встроенный светодиод мигает (как показано на рисунке), это означает, что плата находится в режиме Katapult и готова к прошивке.
    Loading...
  • Ненормальный режим: Если светодиод не мигает, это означает, что прошивка не является Katapult. Вам необходимо сначала перепрошить её, следуя инструкциям по ссылке ниже: Нажмите здесь для прошивки прошивки Katapult

Настройка переключателей и физическое подключение

  1. Настройка переключателей: Независимо от текущего состояния, сначала установите встроенный DIP-переключатель в режим CAN и включите переключатель 120Ω (как показано на рисунке ниже).

    Loading...
  2. Подключение устройства: Используйте CAN-кабель для подключения платы инструмента к UTOC или к материнской плате с уже прошитой мостовой прошивкой. Схема подключения показана ниже:

    Loading...
  3. Ключевая проверка (терминальный резистор): При полностью обесточенной системе измерьте мультиметром сопротивление между контактами CAN_H и CAN_L.

    УстройствоИнструкция по эксплуатации
    Плата инструментаНайдите и установите перемычку с маркировкой 120Ω.
    Материнская платаПри подключении к материнской плате также установите перемычку 120Ω.
    Модуль UTOCИмеет встроенный резистор.

    Как проверить:

    1. Убедитесь, что система полностью обесточена.
    2. С помощью мультиметра измерьте сопротивление между CAN-H и CAN-L на CAN-разъёме платы инструмента.
    3. Интерпретация результатов:
      • ~60 Ом: Нормально, резисторы на обоих концах подключены корректно.
      • ~140 Ом: Возможно, CAN-H и CAN-L перепутаны местами.
      • ~120 Ом: Резистор 120Ω не установлен или произошёл обрыв линии.
      • ~40 Ом: Возможно, присутствуют лишние резисторы, проверьте промежуточные узлы.

Начало компиляции

Краткое руководство по компиляции прошивки

Примечания

  • Сеть: Убедитесь, что хост-компьютер (Raspberry Pi и т.п.) подключен к сети.
  • Способ входа: Необходимо входить через SSH по сети, последовательный порт отключен.
  • Раскладка клавиатуры: Держите клавиатуру в английском полуширинном режиме

Вход по SSH и переключение пользователей

Используйте MobaXterm, PuTTY и другие инструменты для входа по SSH на хост-компьютер.

Переключение пользователя:

  • Обычная система (официальная система Raspberry Pi и т.п.)
    Запрещено использовать root, необходимо переключиться на обычного пользователя:
    su <имя_пользователя>
  • FLY хост-компьютер (система FlyOS-FAST)
    Поддерживается только вход от пользователя root (пароль: mellow)

Руководство по компиляции прошивки

В интерфейсе конфигурации прошивки Klipper поддерживается только управление с клавиатуры, мышь использовать нельзя.

КлавишаФункция
↑ / ↓Перемещение курсора вверх/вниз, выбор пункта меню
Enter / ПробелПодтверждение выбора, отметка опции или вход в подменю
ESCВозврат в предыдущее меню
QВыход из интерфейса конфигурации
YПри выходе, если есть подсказка, нажмите Y для сохранения конфигурации

Начало компиляции прошивки

Ниже описано, как компилировать прошивку:

  1. Подключитесь по SSH, введите следующую команду и нажмите Enter:

    cd ~/klipper && rm -rf ~/klipper/.config && rm -rf ~/klipper/out && make menuconfig

    Здесь rm -rf ~/klipper/.config && rm -rf ~/klipper/out используется для очистки предыдущей конфигурации компиляции и прошивки; make menuconfig используется для открытия интерфейса конфигурации прошивки Klipper.

  2. Настройте параметры по порядку, следуя приведенному ниже списку, переходя к следующему пункту только после завершения предыдущего.

    1启用 Enable extra low-level configuration options
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    2Micro-controller Architecture 选择 Raspberry Pi RP2040/RP235x
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    3Processor model 选择 rp2040
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    4Bootloader offset 选择 16KiB bootloader
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    5Communication Interface 选择 CAN bus
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    6CAN RX gpio number 设置为 1
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    7CAN TX gpio number 设置为 0
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    8CAN bus speed 设置为 1000000
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    9启用 Optimize stepper code for 'step on both edges'
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    10GPIO pins to set at micro-controller startup 设置为 !gpio5
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    11GPIO state at micro-controller startup 选择 Not set

    此项是 FLYOS-Klipper 功能。通常保持 Not set;如需设置全部 GPIO 的启动状态,请先阅读 GPIO 启动状态使用说明

    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    12Q 键退出配置界面
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    13出现 Save configuration 时按 Y 保存配置
    Quit
    Save configuration?
    (Y)es(N)o(C)ancel
  3. После завершения двух последних шагов выше нажмите Q для выхода из интерфейса конфигурации, затем нажмите Y для сохранения настроек.

  4. Вернувшись в командную строку, введите следующую команду и нажмите Enter, чтобы начать компиляцию:

    make -j4
    root@flyos-11e5f8 ~/klipper # make -j4
    Compiling out/src/../lib/can2040/can2040.o
    Compiling out/src/generic/canserial.o
    Compiling out/src/generic/canbus.o
    Compiling out/src/../lib/fast-hash/fasthash.o
    Compiling out/src/rp2040/hard_pwm.o
    Compiling out/src/rp2040/spi.o
    Compiling out/src/rp2040/i2c.o
    Preprocessing out/src/rp2040/rpxxxx_link.ld
    Building out/compile_time_request.o
    Version: XXXX
    Linking out/klipper.elf
    Creating bin file out/klipper.bin

    终端末尾出现 Linking out/klipper.elf Creating bin file out/klipper.bin,即表示编译成功。 实际编译时,部分 Compiling 行和 Version 会随 Klipper 与系统版本变化。

Поиск ID и прошивка

Запрос UUID CAN-шины

Перед операцией
  • Рекомендуется выполнять запрос ID и прошивку вне режима печати, чтобы избежать помех процессу печати.
  • Прошивка Katapult (CANBoot) и прошивка Klipper для одной и той же платы/инструментальной платы используют одинаковый CAN ID.
Предварительные условия

Убедитесь, что выполнены следующие условия, иначе поиск CAN ID может быть невозможен:

  1. Сеть CAN на верхнем компьютере правильно настроена
  2. Скорость CAN инструментальной платы полностью совпадает со скоростью верхнего компьютера (при несовпадении скоростей связь невозможна)
  3. После выполнения команды lsusb должно отображаться устройство 1d50:606f (USB-CAN адаптер)

Команда поиска (выбор в зависимости от системы)

  • Команда поиска для обычного верхнего компьютера
    ~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
  • Команда поиска для FLY верхнего компьютера
    python3 ~/klipper/scripts/canbus_query.py can0

Пояснение результатов поиска

Случай 1: Плата/инструментальная плата с прошивкой Klipper

  • Отображение: Отображается один CAN ID с указанием Application: Klipper
  • Пояснение: Устройство работает под управлением прошивки Klipper, можно использовать напрямую. Этот ID может принадлежать как основной плате, так и инструментальной плате.
  • Способ различения: Отключите CAN-кабель инструментальной платы и выполните поиск снова. Если этот ID исчезнет, он принадлежит инструментальной плате; если ID останется, он принадлежит основной плате.
Loading...

Случай 2: Основная плата + инструментальная плата, ожидающая прошивки

  • Отображение: Отображаются два CAN ID
  • Пояснение: Основная плата работает под управлением прошивки Klipper, инструментальная плата работает под управлением прошивки CanBoot, ожидает прошивки.
Loading...

Случай 3: UTOC + инструментальная плата, ожидающая прошивки

  • Отображение: Сам UTOC не отображает ID, отображается только ID инструментальной платы
  • Пояснение: UTOC выступает только в качестве моста, необходимо убедиться, что инструментальная плата находится в режиме CanBoot.
Loading...

Случай 4: ID не отображается

  • Отображение: Никакие ID не отображаются
  • Возможные причины:
    1. Шина CAN занята Klipper
    2. Ошибка конфигурации скорости CAN0 на верхнем компьютере
    3. Неисправность физического подключения
    4. Устройство не вошло в режим CanBoot
Loading...

Важное примечание
  • Состояние ожидания прошивки: Если инструментальная плата находится в режиме CanBoot, будет отображаться Application: CanBoot, а светодиод прошивки будет мигать. В этом состоянии можно выполнять прошивку.
  • Обработка занятости ID: Если устройство уже работает под управлением прошивки Klipper и ID указан в конфигурационном файле, ID не будет отображаться (занят Klipper). Для повторного отображения необходимо заблокировать этот ID в конфигурации и выполнить полное отключение и перезапуск.
Устранение неисправностей

Если не удается найти UUID, обратитесь к: Руководство по устранению неисправностей CAN

Прошивка

Команда прошивки

  1. Замените 241696050c56 в команде ниже на фактически найденный UUID
  2. Примечание: После параметра -u должен быть пробел
Информация о версии
  • FlyOS-FAST 1.3.8 и выше или системы, обновлявшие Klipper после 9 апреля 2026 года, используйте новую команду:

    python3 ~/klipper/lib/katapult/flashtool.py -u 241696050c56
  • Старые версии системы (FAST до 1.3.8 или Klipper не обновлялся до 9 апреля 2026 года), используйте старую команду:

    python3 ~/klipper/lib/canboot/flash_can.py -u 241696050c56

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

Появление сообщения CAN Flash Success означает успешную прошивку:

Loading...

Обновление прошивки

Метод обновления

Для обновления прошивки необходимо:

  1. Перекомпилировать прошивку
  2. Убедиться, что CAN ID устройства доступен для запроса (или Klipper подключен к устройству)
  3. Выполнить ту же команду прошивки
Информация о версии
  • FlyOS-FAST 1.3.8 и выше или системы, обновлявшие Klipper после 9 апреля 2026 года:

    python3 ~/klipper/lib/katapult/flashtool.py -u <MCU ID>
  • Старые версии системы (FAST до 1.3.8 или Klipper не обновлялся до 9 апреля 2026 года):

    python3 ~/klipper/lib/canboot/flash_can.py -u <MCU ID>

Пример успешного обновления

Loading...

Проверка запуска прошивки

  • Если прошивка запустилась нормально, светодиод загорится.
    Loading...
Loading...