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

Прошивка контроллера

Прошивка (firmware) - это программа, которая записывается во flash-память микроконтроллера. Без прошивки плата не знает, что делать с пинами, датчиками, вентиляторами и интерфейсами.

Важно не путать прошивку и конфигурацию. Прошивка записывается в контроллер. Конфигурация Klipper обычно лежит на хосте в printer.cfg и говорит уже прошитой MCU, какие пины и параметры использовать.

Firmware, bootloader, config

Три разных понятия:

  • firmware - основная программа микроконтроллера;
  • bootloader - маленькая программа, которая помогает записывать основную прошивку;
  • config - настройки устройства, например printer.cfg в Klipper.

Bootloader запускается первым и может принимать новый firmware через USB, UART, DFU, SD-карту, CAN или другой механизм. Если случайно стереть bootloader, прошивать плату может стать сложнее: иногда понадобится ST-LINK/SWD, USB-UART или другой программатор.

Общий маршрут

Перед прошивкой нормальный порядок такой:

  1. Узнать точную модель платы.
  2. Узнать точный микроконтроллер.
  3. Найти распиновку, схему и инструкцию производителя.
  4. Понять, нужна автономная прошивка или Klipper MCU firmware.
  5. Найти готовую конфигурацию или пример для этой платы.
  6. Выбрать правильный способ прошивки.
  7. Собрать или скачать правильный файл.
  8. Перевести плату в режим прошивки.
  9. Записать firmware.
  10. Проверить, что плата появилась в системе.
  11. Проверить связь с хостом и базовые пины без нагрузки.

Нельзя выбирать настройки прошивки "примерно". Для Klipper особенно важны тип микроконтроллера, bootloader offset, clock reference и communication interface.

Типовые способы прошивки

Разные платы прошиваются по-разному:

Основные способы прошивки контроллера

Частые варианты:

  • USB mass storage / UF2 - плата появляется как диск, на неё копируют .uf2;
  • USB DFU - плата входит в DFU-режим, прошивка пишется через USB;
  • USB serial / UART bootloader - прошивка через serial-порт;
  • ST-LINK / SWD - программатор подключается к SWD-пинам;
  • SD-карта - некоторые 3D-принтерные платы прошиваются файлом на карте;
  • CAN/Katapult/CanBoot - прошивка через CAN-bootloader;
  • Arduino bootloader - прошивка скетча через Arduino IDE или avrdude.

Нет одного универсального метода для всех плат. Метод определяется конкретной платой, bootloader и прошивкой.

RP2040 и UF2

Для Raspberry Pi Pico и многих RP2040-плат самый простой способ - BOOTSEL и UF2.

Обычно:

  1. Зажать BOOTSEL.
  2. Подключить USB.
  3. Плата появится как диск RPI-RP2.
  4. Скопировать .uf2 файл.
  5. Диск исчезнет, плата перезагрузится.

У Pico BOOTSEL находится в ROM микроконтроллера, поэтому его нельзя случайно стереть обычной прошивкой. Это делает RP2040 удобным для новичков.

STM32-платы прошиваются разными способами.

Возможные варианты:

  • встроенный USB DFU bootloader;
  • UART bootloader;
  • ST-LINK/SWD;
  • SD-карта на printer board;
  • bootloader производителя платы;
  • CAN bootloader.

Для STM32 часто важен bootloader offset. Например, если bootloader занимает первые 8 KiB, Klipper нужно собирать с соответствующим offset. Если выбрать неверно, плата может не стартовать после прошивки.

ST-LINK/SWD полезен как более низкоуровневый способ: через него часто можно восстановить плату, если обычный bootloader не работает. Но для этого нужны SWD-пины, программатор и понимание подключения.

Klipper: make menuconfig

Для Klipper firmware обычно делают так:

cd ~/klipper
make menuconfig
make

