UART/USART
UARTは(Universal Asynchrous Receive Transmitter)の略で、シリアル通信を行うためのデバイスあるいはプロトコルです。USARTは(Universal Synchrous Recieve Transmitter)の略で、こちらもシリアル通信を行うためのデバイスあるいはプロトコルにです。UARTとUSARTの違いはUARTは非同期モードのみサポートしているのに対し、USARTは非同期、同期ともにサポートしていることが異なります。この通信プロトコルはほとんどのマイコンがサポートしています。イーサネット、USBなどと異なりUSART通信用の特定のポートはありません。UARTは一般的に、RS-232, 434, USBなどと組み合わせて使われます。
非同期通信の場合、クロックを使用せず、データ伝送する場合、スタート、ストップビットを利用します。
同期通信の場合、クロックとデータは同時に別に送信し、スタート・ストップビットは使用されません。スタート・ストップビットの余計な通信が回避することができ、データ転送の効率が向上します。
UART/USARTのハードウェア構成要素
UART/USARTはハードウェアとしては、以下の要素から構成されています。
- ボードレート生成器
- Tx, Rxレジスタ
- 送信/受信制御
- 送信/受信バッファ
- FIFOバッファメモリ
UARTのバス構成
UARTペリフェラルは以下のように4つのピンが存在します。RTS, CTSはハードウェアフロー制御を使用するときに必要なピンです。RTS, CTSはアクティブローで、クリアを表すCTS(Clear to Send)ピン、送信要求を表すRTS(Request to Send)ピンの2つがあります。ハードウェアフロー制御については後述します。
- TX
- データ送信用ピン
- RX
- データ受信用ピン
- RTS
- ハードウェアフロー制御用ピン
- CTS
- ハードウェアフロー制御用ピン
UARTの最小構成
ハードウェアフロー制御が使用されていない場合、UARTで双方向通信をする場合、最低でもTx ,Rxの2本のピンが必要です。
Rxピンを使用してUARTペリフェラルに入力し、Txを使用してUARTペリフェラルからデータを送信します。何も送信していない場合、TxはHighで保たれています。これがバスのアイドル状態を表します。
UARTペリフェラルでは、データを受信するためにRxピンで継続的にサンプリングを行います。そして、フレームのスタートビットを検出し、通信の開始を検出します。スタートビットが検出されると、ストップビットを検出するまでデータを受信します。
ハードウェアフロー制御を含めた構成
ハードウェアフロー制御を有効にする場合、CSTピンがLowの期間のみデータ送信が発生します。Highの場合は、送信したデータが保持されます。データ送信を有効にするために、CTSピンを他のでバスによってLowにする必要があります。
RTSは送信要求を表し、データが必要であることを他のデバイスに通知します。送信要求するため、UART0のRTSがLowになり、UART1のCTSがLowになります。その後、UART1が送信し、UART0はデータを受信します。
ハードウェアフロー制御は通信データの信頼性と安定性を確保するために使用されます。
高速なデータ通信を行う場合、受信側のデータ処理が追いつかずデータのバッファが十分に存在しない場合が存在します。このような場合、データのロストなどが発生し、意図しない制御になることがあります。このようなシーンにハードウェア制御が有効です。受信側がデータを受信できることを送信側に通知してから、送信することができます。そのため、受信側がデータを受信できるようになるまで送信を停止することができます。そのため、データの取りこぼしが起こらず信頼性の高い通信が実現できます。
UARTフレームフォーマット
UARTのフレームフォーマットを下図に示します。
常にフレームはStartビットで開始され、Stopビットで終了します。Startビットは1ビットの期間で常にLowであることです。その後、データが送信されます。データは指定できることがあり、5~9ビットの間をどれか選択することができます。その中で、1ビットをパリティビットとして割り当てることができます。偶数、奇数パリティどちらも選択でき、パリティビット自体は必ず必要なものではありません。
最後に、Stopビットでフレームが終了したことを表します。Stopビットは、1, 1.5, 2ビットの期間で常にHighであることで定義されます。
ボードレート
ボードレートは送信側が伝送線をHighあるいはLowに保持する時間を決定します。ボードレートを反転すれば、1ビットの送信にかかる時間を計算することができるため、実質的に伝送速度を表します。
下記では、ボードレートは9600bpsで設定されています。この場合、1ビットの期間は1/9600で、104usとなります。したがって、8ビット送信する場合、832us必要ということがわかります。
ボードレートを大きくすると、1ビットの期間が短くなるため、データの送信が速くなるということを意味します。ボードレートは基本的にはどんな値でも問題ありませんが、送信側と受信側でボードレートを一致させる必要があります。
一般的によく用いられるボードレートは2400, 4800, 9600, 19200, 38400, 57600, 115200があります。ボードレートが高いほど伝送速度は上がりますが、上限はUARTペリフェラルのクロック周波数に依存します。
Start, Stopビット
UARTでは、Startビットでフレームの開始を表し、Stopビットでフレームの終了を表します。Startビットは常に1ビットの期間Lowで保持されていることで定義しますが、Stopビットは1, 1.5, 2ビット区間など複数の区間から選択することができます。
多くの場合,Stopビットは1ビットを使用しますが、ボードレートがMbpsなどの非常に高速なボードレートを使用する場合は1.5, 2ビットの使用を検討しましょう。
ここでは、ボードレートが9600bpsの場合で、Stopビットが1, 1.5, 2ビットの場合を図示しています。
まとめ
本記事では、UART通信について解説しました。UARTはRX, TX, CTS, RTSの4つのピンが必要な非同期なシリアル通信のインタフェースです。ハードウェアフロー制御を必要としない場合は、RX, TXのみで通信が可能です。特に重要な設定値としてボードレートがあり、伝送速度を表しています。
コメント