> 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/ja/support/knowledge-base/swd-programming.md).

# SWD 書き込み

### SWD とは <a href="#swd" id="swd"></a>

SWD（Serial Wire Debug）は ARM マイクロコントローラーで一般的に使用される 2 線式のデバッグ・書き込みインターフェースで、MCU に対してファームウェアの書き込み、メモリアクセス、デバッグ、復旧操作を直接行うことができます。

フライトコントローラー製品にとって、SWD の最大の価値はハードウェアレベルで動作することです。基板上の Bootloader やメインファームウェアが破損していても、SWD で再書き込みして基板を復旧できる可能性があります。

### フライトコントローラーに SWD が必要な理由 <a href="#morakot--swd" id="morakot--swd"></a>

フライトコントローラーを使用する過程では、ほとんどのユーザーは USB と地上局を使ってファームウェアをインストールするため、SWD を直接使う必要はありません。

ただし、次のような場合には SWD が必要なツールになります。

* 初めて Bootloader を書き込むとき。
* ファームウェアまたは Bootloader が破損し、基板が USB 経由で正常に起動できないとき。
* フライトコントローラーの開発、カスタムファームウェア、低レイヤーのデバッグを行うとき。
* DFU モードが正常に使用できず、MCU にイメージファイルを直接書き込む必要があるとき。

### SWD の基本信号 <a href="#swd" id="swd"></a>

SWD の中核となる信号は 2 本だけで、これに共通 GND 線を 1 本加えるだけで基本的な接続を確立できます。

| 信号    | 名称                   | 方向          | 用途                 |
| ----- | -------------------- | ----------- | ------------------ |
| SWDIO | Serial Wire Data I/O | 双方向         | データと制御コマンドを転送します。  |
| SWCLK | Serial Wire Clock    | 書き込み器 → MCU | SWD 通信のクロックを供給します。 |
| GND   | Ground               | -           | 共通グランドの基準です。       |

実際には、多くのフライトコントローラーのデバッグポートは、電源検出、デバッグ出力、リセット制御を同時に行えるよう、さらに 3.3V、UART TX、UART RX、nRST、SWO を引き出しています。

### SWD の仕組み <a href="#swd" id="swd"></a>

SWD の書き込み器は MCU 内部のデバッグポートに直接接続されるため、メインファームウェアの正常動作に依存せずに、Flash、レジスタ、一部の周辺機能の状態を直接読み書きできます。

これが SWD と一般的な USB ファームウェアアップグレードとの最大の違いです。USB 更新では通常、基板が少なくとも Bootloader または DFU に入れる必要がありますが、SWD はより低いレイヤーでチップと通信するため、復旧や開発の用途に特に適しています。

### SWD を使用すべきとき <a href="#swd" id="swd"></a>

SWD は日常的な操作方法ではなく、「低レイヤーの保守・開発用インターフェース」として捉えることをお勧めします。

SWD の使用に適した場面は次のとおりです。

1. 新しい基板に初めて Bootloader を書き込む。
2. 間違ったファームウェアを書き込んでしまい、基板が起動しなくなった。
3. USB が認識されず DFU も機能しないため、Flash の内容を直接復旧する必要がある。
4. ボードレベルの配線や起動フローを検証したり、ステップ実行によるデバッグを行ったりする必要がある。

### 一般的なファームウェア更新と SWD の違い <a href="#swd" id="swd"></a>

一般的なファームウェア更新は、通常 Mission Planner、QGroundControl、または STM32CubeProgrammer の USB/DFU モードで行います

SWD と一般的な方法は、次のように簡単に区別できます。

| 方法            | 適用場面                                   | 日常の更新に適しているか |
| ------------- | -------------------------------------- | ------------ |
| USB 地上局での書き込み | 一般的なファームウェアアップグレード、通常のメンテナンス。          | はい。          |
| USB DFU       | Bootloader/ファームウェア異常時のバックアップ手段。        | 状況によります。     |
| SWD           | 初回の Bootloader 書き込み、文鎮化からの復旧、ボードレベル開発。 | いいえ。         |

### 必要なツール <a href="#undefined" id="undefined"></a>

SWD 書き込みには、少なくとも互換性のある ST-LINK 系の書き込み器が 1 台必要です。例えば ST-LINK V3 Mini は、SWD に加えて同じ USB 接続で仮想シリアルポート機能も提供できるためです。

* ST-LINK V2、ST-LINK V3 Mini、またはその他の互換 SWD 書き込み器。
* 対応するフライトコントローラー用の変換ケーブルまたは変換基板。
* USB ケーブルとコンピューター。
* 書き込みツール（STM32CubeProgrammer や stlink ツールチェーンなど）。

### 推奨される接続経路 <a href="#undefined" id="undefined"></a>

SWD 書き込みの接続の概念は、次の経路に簡略化できます。

`コンピューター ↔ USB ↔ ST-LINK ↔ SWD 変換ケーブル ↔ Debug Port`

### ソフトウェア環境 <a href="#undefined" id="undefined"></a>

* **Windows ユーザー**：STM32CubeProgrammer を優先して使用し、グラフィカルに書き込みを行います。
* **Linux ユーザー**：stlink オープンソースツールチェーンを使用して書き込みやデバッグを行えます。

ボードレベルの開発や Bootloader の書き込みを行う場合は、デバイスの認識異常を避けるため、ツールのバージョンが十分に新しいことを確認してください。

### よくあるエラー <a href="#undefined" id="undefined"></a>

* **コネクターまたは変換方法の誤り**：書き込み器のコネクターがフライトコントローラーのデバッグポートに直接挿せるとは限らず、対応する変換基板や正しいピン対応表が必要になることがよくあります。
* **Bootloader の種類の誤り**：対象のファームウェアスタックと互換性のない Bootloader を書き込むと、その後の更新手順が失敗する可能性があります。
* **Flash Address の誤り**：STM32 の一般的な Flash 開始アドレスは `0x08000000` です。書き込みアドレスが誤っていると、表面上は成功と表示されても基板が起動しないことがあります。
* **ツールのバージョンが古すぎる**：古いバージョンの stlink ツールでは、新しい MCU や新しい ST-LINK ファームウェアを認識できないことがあります。
* **電源の競合**：ST-LINK は 3.3V のターゲット電圧を供給できる場合がありますが、デバッグポート経由で大電流の周辺機器に給電すべきではなく、外部電源との競合も避ける必要があります。

### 注意事項 <a href="#undefined" id="undefined"></a>

**注意：** ST-LINK を接続する前に、SWDIO、SWCLK、GND が逆に接続されていないことを確認し、大電流モジュールの電源を誤ってデバッグポートに接続しないでください。

**注意：** 基板がまだ USB と DFU モードで正常に書き込める場合は、既存の標準的な書き込み手順を優先して使用することをお勧めします。SWD は、Bootloader が破損している場合、起動できない場合、またはボードレベル開発の場合にのみ使用することをお勧めします。

### 推奨される操作手順 <a href="#undefined" id="undefined"></a>

1. 対応するデバッグポートを確認します。
2. ST-LINK と変換ケーブルを準備します。
3. ピン配置を照合して SWDIO、SWCLK、GND を接続し、必要に応じて 3.3V / nRST も接続します。
4. STM32CubeProgrammer または stlink ツールを開きます。
5. 接続して MCU が認識されることを確認します。
6. Bootloader または指定のファームウェアイメージを書き込みます。
7. 完了後に電源を入れ直し、USB、Bootloader、または地上局と正常に接続できるか確認します。
