July 18

Перепрошивка bootloader STM32 (SKR MINI E3 V3) через ST-LINK V2 clone

Случилась у меня проблемка, что я решил перезаписать прошивку на плате SKR MINI E3 V3 и скомпилил чуть под другой чип и с большим объёмом bootloader'а,
что привело к тому, что плата не выходила на связь с Klipper и не была доступна по USB, после чего начались попытки разобраться сперва с Jlink клоном, но с ним как-то сразу не задалось на mac os, поэтому я взял ST-LINK, Pi4 и начал пробовать.

Питание подается на плату через micro-usb, поэтому 3.3v не подключено.

Как это выглядело в живую:


Нашёл гайд, где человек рассказывает, как можно записать,
но у меня был нюанс, что плата не реагировала на RST сигнал с STшки,
после чего я решил тыкать на RST на плате и ловить через st-info статус.

В итоге это сработало, и на ST-LINK загорелся синий сигнал,
а в терминале я увидел следующее:

pi@mars:~ $ st-info --probe --connect-under-reset
Found 1 stlink programmers
version: V2J29S7
serial:  630060001200003632574E4E
flash: 524288 (pagesize: 2048)
sram:  147456
chipid:  0x467
dev-type:  STM32G0Bx_G0Cx

После чего надо быстро выполнить вот такую команду:

openocd -f interface/stlink.cfg -f target/stm32g0x.cfg \
  -c "init; reset halt; stm32g0x unlock 0; reset halt; \
  stm32g0x mass_erase 0; \
  program SKR-MINI-E3-V3.0-bootloader.bin verify reset exit 0x08000000"

Эта команда затирает и записывает прошивку, после чего можно отключить ST-LINK и попробовать закинуть прошивку firmware.bin на SD карту.

Если на плате при вставлении моргнет диод в углу

Небольшой гайд, как поставить всё добро, чтобы завелось.
Из ещё нюансов — в гайде, который я вставлю сюда, говорится про версию 1.6.0,
но она просто не скомпилилась на Raspberry,
советую — ставить сразу 1.8.0, она актуальная.

sudo apt-get update
cd /usr/local/lib
sudo rm -rf all libstlink*
rm ~/Repo/stlink/*
rmdir ~/Repo/stlink

# Установим зависимости
sudo apt-get install gcc build-essential cmake libusb-1.0 libusb-1.0-0-dev libgtk-3-dev pandoc
sudo apt-get install debhelper
sudo apt-get install git
sudo apt-get install gdb
sudo apt-get install openocd

# Клонируем stlink
mkdir ~/Repo
cd ~/Repo
git clone -b v1.8.0 https://github.com/stlink-org/stlink.git
cd stlink
make clean
make release
cd build/Release && sudo make install

# Обновим ldconfig
sudo ldconfig

# Скопируем udev-правила
sudo cp ~/Repo/stlink/config/udev/rules.d/49-stlink* /etc/udev/rules.d
sudo udevadm control --reload-rules
sudo udevadm trigger

# Добавим пользователя в группу plugdev (на всякий случай)
sudo groupadd plugdev
sudo adduser $USER plugdev

# Настройки для modprobe
sudo cp ~/Repo/stlink/config/modprobe.d/stlink_v1.conf /etc/modprobe.d

# Перезапускаем систему
reboot

Bootloader был взят от сюда:
https://github.com/GadgetAngel/BTT_SKR_13_14_14T_SD-DFU-Bootloader/tree/main/bootloader_bin/backed_up_original_bootloaders/SKR%20mini%20E3%20V3.0/Bootloader

Сам гайд:
https://github.com/GadgetAngel/BTT_SKR_13_14_14T_SD-DFU-Bootloader/blob/main/Guide%20st-flash%20Utility%20for%20ST-Link-V2-Clones%20With%20NRST%20for%20accessing%20STM32%20Processors%20using%20LINUX.pdf