====== ST-Link - Der STM32 Notanker ======
===== YouTube Video #102 =====
{{youtube>wDN6lhUq3wA?half}}
\\
===== STM32 St-Link Typen =====
* V2
* V2.1 (Clone)
* Läuft nicht immer unter Windows!
* 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!
===== stlink 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''
===== Klipper flashen =====
* Beispiel 32K Application Offset
* ''st-flash %%--%%connect-under-reset erase''
* ''st-flash %%--%%connect-under-reset write katapult.bin 0x8000000''
* ''st-flash %%--%%connect-under-reset write klipper.bin 0x8008000''
* Beispiel kein Bootloader
* ''st-flash %%--%%connect-under-reset erase''
* ''st-flash %%--%%connect-under-reset write klipper.bin 0x8000000''
^ Application Offset ^ Bytes ^ Hex ^ Startadresse ^ Kommando ^
| Kein Bootloader | - | | 0x8000000 | ''st-flash --connect-under-reset write firmware.bin 0x8000000'' |
| 16 Kib | 16 * 1024 = 16.384 | 4000h | 0x8004000 | ''st-flash --connect-under-reset write firmware.bin 0x8004000'' |
| 28 Kib | 28 * 1024 = 28.672 | 7000h | 0x8007000 | ''st-flash --connect-under-reset write firmware.bin 0x8007000'' |
| 32 KiB | 32 * 1024 = 32.768 | 8000h | 0x8008000 | ''st-flash --connect-under-reset write firmware.bin 0x8008000'' |
| 48 Kib | 48 * 1024 = 49.152 | C000h | 0x800C000 | ''st-flash --connect-under-reset write firmware.bin 0x800C000'' |
| 64 Kib | 64 * 1024 = 65.536 | 1 0000h | 0x8010000 | ''st-flash --connect-under-reset write firmware.bin 0x8010000'' |
| 128 Kib | 128 * 1024 = 131.072 | 2 0000h | 0x8020000 | ''st-flash --connect-under-reset write firmware.bin 0x8020000'' |
===== Board Check =====
* ''dmesg''
* ''ls -lR /dev/ | grep -v '\%%->%%\s../tty' | grep -e 'tty%%[[:%%alpha%%:]]%%' -e serial''
* ''~/klipper $ ../klippy-env/bin/python ./klippy/console.py /dev/ttyACM0''
===== bin2hex, hex2bin =====
* Bin 2 Hex : ''objcopy %%--%%input-target=binary %%--%%output-target=ihex test.bin test.hex''
* Hex 2 Bin : ''objcopy %%--%%input-target=ihex %%--%%output-target=binary test.hex test.bin''
===== 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
===== Original Bootloader =====
* https://github.com/GadgetAngel/BTT_SKR_13_14_14T_SD-DFU-Bootloader/tree/main