Прошивка контроллера¶
Прошивка (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 или другой программатор.
Общий маршрут¶
Перед прошивкой нормальный порядок такой:
- Узнать точную модель платы.
- Узнать точный микроконтроллер.
- Найти распиновку, схему и инструкцию производителя.
- Понять, нужна автономная прошивка или Klipper MCU firmware.
- Найти готовую конфигурацию или пример для этой платы.
- Выбрать правильный способ прошивки.
- Собрать или скачать правильный файл.
- Перевести плату в режим прошивки.
- Записать firmware.
- Проверить, что плата появилась в системе.
- Проверить связь с хостом и базовые пины без нагрузки.
Нельзя выбирать настройки прошивки "примерно". Для 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.
Обычно:
- Зажать
BOOTSEL. - Подключить USB.
- Плата появится как диск
RPI-RP2. - Скопировать
.uf2файл. - Диск исчезнет, плата перезагрузится.
У Pico BOOTSEL находится в ROM микроконтроллера, поэтому его нельзя случайно стереть обычной прошивкой. Это делает RP2040 удобным для новичков.
STM32: DFU, ST-LINK, SD-карта¶
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 обычно делают так:
В 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.
Материалы по теме¶
- Klipper: Installation - Building and flashing the micro-controller - официальный маршрут
make menuconfig,makeи проверки serial path. - Klipper: Bootloaders - почему bootloader у разных плат отличается, зачем нужен bootloader offset и как прошивают разные MCU.
- Raspberry Pi Documentation: Pico-series microcontrollers - BOOTSEL, UF2 и особенности Pico/RP2040/RP2350.
- Raspberry Pi Documentation: C/C++ SDK - Your First Binaries - официальный пример BOOTSEL, USB mass storage
RPI-RP2и прошивки Pico через UF2. - STMicroelectronics: STM32CubeProgrammer - официальный инструмент STM32 для прошивки через ST-LINK/SWD, UART, USB DFU, SPI, I2C и CAN bootloader.