Исправление незапуска прошивки RP2040
Метод исправления для плат инструментов FLY (FLY-SHT36, FLY-SB2040, FLY-MMU и др.) на основе контроллера RP2040, когда после самостоятельной компиляции прошивки Katapult / Klipper возникает проблема с незапуском или нестабильным запуском. Заводская прошивка предоставляется производителем, и обращаться к этой странице нужно только в случае возникновения проблем с самостоятельно скомпилированной прошивкой.
- Эта страница предназначена для продвинутых операций, перед изменением исходного кода рекомендуется сделать резервную копию оригинальной прошивки.
- Katapult — это загрузочная прошивка BL. Если Katapult установлен и он загружает Klipper, рекомендуется изменять обе прошивки; если Katapult не используется, достаточно изменить только Klipper.
Симптомы неисправности
- После прошивки самостоятельно собранной прошивки инструментальная плата не реагирует, USB не определяется или CAN не подключается.
- После включения питания иногда не запускается, после многократного выключения и включения питания иногда удаётся восстановить нормальную работу.
- Katapult не запускается или не может быть опрошен хостом.
klippy.logПодсказка на китайском языке указывает на то, что MCU не может подключиться или запуститься с ошибкой.
Распространенные причины
Загрузочный код RP2040 через XOSC_STARTUP_DELAY Регистр задаёт время ожидания стабилизации внешнего кварцевого генератора. Эталонный дизайн RP2040 настраивается на 1 мс, а по умолчанию в Klipper и Katapult — 1 мс:
xosc_hw->startup = DIV_ROUND_UP(FREQ_XOSC, 1000 * 256); // 1ms
При слишком коротком времени ожидания запуск может завершиться неудачей или работа будет нестабильной.
Повысить стабильное время ожидания до 6 мс (это значение по умолчанию в официальном pico-sdk для Raspberry Pi; подходит для кристаллических генераторов с медленным запуском):
xosc_hw->startup = DIV_ROUND_UP(FREQ_XOSC, 1000 * 256) * 6; // 6ms
Изменение исходного кода Katapult
- Используйте одну команду для изменения
~/katapult/src/rp2040/main.c(одновременно заменяя значение и комментарий):
sed -i 's/1000 \* 256);/1000 * 256) * 6;/; s|// 1ms|// 6ms|' ~/katapult/src/rp2040/main.c
- Перекомпиляция (в menuconfig выберите RP2040 и соответствующий интерфейс согласно исходному способу связи):
cd ~/katapult
make menuconfig
make
Скомпилированный продукт находится в ~/katapult/out/ В каталоге просто перезапишите загрузочную прошивку.
Изменение исходного кода Klipper
- Используйте одну команду для изменения
~/klipper/src/rp2040/main.c(одновременно заменяя значение и комментарий):
sed -i 's/1000 \* 256);/1000 * 256) * 6;/; s|// 1ms|// 6ms|' ~/klipper/src/rp2040/main.c
- Перекомпиляция:
cd ~/klipper
make menuconfig
make
Скомпилированные файлы находятся в каталоге ~/klipper/out/ (klipper.bin или klipper.uf2), перепрошейте прошивку.
Проверить, вступили ли изменения в силу
- Проверьте, были ли изменены исходники:
grep -n "xosc_hw->startup" ~/katapult/src/rp2040/main.c ~/klipper/src/rp2040/main.c
В выводе должно присутствовать 1000 * 256) * 6, комментарий — // 6ms.
- Проверка после прошивки: после подачи питания плата инструмента должна нормально запуститься, Klipper должен нормально подключаться к MCU; при использовании Katapult после входа в режим прошивки устройство должно корректно определяться хостом.
Справочная информация по конфигурации
Прошивка загрузчика: Прошивка загрузчика Katapult для FLY-SHT36 v3 Компиляция прошивки: Компиляция прошивки Klipper для FLY-SHT36 v3
Для других продуктов на RP2040 (FLY-SB2040, FLY-MMU и т.д.) обращайтесь к соответствующим разделам прошивки.