
ユニバーサル非同期送受信機(UART / ˈ juː ɑːr t / )は、データ形式と伝送速度を設定可能な非同期シリアル通信用の周辺機器です。最下位ビットから最上位ビットへ、スタートビットとストップビットで囲まれたデータビットを1つずつ送信し、通信チャネルで正確なタイミングが処理されます。電気信号レベルは、UART外部のドライバ回路によって処理されます。一般的な信号レベルは、RS-232、RS-485、および短いデバッグリンク用の生のTTL [1]です。初期のテレタイプライタは電流ループを使用していました。
これは、オペレータ コンソールにテレタイプライターを接続するために使用された、最も初期のコンピュータ通信デバイスの 1 つでした。また、インターネットの初期のハードウェア システムでもありました。
UART は通常、コンピュータまたは周辺機器のシリアル ポートを介したシリアル通信に使用される個別の (または一部)集積回路(IC)です。 1 つ以上の UART 周辺機器がマイクロコントローラチップに統合されるのが一般的です。 特殊な UART は、自動車、スマート カード、SIMに使用されます。
関連デバイスであるユニバーサル同期非同期送受信機(USART) も同期操作をサポートしています。
OSI レベルの用語では、UART はレイヤー 2、つまりデータ リンク層に存在します。
歴史
初期の電信方式には、可変長パルス(モールス信号など)と回転する時計仕掛けの機構を使用してアルファベット文字を送信したものがありました。最初のシリアル通信デバイス(固定長パルスを使用)は、回転する機械式スイッチ(整流子)でした。5、6、7、または 8 のデータ ビットを使用するさまざまな文字コードは、テレプリンターで一般的になり、後にはコンピューターの周辺機器としても使用されました。テレタイプライターは、小型コンピューター用の優れた汎用 I/O デバイスでした。
DECのゴードン・ベルは、PDP-1から始まるPDPシリーズのコンピュータ用に、ラインユニットと呼ばれる回路基板全体を占める最初の UART を設計しました。[2] [3] ベルによると、 UART の主な革新は、信号をデジタル領域に変換するためにサンプリングを使用することで、手動で調整されるポテンショメータを備えたアナログタイミングデバイスを使用した以前の回路よりも信頼性の高いタイミングを可能にしたことです。[4]配線、バックプレーン、その他のコンポーネントのコストを削減するために、これらのコンピュータは、ハードウェアワイヤではなく XON および XOFF 文字を使用したフロー制御も開拓しました。
DECはラインユニット設計を自社用に初期のシングルチップUARTに凝縮しました。[2] Western Digitalはこれを1971年頃に最初の広く利用可能なシングルチップUARTであるWD1402Aに開発しました。これは中規模集積回路の初期の例でした。もう1つの人気チップは、 Signetics 2650ファミリーのSCN2651でした。
1980年代初期のUARTの例としては、IBM PCのオリジナルの非同期通信アダプタカードで使用されていたナショナルセミコンダクター 8250が挙げられます。 [5] 1990年代には、オンチップバッファを搭載した新しいUARTが開発されました。これにより、データ損失がなく、コンピュータからの頻繁な注意を必要とせずに、より高速な伝送が可能になりました。たとえば、人気のナショナルセミコンダクター16550には16バイトのFIFOがあり、16C550、16C650、16C750、16C850など多くのバリエーションが生まれました。
メーカーによって、UART 機能を実行するデバイスを識別するために異なる用語が使用されています。Intelは、 8251デバイスを「プログラマブル通信インターフェイス」と呼んでいました。MOS Technology 6551 は、 「非同期通信インターフェイス アダプタ」(ACIA) という名前で知られていました。「シリアル通信インターフェイス」(SCI) という用語は、1975 年頃にMotorolaで初めて使用され、他社が UART と呼んでいたスタート ストップ非同期シリアル インターフェイス デバイスを指していました。Zilog は、多数のシリアル通信コントローラ(SCC) を製造しました。
2000 年代以降、ほとんどのIBM PC 互換機は外部RS-232 COM ポートを取り外し、より高速にデータを送信できるUSBポートを使用するようになりました。RS-232 シリアル ポートをまだ必要とするユーザーには、外部USB-UART ブリッジが一般的に使用されるようになりました。これは、ハードウェア ケーブルとチップを組み合わせて USB と UART の変換を行うものです。Cypress SemiconductorとFTDI は、これらのチップの主要な商用サプライヤです。[6]ほとんどのコンピューターの外部では RS-232 ポートは使用できなくなりましたが、多くの内部プロセッサにはチップに UART が組み込まれており、ハードウェア設計者は通信に RS-232 またはRS-485 を使用する他のチップやデバイスとインターフェイスすることができます。
シリアルデータの送受信
UART には次のコンポーネントが含まれています。
- クロックジェネレータ。通常はビットレートの倍数で、ビット周期の途中でサンプリングできるようにします。
- 入力および出力シフトレジスタ、および送信/受信またはFIFOバッファ
- 送受信制御
- 読み取り/書き込み制御ロジック
ユニバーサル非同期送受信機(UART)は、バイト単位のデータを受け取り、個々のビットを順番に送信します。[7]送信先では、2番目のUARTがビットを完全なバイトに再構成します。各UARTにはシフトレジスタが含まれており、これがシリアル形式とパラレル形式間の変換の基本的な方法です。単一のワイヤまたはその他の媒体を介したデジタル情報(ビット)のシリアル伝送は、複数のワイヤを介したパラレル伝送よりもコストが低くなります。
UART は通常、異なる機器間で使用される外部信号を直接生成または受信しません。UARTのロジック レベル信号を外部信号レベル (標準化された電圧レベル、電流レベル、またはその他の信号) に変換するために、別のインターフェイス デバイスが使用されます。
通信には 3 つのモードがあります。
UART が機能するには、送信側と受信側の両方で次の設定が同じである必要があります。
電圧レベルについては、2つのUARTモジュールは、両方の電圧レベルが同じである場合(たとえば、2つのUARTモジュール間の電圧レベルが3V-3Vの場合)に正常に動作します。2つのUARTモジュールを異なる電圧レベルで使用するには、レベルスイッチ回路を外部に追加する必要があります。[8]
データフレーミング

