UARTのあれこれ

こんにちは,CDSLの河竹です.

現在,IoTの要ともいえる組み込み機器では,外部インターフェースとして幾つかシリアル通信規格が使用できるようになっています.その中のひとつであるUARTを最近知ったので共有しようと思います.

UARTとは

UARTはUniversal Asynchronous Receiver Transmitter(汎用非同期式送受信機)の頭文字で,「ユーアート」と読みます.

UARTはもともとPCとモデムをつなぐインターフェースとしてよく使われていたそうですが,高速インターフェースとしてUSB(Universal Serial Bus)が登場したことによって,通信速度が遅いことや対応機器が少ないことから徐々に衰退していったそうです.ところがUARTは単純な仕組みゆえに開発コストが低く,安価な電化製品の普及やIoTの導入と共に,コスト重視の組み込み機器の多くに搭載されるようになりました.

そもそもシリアル通信とは,1つのデータ伝送路を使って送信側から受信側に向けて1bitずつ送信する方式のことを指します.一方で,複数のデータ伝送路を使って1度に複数のデータを送る方式としてパラレル通信がありますが,同期をとることの難しさや信号線間の電磁的な干渉があることから,現在はシリアル通信方式が多く採用されています.

また,UARTの特徴のひとつとして,名前の通り「非同期」のシリアル通信であることが挙げられます.つまり,I2CやSPIのような同期をとるためのクロック配線を用いたクロック信号の必要がなくなるということになります.さらに,UARTは2本のデータ配線によって,マスター/スレーブの関係ではない双方向の通信が可能となっています.

UARTの実装

図1 UART通信の例

図1は2つのUARTデバイス(UART1,UART2)が通信するときの配線の例を表しています.各デバイスの送信機能を持つピンをTX,受信機能を持つピンをRXとすると互いのTXとRXをつなぐように2本の信号線を接続します.これをクロス結線といいます.ちなみにマスター/スレーブの関係をもつシリアル通信の場合には,各デバイスの同じ番号のピン同士を接続するためストレート結線といいます.

また,互いのUARTデバイスで1秒当たりの最大転送ビット数「ボーレート(BoudRate)」を同じ値に設定する必要があります.このボーレートがずれると送受信のタイミングがずれて正しい処理ができなくなります.加えて,非同期であるためデータの到着とソフトウェアが読み込むタイミングは異なっており,受信バッファにため込まれた内容をソフトウェアが読み込むという仕組みになっています.そのためボーレートに対してバッファからの読み込みが遅いとバッファの内容が破棄されていくため,ソフトウェア面での工夫が必要になります.

まとめ

今回はUARTについて実装にも触れながら概要を書いてみました.実は串田研究室にあるESP32にも外部インターフェースとしてUARTが実装されており,他にもI2CとSPIが搭載されています.シリアル通信の話はセンサからデータを読み取るときには必須となる知識なので,習得して様々な規格に対応できるようになりたいですね!

参考文献

[1] よく分かる! シリアル通信基礎講座 https://emb.macnica.co.jp/articles/8191/
[2] 「UART」の解説 https://synapse.kyoto/glossary/uart/page001.html
[3] UART――多様な非同期通信に対応可能なハードウェア通信プロトコル https://www.analog.com/jp/analog-dialogue/articles/uart-a-hardware-communication-protocol.html
[4] 通信インタフェースの選択, 組み込みプラットフォームの選択について https://kamomesan.hatenablog.jp/entry/2018/12/17/111826

コメントを残す