====== STM32 - Firmware sichern ====== ===== YouTube Video #71 ===== {{youtube>rip6uoI60-4?half}} \\ ===== Warum Linux ? ===== * V2 Programmer unter Windows teilweise Probleme macht (Clone) * Alle Programmer unter Linux sofort laufen (Treiber) * Fehlermeldungen teilweise offentsichtlicher ===== Warum sichern ? ===== * Original Firmware sichern * Aktuelle Firmware vor Update sichern * Bootloader extrahieren * Werkszustand wieder herstellen ===== STM32 St-Link Typen ===== * V2 * V2.1 (Clone) * V3 MINIE ===== St-Link Pins ===== ^ Funktion ^ ST-Link 2.x Clone ^ ST-Link V3Minie ^ Notes ^ Kabel ^ | 3,3V | 3V3 (nicht empfohlen) | - | | **Rot** | | GND | GND | GND | | **Schwarz** | | SWDIO | (SW)DIO | T_J**TMS**/T_SWDIO (Pin 3) | SWD data input/output | **Blau** | | SWCLK | (SW)CLK | T_J**CLK**/T_SWCLK (Pin 4) | SWD Clock | **Gelb** | | NRST | RST | T_N**RST** (Pin 9) | Reset of targets STM32 | **Grau** | | VDD-Target | - | T_VCC (Pin10) | VDD von der Platine! \\ Input Pin! **Nur nötig beim ST-Link V3 Adapter!** | **Orange** | ===== Verbindungen ===== * beim V2 reicht DIO, CLK, GND * Beim V3 **muss** die Spannung des Board mit angeschlossen werden \\ Hinweis: Das ist **NICHT** die Versorgung für das Board! * Board muss extra mit Strom versorgt werden (USB oder 12/24v) -> ggf. auf Jumper achten! ===== st-link Tools ===== * ''sudo apt install gcc build-essential cmake libusb-1.0-0 libusb-1.0-0-dev libgtk-3-dev pandoc -y'' * ''cd ~ && mkdir build -p && cd build'' * ''git clone https://github.com/stlink-org/stlink.git'' * ''cd stlink'' * ''make clean && make release'' * ''sudo make install'' * **Problem** : ''st-flash: error while loading shared libraries: libstlink.so.1'' \\ https://github.com/stlink-org/stlink/issues/478 \\ **Lösung** : ''sudo ldconfig'' ===== Flash lesen ===== * ''st-info %%--%%probe %%--%%connect-under-reset'' * Flashgröße ermitteln anhand der Ausgabe vom vorherigen Befehl \\ Bsp: flash: 32768 (pagesize: 1024) 32768 / 1024 = 32k * ''st-flash %%--%%connect-under-reset read firmware.bin 0x8000000 32k'' ===== Firmware zurückspielen ===== * ''st-flash %%--%%connect-under-reset erase'' * ''st-flash %%--%%connect-under-reset write firmware.bin 0x8000000'' ===== Bootloader extrahieren ===== * ''Bootloader offset'' ermitteln * Offset umrechnen in HEX \\ Bsp: Bootloader offset 8k -> 8k * 1024 = 0x2000h * Datei im Hexeditor (HxD https://mh-nexus.de/de/hxd/) laden und alles nach der Adresse löschen * Datei speichern und fertig