UART フレームは 5 つの要素で構成されます。
- アイドル(論理ハイ(1))
- スタート ビット (論理ロー (0)): スタート ビットは、新しい文字が来ることを受信機に知らせます。
- データ ビット: 使用されるコード セットに応じて、次の 5 ~ 9 ビットが文字を表します。
- パリティ ビット: パリティ ビットが使用される場合、すべてのデータ ビットの後に配置されます。パリティ ビットは、受信側の UART が送信中にデータが変更されたかどうかを確認するための手段です。
- ストップ (論理ハイ (1)): 次の 1 ビットまたは 2 ビットは常にマーク(論理ハイ、つまり '1') 状態にあり、ストップ ビットと呼ばれます。これらは、文字が完了したことを受信側に知らせます。スタート ビットは論理ロー (0) で、ストップ ビットは論理ハイ (1) であるため、文字間では常に少なくとも 2 つの信号変化が保証されます。ラインが 1 文字の時間よりも長く論理ロー状態に保持されている場合、これは UART によって検出できるブレーク状態です。
最も一般的な設定である 8 データ ビット、パリティなし、1 ストップ ビット (別名 8N1) では、プロトコル効率は 80% です。比較すると、ペイロードが 1500 バイトの最大スループット フレームを使用する場合のEthernetのプロトコル効率は最大 95%、9000 バイトのジャンボ フレームを使用する場合は最大 99% です。ただし、Ethernet のプロトコル オーバーヘッドと 42 バイトの最小ペイロード サイズのため、1 バイトまたは数バイトの小さなメッセージを送信する場合、Ethernet のプロトコル効率は UART の 8N1 一定効率 80% よりも大幅に低下します。
アイドル状態、つまりデータなしの状態は高電圧、つまり電源が供給されている状態です。これは電信の歴史的遺産であり、回線と送信機が損傷していないことを示すために回線を高く保ちます。
各文字は、論理ロー スタート ビット、データ ビット、場合によってはパリティ ビット、および 1 つ以上のストップ ビットとしてフレーム化されます。ほとんどのアプリケーションでは、最下位データ ビット (この図の左側) が最初に送信されますが、例外もあります ( IBM 2741印刷端末など)。
受信機
UART ハードウェアのすべての操作は、データ レートの倍数 (通常はビット レートの 8 倍または 16 倍) で動作する内部クロック信号によって制御されます。受信機は、各クロック パルスで受信信号の状態をテストし、スタート ビットの開始を探します。見かけ上のスタート ビットがビット時間の半分以上続く場合、それは有効であり、新しい文字の開始を知らせます。そうでない場合は、スプリアス パルスと見なされ、無視されます。さらに 1 ビット時間待機した後、ラインの状態が再度サンプリングされ、結果のレベルがシフト レジスタにクロックされます。文字の長さに必要なビット期間数 (通常は 5 ~ 8 ビット) が経過すると、シフト レジスタの内容が (並列方式で) 受信システムに提供されます。UART は、新しいデータが利用可能であることを示すフラグを設定し、ホスト プロセッサが受信したデータを転送するように要求する プロセッサ割り込みを生成することもあります。
通信 UART には、通信信号以外に共有タイミング システムはありません。通常、UART は、スプリアス パルスと見なされないデータ ラインの変化ごとに内部クロックを再同期します。この方法でタイミング情報を取得することで、送信機が本来の速度とわずかに異なる速度で送信している場合でも、確実に受信できます。単純な UART では、この処理は行われません。代わりに、開始ビットの立ち下がりエッジでのみ再同期し、次に各予想されるデータ ビットの中央を読み取ります。このシステムは、ブロードキャスト データ レートが十分に正確で、ストップ ビットを確実にサンプリングできる場合に機能します。[9] [10]
UART の標準機能では、次の文字を受信しながら最新の文字を保存します。この「ダブル バッファリング」により、受信側のコンピュータは、受信した文字を取得するために文字転送時間全体を使用できます。多くの UART には、受信シフト レジスタとホスト システム インターフェイスの間に、小さな先入れ先出し ( FIFO ) バッファ メモリがあります。これにより、ホスト プロセッサは UART からの割り込みを処理する時間がさらに長くなり、高速で受信したデータの損失を防止できます。
送信機
タイミングをラインの状態から判断する必要がなく、固定のタイミング間隔に縛られることもないため、送信操作はよりシンプルです。送信システムがシフト レジスタに文字を配置すると (前の文字の完了後)、UART は開始ビットを生成し、必要な数のデータ ビットをラインにシフトし、パリティ ビット (使用されている場合) を生成して送信し、ストップ ビットを送信します。全二重操作では文字の送受信を同時に行う必要があるため、UART は送信文字と受信文字に 2 つの異なるシフト レジスタを使用します。高性能 UART には送信 FIFO (先入れ先出し) バッファが含まれている場合があり、CPUまたは DMA コントローラはシフト レジスタに 1 文字ずつ配置するのではなく、複数の文字を一気に FIFO に配置することができます。1 文字または複数の文字の送信には CPU の速度に比べて長い時間がかかることがあるため、UART はビジー状態を示すフラグを保持し、ホスト システムが送信バッファまたはシフト レジスタに少なくとも 1 文字あるかどうかを認識できるようにします。 「次の文字の準備完了」は割り込みによって通知される場合もあります。
応用
送信 UART と受信 UART は、正常に動作するために、同じビット速度、文字長、パリティ、およびストップ ビットに設定する必要があります。受信 UART は、不一致な設定を検出し、ホスト システムに「フレーミング エラー」フラグ ビットを設定することがあります。例外的なケースでは、受信 UART は不規則な破損した文字のストリームを生成し、それをホスト システムに転送します。
モデムに接続されたパーソナル コンピュータで使用される一般的なシリアル ポートでは、8 つのデータ ビット、パリティなし、および 1 つのストップ ビットが使用されます。この構成では、1 秒あたりの ASCII 文字数はビット レートを 10 で割った数に等しくなります。
物理的な UART を持たない非常に低価格の家庭用コンピュータや組み込みシステムの中には、入力ポートの状態をサンプリングするか、データ送信用に出力ポートを直接操作することで、ソフトウェアでプロトコルをエミュレートするものもあります。CPU の負荷が非常に高くなりますが (CPU のタイミングが重要であるため)、UART チップを省略できるため、コストとスペースを節約できます。この手法はビットバンギングと呼ばれます。
モデル
デュアル UART ( DUART)は、2 つの UART を 1 つのチップに統合します。同様に、クアッド UART ( QUART) は、NXP 28L194 のように 4 つの UART を 1 つのパッケージに統合します。オクタル UART ( OCTART) は、Exar XR16L788 や NXP SCC2698 のように 8 つの UART を 1 つのパッケージに統合します。
用途
マザーボードのスロットに差し込むパーソナル コンピュータ用のモデムには、カード上に UART 機能も搭載されている必要があります。IBM パーソナル コンピュータに同梱されていたオリジナルの 8250 UART チップには、受信側と送信側それぞれに 1 文字のバッファがありました。そのため、特にマルチタスク システムで動作している場合やディスク コントローラからの割り込みを処理している場合、9600 ビット/秒を超える速度では通信ソフトウェアのパフォーマンスが低下しました。高速モデムは、オリジナルのチップと互換性がある UART を使用しましたが、これには追加の FIFO バッファが含まれていたため、ソフトウェアが受信データに応答する時間が長くなりました。
高ビットレートでのパフォーマンス要件を見ると、16、32、64、または 128 バイトの FIFO がなぜ必要かがわかります。DOS システムの Microsoft 仕様では、割り込みが一度に 1 ミリ秒以上無効になってはならないことが規定されています。[要出典] [疑わしい-議論]一部のハード ディスク ドライブとビデオ コントローラはこの仕様に違反しています。9600 ビット/秒では約 1 ミリ秒ごとに文字が送信されるため、最大割り込み無効タイミングを満たす DOS システムでは、このレートであれば 1 バイトの FIFO で十分です。これ以上のレートでは、古い文字がフェッチされる前に新しい文字が受信される場合があり、古い文字が失われます。これはオーバーラン エラーと呼ばれ、1 つ以上の文字が失われます。
16 バイトの FIFO では、コンピュータが割り込みを処理する前に最大 16 文字を受信できます。これにより、割り込みデッド タイムが 1 ミリ秒の場合、コンピュータが確実に処理できる最大ビット レートが 9600 ビット/秒から 153,000 ビット/秒に増加します。32 バイトの FIFO では、最大レートが 300,000 ビット/秒以上に増加します。FIFO を使用することの 2 つ目の利点は、コンピュータが処理しなければならない割り込みが 8 ~ 12% 程度に抑えられるため、画面の更新やその他の作業に CPU 時間をより多く割けることです。したがって、コンピュータの応答も向上します。
エミュレーション
UARTの通信プロトコルは単純なので、最新のマイクロコントローラ(Arduino [18]やTeensy [19]など)やプログラム可能なI/Oステートマシン(Raspberry Pi PicoのPIO [20] [21]やNXPのFlexIO [22]など) 上のソフトウェアでGPIOピンをビットバンギングすることでエミュレートできます。
参照
参考文献
- ^ 「RS-232 vs. TTL シリアル通信 - SparkFun Electronics」。www.sparkfun.com。
- ^ ab C. Gordon Bell、J. Craig Mudge、John E. McNamara、「コンピュータエンジニアリング:ハードウェアシステム設計のDECの視点」、Digital Press、2014年5月12日、ISBN 1483221105、p. 73
- ^ アリソン、デイビッド。「スミソニアン協会国立アメリカ歴史博物館情報技術・社会部門キュレーター」。スミソニアン協会口述・映像歴史。 2015年6月14日閲覧。
- ^ ゴードン・ベルの口述歴史、2005年、2015年8月19日アクセス
- ^ テクニカルリファレンス 6025008 (PDF) . パーソナルコンピュータハードウェアリファレンスライブラリ. IBM. 1981 年 8 月. pp. 2–123.
- ^ 「FTDI製品」www.ftdichip.com . 2018年3月22日閲覧。
- ^ アダム・オズボーン著『マイクロコンピュータ入門 第1巻:基本概念』オズボーン・マグロウヒル バークレー カリフォルニア 米国、1980年ISBN 0-931988-34-9 pp. 116–126
- ^ Texas Instrument (2021-03-01). 「ユニバーサル非同期レシーバー/トランスミッター (UART)」(PDF) . ti.com . p. 6、「2.3.1 UART による電圧変換」 . 2023 年8 月 25 日閲覧。
- ^ 「UART 通信のクロック精度要件の決定」(PDF) . an2141 . Maxim Integrated . 2003-08-07 . 2021 年11 月 1 日に閲覧。
- ^ ab 「ユニバーサル非同期受信機/送信機 (UART)」(PDF) . SCC2691 . Philips NXP . 2006-08-04. p. 14 . 2021年11月1日閲覧。
- ^ PDP-11/05 とのインターフェイス: UART、blinkenbone.com、2015 年 8 月 19 日アクセス
- ^ 「Zilog 製品仕様 Z8440/1/2/4、Z84C40/1/2/3/4。シリアル入出力コントローラ」(PDF)。090529 zilog.com
- ^ 「Zilog Document Download」(PDF)www.zilog.com。2018年3月22日閲覧。
- ^ T'so, Theodore Y. (1999 年 1 月 23 日)。「Re: 16650 とのシリアル通信」。メール アーカイブ。2013年6 月 2 日閲覧。
- ^ 「FAQ: 16550A UART & TurboCom ドライバー 1994」 。2016年1 月 16 日閲覧。
- ^ Zilog. 「SCC/ESCC ユーザーマニュアル UM010901-0601」(PDF) . leocom.kr . 2023年5月13日閲覧。
- ^ bill.herrin.us - Hayes ESP 8 ポート拡張シリアルポートマニュアル、2004-03-02
- ^ 「SoftwareSerial ライブラリ | Arduino ドキュメント」。Arduino。2022年10 月 5 日。2023 年 6 月 1 日時点のオリジナルよりアーカイブ。2023年 6 月 10 日閲覧。
- ^ Stoffregen, Paul. 「追加のシリアルポート用のAltSoftSerialライブラリ」www.pjrc.com。 2023年3月22日時点のオリジナルよりアーカイブ。 2023年6月10日閲覧。
- ^ 「Raspberry Pi Pico シリアル通信例(MicroPython)」。Electrocredible 2023-01-24。2023-06-03 にオリジナルよりアーカイブ。2023-06-10に閲覧。
- ^ McKinney, Josh (2022-11-05). 「Rasberry Pi Picoを使用したMIDI用のProgrammable IO (PIO)」. joshka.net . 2023-04-04時点のオリジナルよりアーカイブ。2023-06-10取得。
- ^ Krenek, Pavel (2015). 「FlexIO を使用した UART のエミュレーション」(PDF) . NXP . 2022-10-05 にオリジナルからアーカイブ(PDF) . 2023-06-10に取得。
さらに読む
- シリアルポート完全版: COM ポート、USB 仮想 COM ポート、および組み込みシステム用ポート、第 2 版、Jan Axelson、Lakeview Research、380 ページ、2007 年、ISBN 978-1-931-44806-2。
- シリアルポート完全版:RS-232 および RS-485 リンクとネットワークのプログラミングと回路、第 1 版、Jan Axelson、Lakeview Research、306 ページ、1998 年、ISBN 978-0-965-08192-4。
- シリアルポートとマイクロコントローラ:原理、回路、ソースコード;第 1 版;Grzegorz Niemirowski;CreateSpace;414 ページ;2013 年;ISBN 978-1-481-90897-9。
- シリアルプログラミング (Wikibook)。
外部リンク
- FreeBSD シリアルおよび UART チュートリアルには、標準信号の定義、UART IC の歴史、および一般的に使用される DB25 コネクタのピン配置が含まれています。
- ロボット工学のための UART チュートリアルには、多くの実用的な例が含まれています。
