当サイトのコンテンツはご自身の判断と責任においてご利用ください。営利目的の転載等は固くお断りします

更新2023/12/21

UARTの基本

このページの項目
他を探す

基本中の基本の通信技術

マイコンを使う上で避けて通れない技術の一つがシリアル通信で、その中でもUARTは最も基本的な通信技術です。
そして、マイコンを扱う方は、必ずマスターしなければならない技術の一つでもあります。

UARTとは

1バイト8ビットのデータを1本の電線で送るために、時系列にデータを分解して、1ビットづつ出力(送信)または入力(受信)します。
ほとんどのマイコンにUARTが内蔵されており、基板内IC間のデータ交換や、さらに他規格に変換してFA機器やPCのデータ交換に使用されます。

マイコンメーカーによっては、UARTという名称ではなく、独自の呼び方をするメーカーもあります。
例えば、PICはUSARTと呼び、ルネサス製H8マイコンはUART機能を持った内蔵デバイスのことをSCIといいます。

UARTは Universal Asynchronous Receiver Transmitter の略で、ナショナルセミコンダクター製の16450や16550A等のICが源流です。
今では、ICというよりはUARTという技術自体が業界標準となっています。
また、UARTがTTLやCMOSと同じ電圧レベルであるため、人によってはUARTのことをTTL通信・CMOS通信やロジック通信と呼ぶ方も時々います。

通信フォーマット

UARTは、調歩同期式と呼ばれる方式で送受信を行います。
これは、同期クロック線を不要にした方式で、送信・受信・GNDの3線のみで通信を行います。
最近はデーター垂れ流しが基本で、相手と送受信タイミングを取ることは滅多にありません。
どうしても、データー量やマイコンの処理の都合で、相手側デバイスと送受信のタイミングを取らなければならない場合は、タイミング用のデータを送受信してから本データをやり取りするか、マイコンのポートで「受信待ち」「受信不可」などの情報を交換します。

調歩同期式の通信フォーマットは以下のようになります。
UARTの通信フォーマット
(上図はPIC16F690でパリティビットがないフォーマット)
スタートビットからストップビットまでが1バイト分の転送です。

データの転送がない時は、Hレベル(5Vや3Vなどのマイコンの電源電圧)となっており、データを転送する時には、データを送る側TXが最初にスタートビットと呼ばれる一定期間Lレベルのパルスを出します。
受け側は、このスタートビット、つまり今までHレベルだったのがLレベル(0Vなど)になったことで、転送が開始されるということを認識します。
スタートビットが終了後、次に転送したい1バイトデータのビット0側(LSBともいう)から順に送信されます。

例えばビット0が1の場合は一定期間Hレベル(5V)、ビット1が0の場合はLレベル(0V)というようになります。
そして、1バイト(8ビット)を転送し終えた次に、パリティビットと呼ばれるエラーチェック用のビットが送られます。
パリティビットはマイコンが勝手に計算して付加するので、使用する側は意識する必要はほとんどありません。
尚、パリティビットはソフトウエアで付加するしないの設定ができますが、一部のマイコン(PIC16F690など)は、最初から付加しないと固定されていることもあります。(上記図はパリティビットなし)
パリティビットが送られた後は、ストップビットと呼ばれるHレベルのパルスが設定に応じて1ヶまたは2ヶ分の期間送られます。

当然ですが、各パルスの幅やパリティビット、ストップビットの数など、自分側と相手側のマイコンは同じ設定をしなければなりません。
これらは事前にプログラムで設定さえしておけば、マイコン内蔵のUARTハードウエアが設定した通り自動的行ってくれます。

UARTの通信距離

UARTはマイコンのポートをそのまま相互に接続したような構成であるため、他の規格に比べノイズに弱くメートル単位の遠距離通信には不向きです。
通信速度や使用する周囲環境にもよりますが、同一基板内の使用が基本です。
もし、基板外に配線を引き出すとしても数十cm以下で使用します。

実際の配線例と注意点

