3.18. UART の基礎

UART(Universal Asynchronous Receiver-Transmitter)は、2 つのマイクロコントローラ間、あるいはマイクロコントローラとホスト PC 間でバイトをやり取りする、最も古くて最もシンプルな方法です。データは 2 本の線(各方向に 1 本ずつ)で運ばれ、共通のグランドが信号を返します。どちらの側も共有クロックを使いません。あらかじめ baud rate(ボーレート)を取り決めておき、データ線そのものからビットタイミングを復元します。

3.18.1. フレーム

線上の各文字はフレームで包まれます。スタートビット、データビット、オプションのパリティビット、そして 1 つまたは 2 つのストップビットで構成されます。

A UART frame waveform. The signal sits idle high on the left, falls low for one bit time (the start bit), then carries eight data bits in sequence, then returns high for one bit time (the stop bit) before returning to idle.

1 つの UART フレーム。スタートビット、8 ビットのデータ、ストップビットからなり、それぞれが 1 ビット周期(1 / baudrate 秒)の幅を持ちます。

線はアイドル時にハイになります。受信側は立ち下がりエッジを監視し、それが新しいフレームの開始を示します。その後、1 ビット周期につき 1 回(通常は各ビットの中央で)データ線をサンプリングし、ビットを文字に再構成します。ストップビットによって線がアイドルに戻るため、次のスタートビットを検出できるようになります。

3.18.2. ボーレート

ビット周期、つまりリンクの速度は baud rate(ボーレート)、すなわち 1 秒あたりのビット数によって決まります。9600192003840057600115200230400460800921600 が標準的な値で、最も一般的なデフォルトは 115200 です。両端のボーレートが数パーセント以内で一致していないと、受信側が誤った位置でビットをサンプリングし、データが文字化けして戻ってきます。

ボーレートが高いほど 1 秒あたりに転送できるデータは増えますが、ケーブル長、静電容量、両端のクロックの精度の影響を受けやすくなります。同じ作業台上の 2 枚のボード間のような短いリンクであれば、115200 から 921600 まで快適に動作します。

3.18.3. 配線

UART リンクには 3 本の線を使います。

Two boards labelled A and B, connected by three wires. Board A's TX pin connects to board B's RX pin; board B's TX pin connects to board A's RX pin; and both boards' ground pins are tied together.

UART の配線。一方のボードの TX はもう一方の RX につながり、両方のグランドが結ばれます。

  • TX → RX、双方向に。 各ボードの送信ピンはもう一方のボードの受信ピンになります。よくある初心者のミスは TX → TX と配線してしまうことで、2 つの出力が互いに競合し、どちらの受信側にもデータが届きません。

  • 共通グランド。 信号レベルはグランドを基準としているため、2 枚のボードは共通のグランドを持たなければなりません。そうでないと受信側は線上で誤った電圧を見ることになります。

3.18.4. 電圧レベルと物理層

カメラの UART ピン上の信号レベルは 3.3 V CMOS です。論理 0 がグランド、論理 1 が 3.3 V です。3.3 V CMOS UART を話すもの(別のマイクロコントローラ、3.3 V に設定された USB-シリアル変換アダプタ、3.3 V の GPS モジュールなど)であれば、直接配線できます。

注釈

5 V CMOS UART デバイス(古いマイクロコントローラ、特定の GPS モジュール、一部の古いセンサーブレイクアウトなど)は、5 V の論理レベルで同じ UART フレーミングを話します。これらをカメラに直接配線するのは安全ではありません。5 V の TX がカメラの RX を駆動すると、5 V 耐性のないカメラでは入力電圧の絶対最大定格を超えてしまい、また、カメラの 3.3 V の TX は 5 V デバイスのハイしきい値に届かず、きれいな論理 1 を得られないことがあります。

2 つの電圧間で変換するには、active line driver(アクティブラインドライバ)、すなわち各線の両側にそれぞれ独自の駆動トランジスタを備えた専用の双方向レベルシフタ IC が必要です。レベルシフト で紹介した、MOSFET とプルアップによるパッシブなシフタはここでは不十分です。これらは抵抗を通して線を充電することで立ち上がりエッジを作るため、スイッチ速度では問題ありませんが、UART には遅すぎます。115200 ボーでは各ビットが約 8 µs しか続かず、パッシブシフタの RC スルーが 1 ビットを次のビットににじませてしまいます。

アクティブラインドライバは、フルの UART レートで両方向にきれいなエッジを生成します。リンクが動作するボーレートに対応した部品を選び、カメラの TX と RX をシフタの 3.3 V 側に、5 V デバイスの TX と RX をシフタの 5 V 側に配線します。

3 つの古い物理層は、同じフレーミングを使いますが電圧が異なるため、それらと 3.3 V のマイクロコントローラの間にレベルコンバータが必要です。

  • RS-232。 デスクトップ PC のシリアルポートや一部の産業機器で使われます。線はおおよそ ±5 V から ±15 V の間で振れ、アイドル時は負側のレールになります。CMOS と比べて極性が反転しており電圧も高いため、MAX232 / MAX3232 系(または類似品)のチップが変換を担います。

  • RS-422。 ポイントツーポイントリンク(1 つのドライバ、最大 10 個の受信機)向けの差動信号規格です。ドライバはバランスのとれた 1 対の線で送信し、受信機はその 2 本の を見て、途中の同相ノイズを無視します。全二重リンクでは 2 対(各方向に 1 対)を使います。RS-422 はボーレートに応じて数十メートルから 1 キロメートルまで届き、RS-422 トランシーバチップがカメラの TX / RX とバランス対の間に入ります。

  • RS-485。 RS-422 のマルチドロップ版です。同じ差動信号を使いますが、1 つのバス上に最大 32 個のドライバと受信機を載せられるよう設計されています。ほとんどのリンクは単一の対で半二重となり、各ノードのドライバと受信機が同じ線を共有し、誰が話すかをソフトウェアが調停します。線が長く伸びてノイズの厳しい産業オートメーションバス(Modbus、DMX512、Profibus)で使われ、RS-485 トランシーバチップがカメラの TX / RX と差動対の間に入ります。

どちらも基盤となるビットレベルでは依然として UART フレームを送ります。カメラの machine.UART の設定(ボーレート、ビット数、パリティ、ストップビット)は、トランシーバの向こう側でどの物理層が信号を運ぶかにかかわらず同じです。