> For the complete documentation index, see [llms.txt](https://taiphoon-com.gitbook.io/taiphoon.com-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://taiphoon-com.gitbook.io/taiphoon.com-docs/de/support/knowledge-base/swd-programming.md).

# SWD-Flashen

### Was ist SWD? <a href="#swd" id="swd"></a>

SWD (Serial Wire Debug) ist eine bei ARM-Mikrocontrollern gängige zweiadrige Debug- und Flash-Schnittstelle, mit der Sie direkt Firmware auf die MCU schreiben, auf den Speicher zugreifen, debuggen und Wiederherstellungsvorgänge durchführen können.

Bei Flugcontroller-Produkten liegt der größte Nutzen von SWD darin, dass es auf Hardwareebene arbeitet: Selbst wenn der Bootloader oder die Hauptfirmware auf der Platine beschädigt ist, besteht weiterhin die Möglichkeit, die Firmware über SWD neu zu schreiben und die Platine zu retten.

### Warum braucht ein Flugcontroller SWD? <a href="#morakot--swd" id="morakot--swd"></a>

Bei der Nutzung eines Flugcontrollers installieren die meisten Anwender die Firmware über USB und die Bodenkontrollstation und benötigen SWD nicht direkt.

In den folgenden Fällen ist SWD jedoch ein unverzichtbares Werkzeug:

* Erstmaliges Flashen des Bootloaders.
* Wenn Firmware oder Bootloader beschädigt sind und die Platine nicht mehr normal über USB startet.
* Bei der Flugcontroller-Entwicklung, bei benutzerdefinierter Firmware oder beim Low-Level-Debugging.
* Wenn der DFU-Modus nicht normal funktioniert und ein Image direkt auf die MCU geschrieben werden muss.

### Grundlegende SWD-Signale <a href="#swd" id="swd"></a>

SWD benötigt im Kern nur zwei Signale; zusammen mit einer gemeinsamen Masseleitung lässt sich eine grundlegende Verbindung herstellen.

| Signal | Name                 | Richtung         | Zweck                                       |
| ------ | -------------------- | ---------------- | ------------------------------------------- |
| SWDIO  | Serial Wire Data I/O | Bidirektional    | Überträgt Daten und Steuerbefehle.          |
| SWCLK  | Serial Wire Clock    | Programmer → MCU | Liefert den Takt für die SWD-Kommunikation. |
| GND    | Ground               | -                | Gemeinsamer Massebezug.                     |

In der Praxis führen viele Debug-Schnittstellen von Flugcontrollern zusätzlich 3.3V, UART TX, UART RX, nRST oder SWO heraus, um gleichzeitig die Spannungsversorgung zu prüfen, Debug-Ausgaben zu erhalten oder einen Reset zu steuern.

### Wie funktioniert SWD? <a href="#swd" id="swd"></a>

Der SWD-Programmer wird direkt mit dem internen Debug-Port der MCU verbunden. Dadurch kann er Flash, Register und einen Teil der Peripheriezustände direkt lesen und schreiben, ohne darauf angewiesen zu sein, dass die Hauptfirmware ordnungsgemäß läuft.

Dies ist der größte Unterschied zwischen SWD und einem gewöhnlichen Firmware-Upgrade per USB. Ein USB-Update setzt in der Regel voraus, dass die Platine zumindest in den Bootloader oder DFU wechseln kann; SWD kommuniziert dagegen auf einer tieferen Ebene mit dem Chip und eignet sich daher besonders für Wiederherstellung und Entwicklung.

### Wann sollten Sie SWD verwenden? <a href="#swd" id="swd"></a>

Es wird empfohlen, SWD als „Low-Level-Wartungs- und Entwicklungsschnittstelle“ zu betrachten und nicht als Methode für den Alltagsbetrieb.

Situationen, in denen SWD geeignet ist:

1. Erstmaliges Schreiben des Bootloaders auf eine neue Platine.
2. Versehentlich falsche Firmware geflasht, sodass die Platine nicht startet.
3. USB wird nicht erkannt, DFU funktioniert nicht, und der Flash-Inhalt muss direkt wiederhergestellt werden.
4. Board-Verkabelung oder Startablauf müssen überprüft oder ein Einzelschritt-Debugging durchgeführt werden.

### Unterschied zwischen gewöhnlichem Firmware-Update und SWD <a href="#swd" id="swd"></a>

Gewöhnliche Firmware-Updates erfolgen in der Regel über Mission Planner, QGroundControl oder den USB/DFU-Modus von STM32CubeProgrammer.

SWD und die gewöhnlichen Methoden lassen sich vereinfacht wie folgt unterscheiden:

| Methode                                       | Anwendungsfall                                                                                         | Für regelmäßige Updates geeignet? |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------- |
| Flashen per USB über die Bodenkontrollstation | Gewöhnliche Firmware-Upgrades, normale Wartung.                                                        | Ja.                               |
| USB DFU                                       | Ausweichmethode bei Problemen mit Bootloader/Firmware.                                                 | Je nach Situation.                |
| SWD                                           | Erstmaliges Flashen des Bootloaders, Wiederherstellung nicht startfähiger Platinen, Board-Entwicklung. | Nein.                             |

### Benötigte Werkzeuge <a href="#undefined" id="undefined"></a>

Für das SWD-Flashen benötigen Sie mindestens einen kompatiblen Programmer der ST-LINK-Klasse, z. B. den ST-LINK V3 Mini, da dieser neben SWD über dieselbe USB-Verbindung auch eine virtuelle serielle Schnittstelle bereitstellt.

* ST-LINK V2, ST-LINK V3 Mini oder ein anderer kompatibler SWD-Programmer.
* Passendes Adapterkabel oder passende Adapterplatine für den Flugcontroller.
* USB-Kabel und Computer.
* Flash-Werkzeug, z. B. STM32CubeProgrammer oder die stlink-Toolchain.

### Empfohlene Verbindungskette <a href="#undefined" id="undefined"></a>

Das Verbindungskonzept beim SWD-Flashen lässt sich vereinfacht als folgender Pfad darstellen:

`Computer ↔ USB ↔ ST-LINK ↔ SWD-Adapterkabel ↔ Debug Port`

### Softwareumgebung <a href="#undefined" id="undefined"></a>

* **Windows-Anwender**: Verwenden Sie vorzugsweise STM32CubeProgrammer zum grafischen Flashen.
* **Linux-Anwender**: Sie können die Open-Source-Toolchain stlink zum Flashen und Debuggen verwenden.

Wenn Sie Board-Entwicklung betreiben und Bootloader schreiben, sollten Sie sicherstellen, dass die Werkzeugversion aktuell genug ist, um Probleme bei der Geräteerkennung zu vermeiden.

### Häufige Fehler <a href="#undefined" id="undefined"></a>

* **Falscher Stecker oder falsche Adaptierung**: Der Anschluss des Programmers passt nicht unbedingt direkt an die Debug-Schnittstelle des Flugcontrollers; häufig sind eine passende Adapterplatine oder ein korrekter Pinabgleich erforderlich.
* **Falscher Bootloader-Typ**: Wird ein Bootloader geflasht, der nicht mit dem Ziel-Firmware-Stack kompatibel ist, können spätere Update-Vorgänge fehlschlagen.
* **Falsche Flash Address**: Die übliche Flash-Startadresse bei STM32 ist `0x08000000`. Wird an eine falsche Adresse geschrieben, wird möglicherweise ein Erfolg angezeigt, die Platine startet aber nicht.
* **Veraltete Werkzeugversion**: Ältere stlink-Werkzeuge erkennen neuere MCUs oder neuere ST-LINK-Firmware möglicherweise nicht.
* **Versorgungskonflikt**: Der ST-LINK kann eine Zielspannung von 3.3V bereitstellen, über die Debug-Schnittstelle sollten jedoch keine Peripheriegeräte mit hohem Strombedarf versorgt werden; außerdem müssen Konflikte mit einer externen Stromversorgung vermieden werden.

### Hinweise <a href="#undefined" id="undefined"></a>

**Hinweis:** Bevor Sie den ST-LINK anschließen, vergewissern Sie sich, dass SWDIO, SWCLK und GND nicht vertauscht sind, und schließen Sie die Stromversorgung von Modulen mit hohem Strombedarf nicht versehentlich an die Debug-Schnittstelle an.

**Hinweis:** Wenn sich die Platine noch normal über USB und im DFU-Modus flashen lässt, wird empfohlen, vorrangig den bestehenden Standard-Flashvorgang zu verwenden. SWD wird nur empfohlen, wenn der Bootloader beschädigt ist, die Platine nicht startet oder Board-Entwicklung betrieben wird.

### Empfohlener Ablauf <a href="#undefined" id="undefined"></a>

1. Ermitteln Sie die entsprechende Debug-Schnittstelle.
2. Halten Sie ST-LINK und Adapterkabel bereit.
3. Schließen Sie SWDIO, SWCLK und GND gemäß Pinbelegung an, bei Bedarf auch 3.3V / nRST.
4. Öffnen Sie STM32CubeProgrammer oder das stlink-Werkzeug.
5. Stellen Sie eine Verbindung her und prüfen Sie, ob die MCU erkannt wird.
6. Schreiben Sie den Bootloader oder das gewünschte Firmware-Image.
7. Schalten Sie die Platine nach Abschluss erneut ein und prüfen Sie, ob USB, Bootloader oder die Bodenkontrollstation normal verbunden werden können.
