UARTを理解する
UART、またはユニバーサル非同期受信機-送信機は、最も使用されているデバイス間通信プロトコルの1つです。この記事では、標準的な手順に従ってUARTをハードウェア通信プロトコルとして使用する方法を示します。
適切に構成されている場合、UARTはシリアルデータの送受信を含む多くの異なるタイプのシリアルプロトコルで動作できます。シリアル通信では、データは単一の回線またはワイヤを使用してビットごとに転送されます。双方向通信では、シリアルデータ転送を成功させるために2本のワイヤを使用します。アプリケーションとシステムの要件に応じて、シリアル通信に必要な回路と配線が少なくて済み、実装コストが削減されます。
この記事では、UARTを使用する際の基本原則について説明します。特に、パケット送信、標準フレームプロトコル、および実装時のセキュリティコンプライアンスの付加価値機能であるカスタマイズされたフレームプロトコルに焦点を当てます。このドキュメントは、製品開発中に、実際の使用法についてデータシートを確認する際のいくつかの基本的な手順を共有することも目的としています。
記事の最後の目標は、UART標準の理解とコンプライアンスを向上させ、特に新製品を開発する際に機能とアプリケーションを最大化することです。
「コミュニケーションにおける最大の問題は、それが起こったという幻想です。」
—ジョージバーナードショー
通信プロトコルは、デバイス間の通信を整理する上で大きな役割を果たします。システム要件に基づいてさまざまな方法で設計されており、これらのプロトコルには、通信を成功させるためにデバイス間で合意された特定のルールがあります。
組み込みシステム、マイクロコントローラー、およびコンピューターは、ほとんどの場合、デバイス間ハードウェア通信プロトコルの形式としてUARTを使用します。利用可能な通信プロトコルの中で、UARTは送信側と受信側に2本のワイヤのみを使用します。
ハードウェア通信プロトコルの広く使用されている方法であるにもかかわらず、それは常に完全に最適化されているわけではありません。マイクロコントローラ内でUARTモジュールを使用する場合、フレームプロトコルの適切な実装は一般的に無視されます。
定義上、UARTは、設定可能な速度で非同期シリアル通信を使用するハードウェア通信プロトコルです。非同期とは、送信デバイスからの出力ビットを受信側に同期するためのクロック信号がないことを意味します。
インターフェース
図1.2つのUARTは互いに直接通信します。
各UARTデバイスの2つの信号の名前は次のとおりです。
- 送信機(Tx)
- レシーバー(Rx)
各デバイスの送信機と受信機の回線の主な目的は、シリアル通信を目的としたシリアルデータを送受信することです。
図2.データバスを備えたUART。
送信UARTは、並列形式でデータを送信する制御データバスに接続されます。これにより、データは伝送ライン(ワイヤ)上でビットごとに受信UARTにシリアルに送信されます。これにより、受信デバイスのシリアルデータがパラレルに変換されます。
UARTラインは、あるデータを別のデータと送受信するための通信媒体として機能します。 UARTデバイスには、送信または受信専用の送信ピンと受信ピンがあることに注意してください。
UARTおよびほとんどのシリアル通信では、送信デバイスと受信デバイスの両方でボーレートを同じに設定する必要があります。ボーレートは、情報が通信チャネルに転送されるレートです。シリアルポートのコンテキストでは、設定されたボーレートは、転送される1秒あたりの最大ビット数として機能します。
表1は、UARTについて知っておくべきことをまとめたものです。
表1.UARTの概要
ワイヤ2Speed9600、19200、38400、57600、115200、230400、460800、921600、1000000、1500000伝送方法非同期最大マスター数1最大スレーブ数1UARTインターフェースは、送信機と受信機のデバイスを同期するためにクロック信号を使用しません。データを非同期で送信します。クロック信号の代わりに、トランスミッタはクロック信号に基づいてビットストリームを生成し、レシーバは内部クロック信号を使用して着信データをサンプリングします。同期点は、両方のデバイスで同じボーレートを持つことによって管理されます。そうしないと、データの送受信のタイミングに影響を及ぼし、データ処理中に不一致が生じる可能性があります。ビットのタイミングが大きく外れる前に、ボーレートの許容差は最大10%です。
データ送信
UARTでは、送信モードはパケットの形式です。送信機と受信機を接続する部分には、シリアルパケットの作成が含まれ、それらの物理ハードウェア回線を制御します。パケットは、スタートビット、データフレーム、パリティビット、およびストップビットで構成されます。
図3.UARTパケット。
スタートビット
UARTデータ伝送ラインは、データを伝送していないときは通常、高電圧レベルに保たれます。データの転送を開始するために、送信UARTは1クロックサイクルの間伝送ラインをハイからローにプルします。受信UARTは、高電圧から低電圧への遷移を検出すると、ボーレートの周波数でデータフレームのビットの読み取りを開始します。
図4.スタートビット。
データフレーム
データフレームには、転送される実際のデータが含まれています。パリティビットを使用する場合は、5ビットから最大8ビットの長さにすることができます。パリティビットが使用されていない場合、データフレームの長さは9ビットになります。ほとんどの場合、データは最下位ビットが最初に送信されます。
図5.データフレーム。
パリティ
パリティは、数値の偶数または奇数を表します。パリティビットは、受信側UARTが送信中にデータが変更されたかどうかを判断するための方法です。ビットは、電磁放射、不一致のボーレート、または長距離データ転送によって変更される可能性があります。
受信UARTはデータフレームを読み取った後、値が1のビット数をカウントし、合計が偶数か奇数かをチェックします。パリティビットが0(偶数パリティ)の場合、データフレームの1ビットまたはロジックハイビットの合計は偶数になります。パリティビットが1(奇数パリティ)の場合、データフレームの1ビットまたはロジックハイは合計で奇数になります。
パリティビットがデータと一致すると、UARTは送信にエラーがなかったことを認識します。ただし、パリティビットが0で合計が奇数の場合、またはパリティビットが1で合計が偶数の場合、UARTはデータフレームのビットが変更されたことを認識します。
図6.パリティビット。
ストップビット
データパケットの終了を通知するために、送信UARTはデータ伝送ラインを低電圧から高電圧に1〜2ビットの持続時間で駆動します。
図7.ストップビット。
UART送信の手順
最初:送信UARTはデータバスから並列にデータを受信します。
図8.送信UARTへのデータバス。
2番目:送信UARTは、スタートビット、パリティビット、およびストップビットをデータフレームに追加します。
図9.Tx側のUARTデータフレーム。
3番目:パケット全体が、送信UARTから受信UARTへの開始ビットから停止ビットまでシリアルに送信されます。受信UARTは、事前設定されたボーレートでデータラインをサンプリングします。
図10.UART送信。
4番目:受信UARTは、データフレームからスタートビット、パリティビット、およびストップビットを破棄します。
図11.Rx側のUARTデータフレーム。
5番目:受信UARTはシリアルデータをパラレルに変換し直し、受信側のデータバスに転送します。
図12.データバスへのUARTの受信。
フレームプロトコル
UARTで利用可能であるが完全には使用されていない重要な機能の1つは、フレームプロトコルの実装です。これの主な用途と重要性は、各デバイスのセキュリティと保護の付加価値です。
たとえば、2つのデバイスが同じUARTフレームプロトコルを使用している場合、構成を確認せずに同じUARTに接続すると、デバイスが異なるピンに接続され、システムの誤動作を引き起こす可能性があります。
一方、これを実装すると、デザインフレームプロトコルに合わせて受信した情報を解析する必要があるため、セキュリティが確保されます。各フレームプロトコルは、一意で安全になるように特別に設計されています。
フレームプロトコルの設計では、設計者はCRCを含む目的のヘッダーとトレーラーをさまざまなデバイスに設定できます。図13では、2バイトがヘッダーの一部として設定されています。
2番目:メモリマップの下で、UARTアドレスを確認します。
図13.UARTフレームプロトコルの例。
サンプルに基づいて、デバイスに固有のヘッダー、トレーラー、およびCRCを設定できます。
ヘッダー1(H1は0xAB)およびヘッダー2(H2は0xCD)
ヘッダーは、通信しているかどうかを判断する一意の識別子です
正しいデバイス。
コマンド(CMD)の選択
コマンドは、2つのデバイス間の通信を作成するために設計されたコマンドのリストによって異なります。
コマンドあたりのデータ長(DL)
データ長は、選択したコマンドに基づきます。選択したコマンドに応じてデータの長さを最大化できるため、選択内容に応じてデータの長さを変えることができます。その場合、データ長を調整できます。
データn(さまざまなデータ)
データは、デバイスから転送されるペイロードです。
予告編1(T1は0xE1)と予告編2(T2は0xE2)
トレーラーは、送信が終了した後に追加されるデータです。ヘッダーと同様に、それらは一意に識別できます。
巡回冗長検査(CRC式)
サイクリング冗長性チェック式は、生データへの偶発的な変更を検出するための追加のエラー検出モードです。送信デバイスのCRC値は、常に受信側のCRC計算と等しくなければなりません。
UARTデバイスごとにフレームプロトコルを実装してセキュリティを追加することをお勧めします。フレームプロトコルには、送信デバイスと受信デバイスの両方で同じ構成が必要です。
UART操作
ハードウェア通信プロトコルを使用する場合は、データシートとハードウェアリファレンスマニュアルを確認することが前提条件です。
従う手順は次のとおりです。
まず、デバイスのデータシートインターフェースを確認します。
図14.マイクロコントローラーのデータシート。
図15.マイクロコントローラーのメモリマップ。
3番目:動作モード、データビット長、パリティビット、ストップビットなどのUARTポートの特定の詳細を確認します。データシートのUARTポートの詳細の例:
UARTポート
サンプルMCUは、PC標準UARTと完全に互換性のある全二重UARTポートを提供します。 UARTポートは、他の周辺機器またはホストへの簡略化されたUARTインターフェイスを提供し、全二重、DMA、およびシリアルデータの非同期転送をサポートします。 UARTポートには、5〜8データビットのサポートが含まれ、パリティなし、偶数、または奇数が含まれます。フレームは、1.5または2ストップビットで終了します。
4番目:ボーレートの計算など、UARTの動作の詳細を確認します。ボーレートは、次のサンプル式を使用して構成されます。この式はマイクロコントローラーによって異なります。
UART操作のサンプル詳細:
- 5〜8データビット
- 1、2、または1および½ストップビット
- なし、または偶数または奇数のパリティ
- 4、8、16、32によるプログラム可能なオーバーサンプルレート
- ボーレート=PCLK /((M + N / 2048)×2 OSR + 2 ×DIV
ここで、
OSR(オーバーサンプルレート)
UART_LCR2.OSR =0〜3
DIV(ボーレートディバイダー)
UART_DIV =1〜65535
M(DIVMフラクショナルボーレートM)
UART_FBR.DIVM =1〜3
N(DIVMフラクショナルボーレートM)
UART_FBR.DIVN =0〜2047
5番目:ボーレートについては、使用するペリフェラルクロック(PCLK)を確認してください。この例では、26 MHzPCLKと16MHzPCLKが使用可能です。 OSR、DIV、DIVM、およびDIVNはデバイスごとに異なることに注意してください。
表2.26 MHzPCLKに基づくボーレートの例
ボーレート OSR DIV DIVM DIVN 9600324310781152003411563表3.16 MHzPCLKに基づくボーレートの例
ボーレート OSR DIV DIVM DIVN 9600317310781152003223486番目:次の部分は、UART構成の詳細なレジスタを確認することです。 UART_LCR2、UART_DIV、UART_FBRなどのボーレートを計算する際のパラメータを確認してください。表4は、カバーする特定のレジスタにつながります。
表4.UARTレジスタの説明
名前 説明 UART_DIVボーレート分周器UART_FIBRF実用ボーレートUART_LCR22次ライン制御7番目:各レジスタの下で、詳細を確認し、値を代入してボーレートを計算してから、UARTの実装を開始します。
なぜそれが重要なのですか?
UART通信プロトコルに精通していることは、堅牢で品質重視の製品を開発するときに有利です。 2本のワイヤだけを使用してデータを送信する方法、およびデータのパック全体またはペイロードを転送する方法を知っていると、データがエラーなしで送受信されるようになります。 UARTは最も一般的に使用されるハードウェア通信プロトコルであるため、この知識により、将来の設計で設計の柔軟性を高めることができます。
ユースケース
UARTは、次のような多くのアプリケーションに使用できます。
- デバッグ:開発中は、システムのバグを早期に検出することが重要です。 UARTを追加すると、システムからメッセージをキャプチャすることで、このシナリオに役立ちます。
- 製造機能レベルのトレース:ログは製造において非常に重要です。製造ラインで何が起こっているかをオペレーターに警告することにより、機能を決定します。
- 顧客またはクライアントの更新:ソフトウェアの更新は非常に重要です。完全なシステムを構築するには、更新可能なソフトウェアを備えた完全で動的なハードウェアを用意することが重要です。
- テスト/検証:製造プロセスを終了する前に製品を検証することで、可能な限り最高品質の製品を顧客に提供できます。
参考資料
「UART通信の基礎」。 Electronics Hub、2017年7月。
キャンベル、スコット。 「UART通信の基礎」。 回路の基本 。キーム、ロバート。
「基本に戻る:ユニバーサル非同期レシーバ/トランスミッタ。」 回路のすべて 、2016年12月。
「UARTプロトコルとは何ですか? UART通信の説明。」矢印。
埋め込み