かつて異なるパソコン同士や周辺機器間でデータ伝送を行うことが主目的であったシリアル通信ですが、近年その用途はますます拡大しています。
例えばシリアル通信インターフェースを内蔵した変換モジュールでは、接続する各種機器を容易にIoT化する。
あるいはセンサ同士を、シリアル通信を使って制御し、より高度な機能を追求すると言ったケースが挙げられますね。
一方でBluetoothを始めとした無線化が進んでもいる、とも言われてはいますが、シリアル通信が廃れることはないでしょう。
そこで知っておきたいのがUARTです。
UARTとはシリアル通信を行うためのデバイス・あるいは規格を指し、非常によく使われております。
この記事では、UARTとはどのようなものか、その仕組みや用途、種類について解説いたします。
1. UARTとは?
UARTとは、Universal Asynchronous Receiver/Transmitterの頭文字をとった用語で、直訳すると汎用非同期式送受信機です。
読み方はユーアートとなります。
規格そのものを指すこともありますがUARTと言えばパッケージングされた集積回路であることが一般的で、冒頭でも述べたようにシリアル通信のために使用される機器となります。
そもそもシリアル通信は異なるコンピュータ同士を相互接続させ、データや信号を伝送しあうためのものです。
このUARTは多くのマイコンに内蔵されており、機器間の相互通信に用いられています。
しかしながら全ての信号がシリアル型というわけではありません。詳細は後述しますが、パラレル信号も存在します。
そこでUARTでは、パラレル信号をシリアル信号に変換したり、あるいはその逆を行ったりするために用いられるデバイスとなります。
後述しますが現在使用されている通信の多くはシリアル型です。
そのため対象機器同士の接続にはシリアル信号に変換する必要がありますが、機器内ではパラレル信号が扱われているケースは少なくありません。
そのためUARTを使ってシリアル・パラレル信号を制御することで、スムーズなデータの送受信を助けます。
さらに言うと、UARTが扱うのは非同期式(調歩同期方式)のシリアル通信です。
でも、シリアル通信や非同期式などと言われても、よくわからない・・・そんな方もいらっしゃるでしょう。
UARTをよく知るためには、シリアル通信について知ることが必要不可欠です。
次項で解説いたします。
2. シリアル通信とは?
通信のフォーマットには、大きく分けてパラレル通信とシリアル通信とがあります。
「通信」と聞くとインターネットの接続が思いつくかもしれませんが、通信とは情報を送ること(データを伝送すること)です。
そのためパソコンで保存したデータをUSBに保存するのも「パソコン」と「USB」間の通信ですし、エレキギターをアンプに接続して音を増幅させるのも「エレキギター」と「アンプ」の通信となります。
この通信はそれぞれの機器からの信号を送受信する作業となりますが、パラレル通信の場合、複数の信号を並列にして一気に送り込むスタイルです。
これには複数の信号線または回線が必要となります。ちなみにパラレル(parallel )は「並列」とか「平行」といった意味を持つ英語です。
一方のシリアル通信は、信号を一つずつ直列にして送り込むスタイルです。
そのため信号の通り道となる信号線または回線は一つで事足ります。
ちなみにシリアル(serial)は「一続きの」「連続的な」といった意味を持つ英語です。
一見するとパラレル通信の方がたくさんのデータを一度に送れるので速そうですが、パラレル通信ではそれぞれの信号が到達するのを全てのラインで待つ必要が出てくるため、実はその分時間をロスしてしまうことになります。
ちなみにこの信号到達のタイミングをクロックと呼びます。
また、回線が多い分、形状や長さによって信号到達の時間に差異が出たり、ケーブルが太く複雑になったりしがちといった傾向があります。
その点シリアル通信であれば、他の信号待ちをする必要がないため高速で、かつ配線もシンプルで小型軽量化しやすいメリットを持ちます。
さらに、シリアル通信はモデム通信用に開発された経緯があるため、著距離のデータ転送が可能です。
そのため冒頭で「無線化」について言及しましたが、便利なシリアル通信はデータ伝送の主流と言っていいでしょう。
なお、シリアル通信を勉強していると「シリアルポート」「シリアルインターフェース」といった用語が出てきますね。
前者は一般的にシリアル接続を行うためのポート(ケーブルの差込口)であり、後者はUSBなどと言った規格を指しています。
■非同期式(調歩同期方式)シリアル通信について
シリアル通信をさらに分類すると、同期式と非同期式とが出てきます。
こちらも通信フォーマットを指しますが、接続する機器同士の信号が到達するタイミング(クロック)を同一にして伝送を行うものが同期式です。
データを送信する側の機器からクロック信号(同期信号)が一定周期で発せられるため、それに合わせて回路や受信側の機器が信号を送受信する仕組みとなります。
一方の非同期式は、クロック信号ではなく、最初の信号(スタートビット)が送信側から送られて以降、そのスタートビットに合わせたタイミングや速度・周波数でデータの送受信を行うものです。
通信を終えたい時や何も送る信号が無い時はストップビットが送信側から伝送され、受信側がそれをキャッチします。
同期式は高効率でシンプルである一方、ノイズに弱いというデメリットを持ちます。
ノイズが入ることで一つのクロック信号につきデータ伝送、といった方式が崩れてしまうためです。
非同期式はクロック信号でタイミングを取らないためノイズへの心配が低減されますが、受信側はキャッチしなくてはならない信号が多く、回路が複雑になりがちといったデメリットがあります。
前述の通り、UARTは非同期式のシリアル通信を扱います。
しかしながらUSART(Universal Synchronous Asynchronous Receiver/Transmitter)と呼ばれる、非同期式も同期式シリアル通信にも対応したデバイスもリリースされています。
3. UARTの動作
UARTはICチップとして販売されていることもありますが、周辺機器に内蔵されていることが一般的です。
また、UARTは送信側に繋ぐTX(Transmit Data。TXDとも)と、受信側につなぐRX(Receive Data。RXDとも)と呼ばれる信号線を持ちます。
対象機器をそれぞれの信号線に接続しますが、気を付けたいのが一方の機器にあるUARTのTXピンには他方のUARTのRXピンへ、さらにRXピンはTXピンへ、というような双方向接続が必要、ということです。こういった接続手法をクロス結線と呼びます。
なお、直接配線されるケースが多く、コネクタを使うことはあまりありません。
必要な場合はコネクタも購入しますが、汎用品ではなく専用コネクタとなることが多いでしょう。
動作としては前項でも述べたように、まず送信側がデータ伝送を開始するため、スタートビットを合図として送り込みます。
その後スタートビットに合わせたタイミングや周波数でデータ伝送が行われますが、その際パラレル信号はシリアル信号へ、シリアル信号はパラレル信号へと変換されて各機器に送られることとなります。
もう送るものがなくなると、やはり送信側がストップビットを出して通信はいったん終了となります。
さらに、UARTはデータ伝送時のシリアル/パラレル信号変換のみならず、エラーを検出する役割を持つこともあります。
この役割は大きく分けて三つあり、一つがパリティチェックです。
パリティチェックとはparity checkと表記し、奇遇性をチェックする、という意味です。
コンピュータは「0」と「1」の世界ですが、パリティチェックにおいて送信側のデータに「1」は偶数個(even)あるか奇数個(odd)あるかを判別します。
ここで判別された目印として送信側のUARTは「パリティビット」を付加します。
データが伝送される段階でデータに誤りが発生し、奇遇性が変わってしまった場合でも、パリティビットがあることで受信側はその誤りに気付くことができ(奇遇性が合わない、ということ。パリティエラーと呼ぶ)、エラーを検知することができる、というわけです。
二つ目にオーバーランエラーの検出が挙げられます。
オーバーランとは、受信側に伝送されたデータをCPUやメモリが読み出さないうちに次のデータが伝送されてきてしまい、読み出されなかった前の伝送データが消えてしまうエラーを指します。
UARTによって送信側と受信側のデータの相違に気付き、エラーを検出することが可能です。
CPUの速度を挙げたり、データの割り込み処理をかけたりすることで解決できます。
三つ目はフレーミングエラーです。
フレーミングエラーとは非同期式シリアル通信において、ストップビットを送ったにもかかわらず、ストップビットの論理値になっておらず信号を受信できなかったというエラーです。このエラーが頻発する時は設定が誤っているケースがあるので、確認してみましょう。