====== 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