以下回路図は、PIC16F690同士をUARTで接続する場合の配線例です。
PIC16F690のUARTを相互接続した場合の回路図
基本的にはTX端子を、相手のRX端子に接続します。
同じ電源を使用していれば、単純にこれだけでお互い通信が可能です。
TXは送信、RXは受信という意味の略で良く使われます。
マイコンによっては、TXDやRXDなど若干違う言い方をします。

回路図中のR1とR2は、電源を入れた瞬間の誤通信防止と、回路インピーダンスを下げてノイズレベルを下げるために付加します。
ソフトウエア等で電源オンの誤通信をフィルタリング出来る場合などは不要な事もあります。
信号線のノイズ耐性を上げるためにも、できる限り抵抗は入れましょう。

UARTのコネクタ

UARTに決まったコネクタはありません。
機器内のデバイス間通信で使われるため、直接配線でコネクタを必要としないか、必要な場合でも適当なコネクタを使用することがほとんどです。

設定が必要なパラメータ

一般的には、以下のパラメータの設定が必須です。
マイコン特有の設定が追加で必要な場合があります。
PIC16F690系であれば、電子工作の知恵袋の PIC16F690汎用Cソースコード汎用Cソースコード定義関数の説明 の利用で簡単に設定ができます。
参考にしてください。

・通信速度
良くある設定速度(ボーレート)は以下の通りです。(単位:bps=ビット/秒)
 110bps、150bps、300bps、600bps、1200bps、2400bps
 4800bps、9600bps、19200bps、38400bps
他には、115kbpsなどマイコンが対応している場合もあります。
最近は、マイコンの高速化に伴い115kbpsを使う場合が多くあります。
尚、通信速度はマイコンのクロック周波数に依存します。

・データビット数
8ビットか7ビットかを選択します。
7ビットを選ぶことはほとんどありません。
一般的には、8ビットを設定します。
7ビットは昔のアスキーコードが7ビットで足りた時代の名残りのようなものです。

・パリティビット
1となっているビットの数が偶数個になるようにこのビットを付加する場合を偶数パリティ、逆に奇数となるようにするのが奇数パリティといいます。
ノイズなどによるデータ化けの判定のための付加ビットで、付加することでエラー判定しやすくなりますが、1ビット分転送時間が余分に必要となるため、使用環境が良好な場合は付加しません。
基本的には、事前に設定すればマイコンのUARTが自動で付加とエラー判定を行います。

・ストップビットの数
1ビットまたは2ビットを選択します。
2ビットを選ぶことはほとんどありません。
基本は、1ビットです。

・割り込み
データが1バイト分届いたらマイコンの割り込みを発生させるかどうかを選択します。
常にデータが届いたかどうかをプログラムで監視する必要がないので、基本は割り込みを使います。

・エラー発生時の対応
何らかのエラーが通信中に発生する可能性はゼロではありません。
マイコンのハードウエアが検出できる通信エラー項目全てに対してどのように対応するのかを設定する必要があります。
尚、基板内短距離通信の場合や周囲のノイズ環境が良好な場合は、エラー検出設定はオフにすることがよくあります。

上記パラメータをプログラムする方法や手順は、残念ながらどのマイコンでも使える標準化されたソースコードはありません。
マイコンによってハードウエア構成と設定内容が異なるためです。
面倒ですが使うマイコンのマニュアルを1つ1つ地道に確認しながら行います。

送受信のタイミング

最近のUARTの使い方は、受け取る側の事情を考えずに(つまりタイミングを取らずに)送信側は任意に垂れ流しする使い方がほとんどです。
受信する側は、受信した1バイトを次の1バイトが来るまでに必ず何らかの処理を終わらせて備えていなければなりません。
つまり、受信側マイコンは、割り込みを使うなりして、後でデータを処理するためにバッファーに移すか、次のデータが来るまでに即時処理するようにプログラムを作ります。
どうしても、処理時間の問題などで、やり取りのタイミングを取る必要がある場合は、本データを送ってよいか確認用のコードを先にやり取りしてから本データを送る方法や、送受信マイコンのポートを相互に接続しハンドシェイク制御することになります。

最新

中の人

電子回路とファームウェア専門の元エンジニアが、初心者の頃の疑問や勉強・経験で知った「そうだったのか」を2009年から書いています。

▲ページの先頭へ戻る