UART(Universal Asynchronous Transmitter Receiver)は、全二重シリアル通信に使用される最も一般的なプロトコルです。 非同期通信を行うために設計された1つのLSI(大規模集積回路)チップです。
このチュートリアルでは、UART通信の基本と、UARTの動作について学びます。
UARTとは
「UART」はUniversal Asynchronous Receiver-transmitterの略です。 マイクロコントローラーの内部に存在するハードウェアの周辺機器です。 UARTの機能は、受信および送信データをシリアルバイナリストリームに変換することです。 周辺機器から受信した8ビットのシリアルデータは、シリアル/パラレル変換によりパラレル形式に変換され、CPUから受信したパラレルデータは、シリアル/パラレル変換により変換されます。
UARTが使われる理由
高速通信には、SPI(シリアル・ペリフェラル・インターフェイス)やUSB(ユニバーサル・シリアル・バス)などのプロトコルが使用されます。 高速なデータ転送が必要でない場合は、UARTが使用されます。 送信機と受信機が1つずつの安価な通信機器です。
UARTインターフェース
RS232-TTL変換器やUSB-TTL変換器を使って、PC(パーソナルコンピュータ)とインターフェースすることができます。 RS232とUARTの共通点は、どちらもデータの送受信にクロックを必要としないことです。
Block Diagram
UARTは以下のコアコンポーネントで構成されています。 それらは送信機と受信機です。 送信機は、送信ホールドレジスタ、送信シフトレジスタ、および制御ロジックで構成されています。 同様に、受信機は受信ホールドレジスタ、受信シフトレジスタ、制御ロジックで構成されています。
UARTブロックダイアグラム
ボーレートジェネレータは、トランスミッタとレシーバがデータを送受信する際の速度を生成します。 送信ホールドレジスタは、送信するデータバイトを格納します。
これらに加えて、読み書きのタイミングを指示するための読み書き制御ロジックが用意されています。 ボーレートジェネレータは、110bps(ビット・パー・セカンド)から230400までの速度を生成します。 ほとんどのマイクロコントローラーは、より高速なデータ転送のために115200や57600などの高いボーレートを採用しています。
How UART works?
UARTの動作を知るためには、シリアル通信の基本的な機能を理解する必要があります。 簡単に言うと、送信機と受信機はスタートビット、ストップビット、タイミングパラメータを使って、お互いに同期を取ります。 元のデータはパラレル形式です。 例えば、4ビットのデータがあり、それをシリアル形式に変換するには、パラレル→シリアル変換器が必要です。 一般的には、Dフリップフロップやラッチを使用して変換器を設計します。
D-フリップフロップの動作
Basic D Flip-Flop
Dフリップフロップはデータフリップフロップとしても知られており、以下の場合にのみ、入力側から出力側に1ビットシフトします。
Dフリップフロップは、データフリップフロップとも呼ばれ、クロックがHigh状態からLow状態、またはLow状態からHigh状態に遷移したときに、入力側から出力側に1ビットをシフトします。 同様に、4ビットのデータを転送したい場合は、4つのフリップフロップが必要となります。
注:ここで、
「D」は入力データを、
「CLK」はクロックパルスを、
「Q」は出力データを表しています。 それでは、パラレル→シリアル、シリアル→パラレルのコンバータを設計してみましょう。
パラレルからシリアルへの変換
パラレルからシリアルへの変換
カスケード接続 – パラレルからシリアルへ
Step#1:
フリップフロップを4つ用意します。 フリップフロップの数は、送信するビット数に相当します。 同様に、各フリップフロップの前にマルチプレクサを配置しますが、最初のフリップフロップは除きます。 マルチプレクサは、データを合成してシリアルビットに変換するために配置されます。
Step#2:
さて、Dフリップフロップにデータを一度にロードします。 並列データを引っ張ってきて、最後のフリップフロップ(4個)の最後のビットを動かし、次に3ビット目、2ビット目、最後に1ビット目を動かします。 ここで、パラレルデータをシリアルに変換するために、シリアル-パラレルコンバータを使用します。
シリアルからパラレルへの変換
シリアルからパラレルへの変換
カスケード接続 – シリアルからパラレルへの変換
Step#1:
フリップフロップを4つ用意します。 フリップフロップの数は送信するビット数と同じです。
Step#2:
最初はパラレルバスをディセーブルにします。 すべてのビットがロードされるまでイネーブルにしません。 最初のフリップフロップの入力にデータを格納します。 ここでクロックをハイにすると、最下位ビットが2つ目のフリップフロップの入力と1つ目のフリップフロップの出力にシフトします。 同様に、クロックをHighにすることで、すべてのビットを1つずつシフトします。
Step#3:
現在、各フリップフロップには1ビットのシリアルデータが格納されています。 全ビットがフリップフロップの出力に転送されるまでの間、バスをイネーブルにします。
プロトコル形式
UARTは、スタートビット「0」で通信を開始します。
プロトコルフォーマット
また、パリティビット(偶数または奇数)を備えています。 偶数パリティビットは「0」(1の偶数個)、奇数パリティビットは「1」(1の奇数個)で表されます。
送信
データの送信は1本の送信ライン(TxD)を使って行われます。 ここで「0」はスペース、「1」はマークの状態とみなされます。
Transmission frame
送信機は一度に1つのビットを送信します。 1つのビットを送信した後、次のビットを送信します。 このようにして、すべてのデータビットがあらかじめ定義されたボーレートで受信機に送られます。 各ビットを送信する際には、一定の遅れが生じます。 例えば、1バイトのデータを9600ボーレートで送信する場合、各ビットは108μ秒の遅延で送信されます。 データにはパリティビットが付加されます。
注意:送信時には、常にLSB(最下位ビット)が最初に送信されます。
受信
受信時には、RxDライン(レシーバー)がデータの受信に使用されます。
Receive Frame
UARTインターフェースの例
この例では、ESP8266のUARTとMAX232のインターフェースを示します。
MAX232 Pinout
MAX232 ICは、232レベルの電圧を駆動するための容量性電圧発生器を含む5V電源で動作します。
ここでは、UARTを内蔵したESP8266(32bitマイコン)を使用しています。 ESP8266との通信は、RS232-TTLレベルコンバータ(MAX232)を介してATコマンドで行うことができる。
ESP8266 interfacing with UART
PCから有効なATコマンドを要求すると、Wi-Fiチップは確認応答を返します。
ここでは、PCとのシリアル通信を実装する手順を説明します。
- ESP8266のトランスミッター(TX)をRS232-TTLレベルコンバーター(MAX232)のレシーバー(TX)とPCのRXに接続する。
- ESP8266のレシーバー(RX)をPCのTXとTTLコンバーターのRXに接続する。
ESP8266のコマンド
ATコマンド(PCから送信) | ESP8266のレスポンス(PCが受信) |
---|---|
ATコマンド(PCから送信) | ESP8266のレスポンス(PCが受信)th |
AT<CR><LF> | OK<CR><LF> |
AT+CIPMUX=1 | OK<CR><LF> |
AT+CIPSERVER=1,23<CR><LF> | OK<CR><LF> |
以下のスクリーンショットは、ESP8266モジュールによって与えられた応答を示しています。
ESP8266 Commands – Docklight Program
UART vs USART
USARTは、UARTの基本形です。 技術的には、両者は同じではありません。 しかし、その定義はどちらも同じです。
UARTとUSARTの主な違いは、UARTが非同期通信のみをサポートしているのに対し、USARTは同期通信だけでなく非同期通信もサポートしている点です。
UARTとUSARTの主な違いは、UARTは非同期通信のみをサポートし、USARTは同期通信と非同期通信をサポートすることです。
UART | USART |
---|---|
クロックはマイクロコントローラによって内部で生成されます。 | |
送信デバイスがクロックを生成します。 | |
データレートが遅いです。 | 外部クロックによりデータレートが高くなります。 |
スタンドアロン・プロトコル | LIN、RS-485、IrDA、Smart Cardなどの複数のプロトコルをサポートしています。 |
送信前にボーレートを知る必要があります。 | |
低速通信に適しています。 | 高速通信に適しています。 |
エネルギー・フットプリントを削減します。 |
RS232とUART
ロジック・レベルは、デバイスが安全な領域で動作するために耐えることができる動作電圧レベルを表します。 ここでは、RS232とTTLの電圧レベルを示します。
RS232のロジックです。
RS232の電圧レベル
ロジックレベル | 電圧範囲 |
---|---|
ロジックハイまたはオフ出力 | -5V – – 15V15V |
ロジック・ローまたはオン出力 | +5V~+15V |
ロジック・ハイまたはオフ入力 | -3V to -15V |
Logic Low or ON input | +3V to +15V |
ほとんどの場合、RS232のレベルは-12Vから+12Vの範囲です。 例えば、RS232で文字「A」を表すASCII値は65、16進法では41です。 例えば、RS232の文字「A」のASCII値は65、16進法では41となり、8ビットの2進法では0100 0001となります。
RS232 Signal for ASCII Letter A
TTL/CMOS Logic:
UARTはTTL論理で動作します。
TTL CMOS Signal for ASCI Letter A
- 初期状態では、シリアルラインは一般的にマーク状態と呼ばれるアイドル状態(ロジック1)です。
- 最初に、シリアルラインはマーク状態(ロジック1)と呼ばれるアイドル状態にあり、スタートビット(ロジック0)からデータ送信を開始します。 また、データ通信に外部クロックを必要としません。
デメリット
UARTの主なデメリットは、マルチスレーブまたはマルチマスター構成をサポートしていないことです。 また、データパケットのサイズは9ビットに制限されています。
アプリケーション
- シリアルデバッグポートは、UARTドライバを使用して外部からのデータをプリントアウトします。
- 組み込みデバイスとの間でコマンドを送受信するために使用できます。
- GPS、GSM/GPRSモデム、Wi-Fiチップなどの通信は、UARTで動作します。
- 異なるコンピュータを接続するためのメインフレームアクセスで使用されます。