В make menuconfig выбирают:

  • micro-controller architecture;
  • processor model;
  • bootloader offset;
  • clock reference;
  • communication interface: USB, serial, CAN и т.д.;
  • иногда дополнительные параметры конкретной платы.

Правильные значения часто написаны в комментариях в готовом config-файле платы. Если такой config есть, сначала читай его верхние комментарии.

После сборки файл прошивки обычно появляется в ~/klipper/out/. Дальше его записывают тем способом, который подходит конкретной плате.

Проверка после прошивки

После прошивки нужно проверить не только "прошивальщик написал success".

Проверь:

  • появляется ли устройство в системе;
  • есть ли /dev/serial/by-id/..., если используется USB/serial;
  • виден ли canbus_uuid, если используется CAN;
  • совпадает ли путь в printer.cfg;
  • нет ли ошибок связи в Klipper;
  • пины соответствуют распиновке именно этой платы;
  • базовые входы/выходы работают без силовой нагрузки;
  • вентилятор/MOSFET/SSR выключены в безопасном состоянии.

Для первой проверки не подключай сразу нагреватель как финальную нагрузку. Сначала проверь связь, датчики и логику на безопасных условиях.

Что сохранить перед прошивкой

Перед заменой firmware полезно сохранить:

  • текущий printer.cfg;
  • старую версию firmware, если она есть;
  • модель платы и микроконтроллера;
  • найденный serial path или CAN UUID;
  • фото подключения;
  • распиновку;
  • настройки make menuconfig;
  • ссылку на инструкцию производителя.

Если что-то пойдёт не так, эти данные помогут быстро восстановиться.

Что может пойти не так

Частые проблемы:

  • USB-кабель только для зарядки;
  • плата не вошла в bootloader;
  • выбран не тот микроконтроллер;
  • выбран неверный bootloader offset;
  • выбран неправильный communication interface;
  • прошивка записана, но плата ищется не там;
  • serial path изменился после переподключения;
  • SD-карта не читается платой;
  • файл прошивки назван не так, как требует bootloader платы;
  • драйвер DFU/USB-UART не установлен;
  • плата питается с двух сторон;
  • после прошивки конфиг ссылается на старые пины.

Не надо в ответ на первую ошибку менять всё сразу. Лучше идти по цепочке: кабель, режим bootloader, модель MCU, настройки сборки, способ записи, появление устройства в системе, конфигурация.

Прошивка и безопасность

Прошивка может включать и выключать выходы, но она не заменяет аппаратную безопасность.

Для нагревателей нужны:

  • правильный силовой ключ;
  • предохранитель;
  • независимая термозащита;
  • корректный датчик температуры;
  • безопасный корпус;
  • проверка поведения при ошибке прошивки, зависании MCU или потере связи.

После прошивки контроллера не подключай нагреватель без проверки, что пин выбран правильно, логика включения не инвертирована, а аварийные ограничения работают.

Типовые ошибки

  • путают firmware и printer.cfg;
  • прошивают файл от похожей, но другой платы;
  • не читают верхние комментарии готового Klipper config;
  • выбирают неправильный bootloader offset;
  • стирают bootloader без понимания последствий;
  • используют зарядный USB-кабель;
  • не переводят плату в режим прошивки;
  • ищут CAN-плату в /dev/serial/by-id;
  • ищут USB-serial плату через canbus_uuid;
  • подключают силовую нагрузку до проверки пинов;
  • не сохраняют старую конфигурацию.

Главное

Прошивка - это программа внутри контроллера, а конфигурация - настройки её работы. Для каждой платы нужно знать точную модель, микроконтроллер, bootloader, способ прошивки и параметры сборки.

Для RP2040 часто проще всего UF2/BOOTSEL. Для STM32 нужно смотреть конкретную плату: DFU, ST-LINK, SD-карта, UART или CAN bootloader. Для Klipper первым делом ищи готовую конфигурацию и комментарии к make menuconfig.

Материалы по теме