> 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/uart.md).

# シリアル通信(UART)

### UART とは <a href="#uart" id="uart"></a>

UART（Universal Asynchronous Receiver/Transmitter）は非同期シリアル通信方式の一つで、通常 2 本のデータ線を使用して 2 台の機器間でデータを送受信します。フライトコントローラーシステムで最も一般的な通信インターフェースの一つです。

ドローンやフライトコントローラーの用途では、UART は GPS、テレメトリーモジュール、受信機、コンパニオンコンピューター、測距計、システムデバッグコンソールなどの機器の接続によく使用されます。

### UART の特性 <a href="#uart" id="uart"></a>

UART は**ポイントツーポイント**通信であり、I2C や CAN のような共有バスではありません。1 組の UART 接続は通常 2 台の機器のみに対応し、アドレスの仕組みは使用しません。

この方式の利点は、構造がシンプルで互換性が高く、幅広く利用されていることです。ただし、各周辺機器が通常それぞれ独立したシリアルポートリソースを 1 組占有する必要があることも意味します。

### UART の基本信号 <a href="#uart" id="uart"></a>

最も基本的な UART 接続には 3 本の線が必要です。

| 信号  | 用途         |
| --- | ---------- |
| TX  | データ送信出力。   |
| RX  | データ受信入力。   |
| GND | 共通グランドの基準。 |

一部のフライトコントローラーや周辺機器では、同じコネクターに 5V、3.3V、CTS、RTS、その他の制御信号を追加で提供していますが、UART が正常に通信できるかどうかの核心は、やはり TX、RX、GND です。

### TX / RX のクロス接続 <a href="#tx--rx" id="tx--rx"></a>

UART で最もよくある配線ミスは、TX と RX の向きを間違えることです。

正しい接続方法は次のとおりです。

* 機器 A の TX を機器 B の RX に接続します。
* 機器 A の RX を機器 B の TX に接続します。
* 両端の GND を必ず接続します。

つまり、**送信側を相手の受信側に接続する**必要があります。TX 同士、RX 同士を接続した場合、通常データはまったく流れません。

### 共通グランドの重要性 <a href="#undefined" id="undefined"></a>

TX と RX を正しく接続しても、2 台の機器のグランドが共通でなければ、UART は安定して動作しないことがあります。

これは、UART 信号が共通のグランド基準電位を基準とする必要があるためです。共通グランドがないと、受信側が High/Low の電位を正しく判定できず、データエラー、途切れ、または通信不能の原因になります。

### ボーレート(Baudrate) <a href="#undefined" id="undefined"></a>

UART 通信では、双方が同じボーレート（baud rate）を使用する必要があります。そうでないと、受信側では内容が文字化けや識別できないデータになるのが一般的です。

一般的なボーレートには次のものがあります。

* 9600：一部の GPS やシンプルなセンサーでよく見られるデフォルト値。
* 57600：デバッグコンソールや一部のテレメトリー構成でよく使用。
* 115200：MAVLink、GPS、コンパニオンコンピューター接続で非常に一般的。
* 921600：高頻度のデータ転送や高速リンクで使用されることがありますが、ケーブルとフロー制御への要求がより高くなります。

### ボーレートの注意事項 <a href="#undefined" id="undefined"></a>

ボーレートを 921600 以上に上げると、通信の安定性はケーブルの品質、接続長、ハードウェアフロー制御のサポートにより依存するようになります。

ARK の UART ドキュメントでは、高速 UART で CTS/RTS などのハードウェアフロー制御がない場合、長いケーブルではパケットロスが発生しやすく、基板間の短距離接続でのみ安定して動作する可能性が高いと特に指摘しています。

### データ形式 <a href="#undefined" id="undefined"></a>

フライトコントローラーや周辺機器の用途では、UART の最も一般的なデータ形式は **8N1** です。つまり次のとおりです。

* データビット 8 個。
* parity なし。
* stop bit 1 個。

これは通常、ほとんどの GPS、テレメトリー、フライトコントローラー周辺機器のデフォルト値であるため、実際には特に変更する必要はほとんどありません。

### フライトコントローラーにおける UART の用途 <a href="#uart" id="uart"></a>

一般的なフライトコントローラーシステムでは、UART の一般的な用途は次のとおりです。

* GPS モジュールのデータ入力。
* テレメトリーモジュールと地上局との通信。
* 受信機のシリアル入力（一部の SBUS、CRSF、その他のデジタル受信プロトコルなど）。
* コンパニオンコンピューターとフライトコントローラー間のデータ交換（MAVLink やその他の制御/センサー通信など）。
* システムデバッグコンソール出力（起動メッセージ、エラーログ、対話型コマンドラインの確認に使用）。

### 論理シリアルポートと物理 UART <a href="#uart" id="uart"></a>

主要なフライトコントローラーファームウェアの中には、ユーザーが目にする `SERIAL0`、`SERIAL1`、`SERIAL2` のような名前が**論理シリアルポート番号**であるものが多く、チップ上の UART1、UART2、UART3 と直接一致するとは限りません。

`SERIALx` と物理 UART/USART の対応関係はハードウェア定義ファイルによって決まるため、同じ `SERIAL3` と表示されたポートでも、フライトコントローラーによって異なる物理コネクターに対応する場合があります。

### 一般的なシリアルポートの役割 <a href="#undefined" id="undefined"></a>

一般的なシリアルポートの役割には、USB、テレメトリーポート、GPS ポート、ユーザー定義ポートがありますが、実際の対応はボードのハードウェアによって異なります。

