Back to Basics: Universal Asynchronous Receiver/Transmitter (UART)
このテクニカルブリーフでは、広く普及している(ユビキタスと言ってもよい)UART 通信インターフェースの低レベルな詳細について説明しています。
関連情報
- RS-422およびRS-485による便利で堅牢なデータ伝送
世界中の電気技師や電子機器愛好家の中で、ユニバーサル非同期レシーバ/トランスミッタ (UART) インターフェースに何らかの形で関わったことのない人はほとんどいないでしょう。
注:「UART」という言葉はかなり曖昧です。 インターフェースのさまざまな側面 (データビット数、ストップビット数、論理レベル、パリティ) をシステムのニーズに合わせて調整できます。
機能と特徴
ご存知のように、基本的なUARTシステムは、たった3つの信号で堅牢で中程度の速度の全二重通信を提供します。 Tx(送信シリアルデータ)、Rx(受信シリアルデータ)、およびグランドの3つの信号のみで、堅牢な中速全二重通信を行います。
実際にはクロック信号がありますが、それは一方の通信デバイスから他方の通信デバイスに送信されるのではなく、レシーバとトランスミッタの両方に内部クロック信号があり、変化するロジックレベルがどのように生成され(Tx側)、どのように解釈されるか(Rx側)を制御します。 当然のことながら、送信機と受信機が異なるデータ送信周波数に設定されている場合、UART通信は機能しません。
主要な用語
いくつかの用語を復習し、その過程で、より多くのUARTの特性をカバーしましょう。 1バイトのUART送信の最初のビットです。 データラインがアイドル状態から離れることを示します。 アイドル状態は通常ロジックハイなので、スタートビットはロジックローになります。
- スタートビットはオーバーヘッドビットです。 1バイトのUART送信の最後のビットです。 その論理レベルは信号のアイドル状態と同じ、つまりロジックハイです。
- ボーレート。 データを転送する際のおおよその速度(単位はビット/秒、またはbps)。 より正確な定義は、1ビットのデジタルデータを送信するのに必要な時間(秒)に対応する周波数(bps)です。 例えば、9600bpsのシステムでは、1ビットの転送に必要な時間は1/(9600bps)≒104.2µsとなります。
- パリティビット。 バイトの最後に追加されるエラー検出用のビットです。 奇数パリティ」とは、データバイトにロジックハイのビットが偶数個含まれている場合、パリティビットがロジックハイになることを意味し、「偶数パリティ」とは、データバイトにロジックハイのビットが奇数個含まれている場合、パリティビットがロジックハイになることを意味しています。 直感的ではないかもしれませんが、パリティビットは、ロジックハイビットの数が常に偶数(偶数パリティの場合)または奇数(奇数パリティの場合)であることを保証するという考え方です。 偶数パリティを使用し、バイトに3つの論理高ビットがある場合、パリティビットは論理高となり、送信データの論理高ビットの合計数(すなわち、バイト自体とパリティビットを加えた数)が増えることになります。
- 論理高ビットの数を常に偶数(偶数パリティの場合)または奇数(奇数パリティの場合)にすることで、パリティビットは粗いエラー検出メカニズムを提供します。つまり、伝送プロセスのどこかでビットが反転した場合、論理高ビットの数は選択されたパリティモードと一致しません。 もちろん、2つのビットが反転してしまうと、この仕組みは破綻してしまいますので、パリティビットは防弾仕様とは言えません。
Synchronizing and Sampling
標準的なデジタル データは、何らかのクロック機構がなければ意味がありません。
典型的なデータ信号は、ロジック ローとロジック ハイの間を遷移する単なる電圧です。 受信機は、信号をサンプリングするタイミングを知っている場合にのみ、これらの論理状態をデジタルデータに正しく変換することができます。 例えば、送信機はクロックの立ち上がりエッジごとにデータ信号を更新し、受信機は立ち下がりエッジごとにデータをサンプリングします。
しかし、「ユニバーサル非同期レシーバ/トランスミッタ」という名称からもわかるように、UARTインターフェースはTxおよびRxデバイスの同期にクロック信号を使用しません。
送信機はそのクロック信号に基づいてビットストリームを生成し、受信機の目標は、その内部クロック信号を使用して、各ビット期間の中央で受信データをサンプリングすることです。
受信機のシーケンスは、スタートビットの立ち下がりエッジから始まります。 この時、重要な同期処理が行われます。
レシーバー クロックのアクティブ エッジがビット期間の中央付近で発生することを確実にするために、レシーバー モジュールに送信されるボーレート クロックの周波数は、実際のボーレートよりもはるかに高くなっています (8 倍、16 倍、あるいは 32 倍)。
例えば、1ビット期間が16受信機クロックサイクルに相当するとします。
- 受信プロセスは、スタートビットの立ち下がりエッジによって開始されます。
- ビット期間の中央付近にサンプリングポイントを確立するために、受信機は8クロックサイクル待機します。
- その後、受信機は16クロックサイクル待機し、最初のデータビット期間の中央に到達します。
- 最初のデータビットがサンプリングされて受信レジスタに格納され、モジュールはさらに16クロックサイクル待ってから2番目のデータビットをサンプリングします。
- このプロセスはすべてのデータビットがサンプリングされて格納されるまで繰り返され、ストップビットの立ち上がりエッジによってUARTインターフェースがアイドル状態に戻ります。
おわりに
この記事では、何度も使用したことのある通信プロトコルの詳細を説明しました。 信号やハードウェアの実際の動作をほとんど知らずに UART インターフェースを実装することは可能ですが、少しでも知識を増やしておくと、UART 通信が期待通りに動作しなかった場合に役立ちます(一般的な知識は別として)。