熊おふし五郎が行く

主にマイコンボードを動かした記録を書いています

UART通信

概要

UARTは Universal Asynchronous Receiver Transmitter(汎用非同期送受信回路)の頭文字をとったものです。 パラレル信号をシリアル信号に変換したり、シリアル信号をパラレル信号に変換したりする回路です。変換したシリアル信号をデバイス同士の通信に使われることがあります。UARTは、非同期でシリアル通信をします。非同期なのでクロック用の信号線はありませんので、信号線は送信と受信の2線です。

基本的な接続

TX信号線とRX信号線の2つの信号線を使って通信します。TX信号線データ送信に、RX信号はデータ受信に使います。
接続するときは、デバイスまたはマイコンの送信ピンと受信ピンをそれぞれ接続します。

f:id:bear_9973:20200907204114p:plain:w350
基本的な接続

データフォーマット

データフォーマットは、以下の設定により変更できます。

  • クロックレート(ポーレート、通信速度)
  • ビット数
  • パリティビット
  • ストップビット

f:id:bear_9973:20200907200747p:plain
データフォーマット

クロックレート(ポーレート、通信速度)

1秒間に受けとるデータのbit数です。bps(bit per second)という単位が使われます。例えば、9600bpsの場合、1秒間に9600bitのデータを送受信できます。UARTは送受信する信号にクロック信号がないため、送受信するデバイスの間でクロックレートを予め決めます。
一般的には9600bpsが使われます。クロックレートが高いほど、ケーブル長の上限は短くなります。

ビット数

送受信するひとつのデータの長さです。デバイス、送受信するデータによって、8bit前後が決められます。例えば、文字を1つ送信する場合、文字コードが8bitなのでビット数が8bitになります。
一般的には8bitが使われます。

パリティビット

誤り検出符号ビットです。パリティビットは、None、偶数、奇数から選択できます。 Noneは、誤り検出をしません。偶数または奇数は、送受信するデータの1の数によって誤りを検出します。たとえば、偶数の場合、送受信するデータの1の数が偶数のとき、パリティビットは0になります。データの1の数が奇数のとき、パリティビットは1になります。
一般的にはパリティビットが使われません。つまりNoneを設定することが多いです。

ストップビット

送受信するデータの次のビットです。ストップビットはHighです。ストップビットがbit単位で維持することができます。
一般的には1bitのストップビットが使われます。

その他の設定

フォーマット以外に他の設定ができます。

  • TXに使うピン
  • RXに使うピン
  • TXバッファの文字長
  • RXバッファの文字長
  • 最初の文字を待つ時間(ミリ秒単位)
  • 文字間の待機時間(ミリ秒単位)。
  • 極性反転

ソフトとマイコン

マイコン同士のUART通信、マイコンとWinPCとのUART通信のサンプルコードを説明します。

送受信データの電文(伝文)の仕様

UART通信で送受信する電文は主に2つの種類に分けられます。 各種の特長と受信するフローを説明します。

  • 固定長
  • 可変長

固定長

送受信するデータのバイト長さを、例えば3つに固定する仕様です。 電文の仕様が3バイトの固定長にする場合、2バイトのデータを送信するときは、残りの1バイトは0を必ず入れる必要があります。

特長

固定長の特長を以下に示します。

  • プログラムが簡単で短い
  • 送受信時間が一定

受信プログラムのフロー

毎回の電文のバイト数を固定にして、受信します。

可変長

送受信するデータのバイト長さを、電文によって変更する仕様です。 電文の仕様によっては、4バイトであったり、5バイトであったりします。

特長

可変長さの特長を以下に示します。

  • 効率よく送受信できる

通信するごとに電文を必要最低限の長さに調整できるため、送受信時間が固定長よりも短くなる場合が多くあります。ただし、可変長の電文を受信するプログラムは複雑になります。

可変長の種類

電文の長さを電文自体に組み込む方法によって、以下の2種類があります。

  • 電文の最後に終了コード(改行など)を入れる
  • 電文の一部に長さの情報を入れる

受信プログラムのフロー

可変長の電文を受信するプログラムは、電文の長さを検出することが大きなポイントになります。電文の長さの情報を受信したデータから探すため、可変長の種類によってプログラムが違います。

電文の最後に終了コード

1バイト単位に受信し、終了コードがあれば受信を完了します。

電文の一部に長さの情報

電文の長さがある情報まで受信し、電文の長さが判明したら残りの電文を固定長として受信します。

bear-9973.hatenablog.com