ArduPilot を例にすると、`Serial 0` は通常 USB に対応し、`Serial 1` と `Serial 2` はテレメトリーに、`Serial 3` と `Serial 4` は GPS によく使用され、それ以降のシリアルポートは他の用途に予約されているか、デフォルトで無効になっている場合があります。

### プロトコルの構成 <a href="#undefined" id="undefined"></a>

パラメータによるシリアルポート管理をサポートするフライトコントローラーファームウェアでは、UART は単なる配線ではなく、どのプロトコルを扱うかを指定する必要があります。

ArduPilot を例にすると、`SERIALx_PROTOCOL` は GPS、MAVLink、RC Input、ESC Telemetry、DisplayPort、Rangefinder、OpticalFlow、DDS XRCE など、さまざまな用途に設定できます。これは、同じ物理ポートをパラメータによって異なる周辺機器に割り当て直せることを意味します。

### 高度なシリアルオプション <a href="#undefined" id="undefined"></a>

一部のフライトコントローラーでは、RX/TX の反転、半二重、RX/TX の入れ替え、プルアップ/プルダウン、DMA 動作制御などの UART の高度な設定も提供されています。

ArduPilot はこれらの機能を `SERIALx_OPTIONS` にまとめており、一部の機能は特定の MCU クラスや特定のボードでのみサポートされるとしています。そのため、設定前にハードウェアの能力を確認する必要があります。

### 受信機と UART <a href="#uart" id="uart"></a>

一部のシリアル受信機プロトコルは一般的な UART に直接接続できますが、すべての場合にプラグアンドプレイで使えるわけではありません。

例えば ArduPilot のドキュメントでは、サポートされている任意の UART を RC 入力に使用できる可能性がある一方で、SBUS や FPort のようなプロトコルでは反転が必要になる場合があり、UART 自体が反転に対応していなければ、追加のハードウェアインバーターが必要になる可能性があると述べています。

### デバッグコンソール <a href="#undefined" id="undefined"></a>

UART は、フライトコントローラーの低レイヤーデバッグコンソールにアクセスする一般的な方法の一つでもあります。

このモードでは、UART を使用して起動メッセージ、起動エラー、センサー状態、診断情報を確認できます。そのため、フライトコントローラーが正常に起動しない、USB が認識されない、またはファームウェアに異常がある場合、デバッグ UART は非常に重要なトラブルシューティングの入口になります。

### ケーブルとノイズ対策 <a href="#undefined" id="undefined"></a>

UART は本質的に長距離・高ノイズ耐性のバスではないため、ケーブルの品質と配線方法が重要です。

高いボーレートではできるだけ線を短くし、ツイスト配線でノイズを低減してください。例えば、TX と GND、RX と GND をペアで配線すると、バラバラに平行配線するよりも安定します。

### 電圧の互換性 <a href="#undefined" id="undefined"></a>

ほとんどの最新のフライトコントローラー MCU の UART ロジックレベルは 3.3V です。そのため、5V UART 機器に直接接続すると不安定になったり、MCU が損傷したりする可能性があります。

周辺機器が 5V ロジックレベルを使用している場合は、まずその出力が 3.3V 互換かどうかを確認してください。必要に応じて、無理に直接接続せず、レベルシフターを追加してください。

### よくある問題 <a href="#undefined" id="undefined"></a>

UART で最もよくある問題の原因は次のとおりです。

* **TX / RX の逆接続**：最も多く、最初に確認すべき項目です。
* ボーレートの**不一致**：よくある症状は文字化け、またはデータがまったくないことです。
* **共通グランドの欠如**：両端は正しく接続されているように見えても、信号を正しく判定できません。
* **電圧の非互換**：3.3V と 5V のロジックを混在させると、失敗や損傷の原因になることがあります。
* **ケーブルが長すぎる、または配線が悪い**：特に高いボーレート、モーターノイズ、振動のある環境では問題が発生しやすくなります。
* **シリアルポートが他の機能に使用されている**：物理ポートは正しく接続されていても、ファームウェアのパラメータで別のプロトコルに割り当てられています。

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

UART 通信に異常がある場合は、次の項目を順に確認することをお勧めします。

1. TX → RX、RX → TX、GND → GND になっていることを確認します。
2. 両端のボーレートが同じであることを確認します。
3. データ形式が想定どおり（通常は 8N1）であることを確認します。
4. その物理コネクターがファームウェアで正しいプロトコルに割り当てられていることを確認します。
5. 周辺機器のロジックレベルがフライトコントローラーと互換性があることを確認します。
6. 線の長さ、はんだ付け箇所、コネクターが安定していることを確認します。
7. 必要に応じて、オシロスコープや USB-UART ツールを使用して TX/RX 信号を直接観察します。

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

**注意：** UART は多点共有バスではありません。1 組の TX/RX は、通常 1 台の対応機器にのみ接続すべきです。そのプロトコルとハードウェア構成が特殊な接続を許容していることを十分に理解している場合を除きます。

**注意：** 「GPS」「TELEM1」「UART4」「SERIAL3」などの名称の対応は、フライトコントローラーによって異なる場合があります。配線前には、ハードウェアのピン配置表とファームウェアのパラメータ構成の両方を照合してください。

**注意：** 高いボーレートが必ずしも優れているとは限りません。周辺機器のデータ量が多くない場合は、保守的で安定したボーレートを使用するほうが、高速を追求するよりも通常は信頼性が高くなります。
