シリアル通信プロトコルを始める前に、用語を3つの部分に分けてみましょう。通信は、非常によく二つ以上の媒体との間の情報の交換を伴う用語を知られています。組み込みシステムでは、通信とは、2つのマイクロコントローラー間でビット形式でデータを交換することを意味します。マイクロコントローラでのこのデータビットの交換は、通信プロトコルと呼ばれる定義済みのルールのセットによって行われます。これで、データが連続して、つまり次々に送信される場合、通信プロトコルはシリアル通信プロトコルと呼ばれます。より具体的には、データビットは、シリアル通信のデータバスまたは通信チャネルを介して一度に1つずつ順次に送信される。
通信プロトコルの種類
シリアル通信やパラレル通信など、デジタル電子機器で利用できるデータ転送にはさまざまな種類があります。同様に、プロトコルは、シリアル通信プロトコルとパラレル通信プロトコルなどの2つのタイプに分けられます。パラレル通信プロトコルの例は、ISA、ATA、SCSI、PCI、およびIEEE-488です。同様に、CAN、ETHERNET、I2C、SPI、RS232、USB、1-Wire、SATAなどのシリアル通信プロトコルの例がいくつかあります。
この記事では、さまざまなタイプのシリアル通信プロトコルについて説明します。シリアル通信は、データ処理周辺機器間で情報を転送するために最も広く使用されているアプローチです。パーソナルコンピュータ(PC)であろうとモバイルであろうと、すべての電子機器はシリアル通信で動作します。プロトコルは、パラレル通信と同様に、送信元ホスト(送信者)と宛先ホスト(受信者)によってアドレス指定される一連のルールを持つ、安全で信頼性の高い通信形式です。
シリアル通信の伝送モード
すでに上で述べたように、シリアル通信ではデータはビット、つまりバイナリパルスの形式で送信され、バイナリ1は論理HIGHを表し、ゼロは論理LOWを表すことはよく知られています。シリアル通信には、伝送モードやデータ転送の種類によっていくつかの種類があります。伝送モードは、シンプレックス、半二重、全二重に分類されます。
シンプレックス法:
シンプレックス法では、メディア、つまり送信者または受信者のいずれかを一度にアクティブにすることができます。したがって、送信者がデータを送信している場合、受信者は受け入れることしかできず、その逆も同様です。したがって、シンプレックス法は一方向の通信技術です。シンプレックス法のよく知られた例は、テレビとラジオです。
半二重方式:
半二重方式では、送信側と受信側の両方をアクティブにすることができますが、同時にアクティブにすることはできません。したがって、送信者が送信している場合、受信者は受け入れることはできますが送信することはできません。同様にその逆も同様です。半二重のよく知られた例は、ユーザーがデータの要求を送信し、サーバーからデータを取得するインターネットです。
全二重方式:
全二重方式では、受信機と送信機の両方が同時にデータを相互に送信できます。よく知られている例は携帯電話です。
これとは別に、適切なデータ転送のために、時計は重要な役割を果たし、主要なソースの1つです。クロックの誤動作により、予期しないデータ送信が発生し、場合によってはデータが失われることもあります。したがって、シリアル通信を使用する場合、クロック同期は非常に重要になります。
クロック同期
シリアルデバイスではクロックが異なり、2つのタイプに分類されます。同期シリアルインターフェースと非同期シリアルインターフェース。
同期シリアルインターフェース:
これは、マスターからスレーブへのポイントツーポイント接続です。このタイプのインターフェースでは、すべてのデバイスが単一のCPUバスを使用してデータとクロックを共有します。クロックとデータを共有する同じバスでデータ転送が速くなります。また、このインターフェイスではボーレートに不一致はありません。トランスミッタ側では、スタート、ストップ、パリティビットがデータに追加されていないため、データがシリアルラインにシフトされ、クロックが個別の信号として提供されます。受信機側では、送信機が提供するクロックを使用してデータが抽出され、シリアルデータがパラレル形式に変換されます。よく知られている例はI2CとSPIです。
非同期シリアルインターフェース:
非同期シリアルインターフェイスでは、外部クロック信号はありません。非同期シリアルインターフェースは、主に遠距離恋愛で見られ、安定した通信に最適です。非同期シリアルインターフェイスでは、外部クロックソースがないため、データフロー制御、エラー制御、ボーレート制御、送信制御、受信制御などのいくつかのパラメータに依存します。上の送信側、独自のクロックを使用してシリアルラインにパラレルデータのシフトがあります。また、開始、停止、およびパリティチェックビットを追加します。受信側では、受信機は独自のクロックを使用してデータを抽出し、開始、停止、およびパリティビットを取り除いた後、シリアルデータをパラレル形式に変換し直します。よく知られている例は、RS-232、RS-422、RS-485です。
シリアル通信に関連するその他の用語
クロック同期とは別に、ボーレート、データビット選択(フレーミング)、同期、エラーチェックなど、データをシリアルに転送するときに覚えておくべきことがいくつかあります。これらの用語について簡単に説明しましょう。
ボーレート:ボーレートは、データが送信機と受信機の間でビット/秒(bps)の形式で転送される速度です。最も一般的に使用されるボーレートは9600です。ただし、1200、2400、4800、57600、115200など、他のボーレートの選択肢もあります。ボーレートが大きくなるほど、データは一度に転送されます。また、データ通信の場合、ボーレートは送信機と受信機の両方で同じである必要があります。
フレーミング:フレーミングとは、送信機から受信機に送信されるデータビットの数を指します。アプリケーションの場合、データビット数が異なります。ほとんどのアプリケーションは標準データビットとして8ビットを使用しますが、5、6、または7ビットとして選択することもできます。
同期:同期ビットは、データのチャンクを選択するために重要です。データビットの開始と終了を通知します。送信機は開始ビットと停止ビットをデータフレームに設定し、受信機はそれに応じてそれを識別し、さらに処理を行います。
エラー制御:エラー制御は、シリアル通信に影響を与え、ノイズを追加する多くの要因があるため、シリアル通信中に重要な役割を果たします。このエラーを取り除くために、パリティビットが使用され、パリティは偶数パリティと奇数パリティをチェックします。したがって、データフレームに偶数の1が含まれている場合、それは偶数パリティと呼ばれ、レジスタのパリティビットは1に設定されます。同様に、データフレームに奇数の1が含まれている場合、奇数パリティと呼ばれ、レジスタの奇数パリティビット。
プロトコルは、システムがデータを理解するために使用する一般的な言語と同じです。上記のように、シリアル通信プロトコルは、同期と非同期のタイプに分けられます。次に、両方について詳しく説明します。
同期シリアルプロトコル
SPI、I2C、CAN、LINなどの同期タイプのシリアルプロトコルは、オンボード周辺機器に最適なリソースの1つであるため、さまざまなプロジェクトで使用されています。また、これらは主要なアプリケーションで広く使用されているプロトコルです。
SPIプロトコル
シリアルペリフェラルインターフェイス(SPI)は、複数のSPIマイクロコントローラーを相互接続できる同期インターフェイスです。SPIでは、データとクロックラインに別々のワイヤが必要です。また、クロックはデータストリームに含まれていないため、個別の信号として提供する必要があります。SPIは、マスターまたはスレーブとして構成できます。4つの基本的なSPI信号(MISO、MOSI、SCK、SS)、Vcc、Groundはデータ通信の一部です。したがって、スレーブまたはマスターとの間でデータを送受信するには、6本のワイヤーが必要です。理論的には、SPIは無制限の数のスレーブを持つことができます。データ通信はSPIレジスタで構成されます。SPIは最大10Mbpsの速度を提供でき、高速データ通信に最適です。
ほとんどのマイクロコントローラーにはSPIのサポートが組み込まれており、SPIでサポートされているデバイスに直接接続できます。
- PICマイクロコントローラPIC16F877AとのSPI通信
- STM32マイクロコントローラーでSPI通信を使用する方法
- ArduinoでSPIを使用する方法:2つのArduinoボード間の通信
I2Cシリアル通信
2つのラインがSDA(シリアルデータライン)とSCL(シリアルクロックライン)である、異なるICまたはモジュール間の集積回路間(I2C)2ライン通信。両方のラインは、プルアップ抵抗を使用して正の電源に接続する必要があります。I2Cは最大400Kbpsの速度を提供でき、10ビットまたは7ビットのアドレス指定システムを使用してi2cバス上の特定のデバイスをターゲットにするため、最大1024のデバイスを接続できます。通信の長さが制限されており、機内通信に最適です。I2Cネットワークは、2本のワイヤのみを使用し、新しいデバイスを2つの共通I2Cバスラインに簡単に接続できるため、セットアップが簡単です。SPIと同様に、マイクロコントローラーには通常、任意のI2Cデバイスを接続するためのI2Cピンがあります。
- STM32マイクロコントローラーでI2C通信を使用する方法
- PICマイクロコントローラPIC16F877とのI2C通信
- ArduinoでI2Cを使用する方法:2つのArduinoボード間の通信
USB
USB(Universal Serial Bus)は、さまざまなバージョンと速度のプロトコルです。1つのUSBホストコントローラーに最大127の周辺機器を接続できます。USBは「プラグアンドプレイ」デバイスとして機能します。USBは、キーボード、プリンター、メディアデバイス、カメラ、スキャナー、マウスなど、ほとんどのデバイスで使用されています。これは、簡単なインストール、より高速なデータ定格、より少ないケーブル配線、およびホットスワップのために設計されています。かさばる低速のシリアルポートとパラレルポートに取って代わりました。USBは差動信号を使用して干渉を減らし、長距離での高速伝送を可能にします。
差動バスは2本のワイヤで構成されています。1本は送信データを表し、もう1本はその補数を表します。ワイヤーの「平均」電圧は情報を伝達しないため、干渉が少なくなるという考え方です。USBでは、デバイスはホストに問い合わせることなく、一定量の電力を引き出すことができます。USBは、データ転送に2本のワイヤのみを使用し、シリアルおよびパラレルインターフェイスよりも高速です。USBバージョンは、1.5Mbps(USB v1.0)、480 Mbps(USB2.0)、5Gbps(USB v3.0)などのさまざまな速度をサポートします。個々のUSBケーブルの長さは、ハブなしで最大5メートル、ハブありで最大40メートルに達する可能性があります。
できる
コントローラエリアネットワーク(CAN)は、ECU(エンジンコントロールユニット)とセンサー間の通信を可能にするために、自動車などで使用されます。CANプロトコルは堅牢で、低コストで、メッセージベースであり、自動車、トラック、トラクター、産業用ロボットなど、多くのアプリケーションをカバーしています。CANバスシステムは、すべてのECUにわたる中央エラー診断と構成を可能にします。CANメッセージはIDを介して優先順位が付けられるため、最も優先度の高いIDが中断されることはありません。各ECUには、送信されたすべてのメッセージを受信し、関連性を判断し、それに応じて動作するためのチップが含まれています。これにより、追加のノード(CANバスデータロガーなど)を簡単に変更および含めることができます。アプリケーションには、車両のスタート/ストップ、衝突回避システムが含まれます。CANバスシステムは最大1Mbpsの速度を提供できます。
マイクロワイヤー
MICROWIREは、基本的にSPIインターフェイスのサブセットである3Mbpsシリアル3線式インターフェイスです。MicrowireはマイクロコントローラーのシリアルI / Oポートであるため、MicrowireバスはEEPROMやその他の周辺機器チップにも搭載されています。3つのラインは、SI(シリアル入力)、SO(シリアル出力)、およびSK(シリアルクロック)です。マイクロコントローラへのシリアル入力(SI)ライン、SOはシリアル出力ライン、SKはシリアルクロックラインです。データはSKの立ち下がりエッジでシフトアウトされ、立ち上がりエッジで評価されます。SIはSKの立ち上がりエッジでシフトインします。MICROWIREに対する追加のバス拡張機能は、MICROWIRE / Plusと呼ばれます。2つのバスの主な違いは、マイクロコントローラー内のMICROWIRE / Plusアーキテクチャがより複雑であるということです。最大3Mbpsの速度をサポートします。
非同期シリアルプロトコル
長距離の信頼性の高いデータ転送に関しては、非同期タイプのシリアルプロトコルが非常に重要です。非同期通信では、両方のデバイスに共通のタイミングクロックは必要ありません。各デバイスは、合意されたレートでデータのビットを表すデジタルパルスを個別にリッスンして送信します。非同期シリアル通信は、トランジスタ-トランジスタロジック(TTL)シリアルと呼ばれることもあり、高電圧レベルはロジック1、低電圧はロジック0に相当します。現在市場に出回っているほとんどすべてのマイクロコントローラには、少なくとも1つのユニバーサル非同期レシーバがあります。シリアル通信用のトランスミッター(UART)。例はRS232、RS422、RS485などです。
RS232
RS232(推奨規格232)は、モニター、CNCなどのさまざまな周辺機器を接続するために使用される非常に一般的なプロトコルです。RS232にはオスとメスのコネクタがあります。RS232は、最大1つのデバイスが接続されたポイントツーポイントトポロジであり、9600bpsで最大15メートルの距離をカバーします。RS-232インターフェースの情報は、論理0および1によってデジタルで送信されます。論理「1」(MARK)は、-3〜-15 Vの範囲の電圧に対応します。論理「0」(SPACE)は、 + 3〜 + 15 Vの範囲の電圧。TxD、RxD、RTS、CTS、DTR、DSR、DCD、GNDなどの9つのピン配列を持つDB9コネクタで提供されます。
RS422
RS422はRS232に似ており、別々の回線でメッセージを同時に送受信できますが、これには差動信号を使用します。RS-422ネットワークでは、1つの送信デバイスと最大10の受信デバイスしか存在できません。RS-422のデータ転送速度は距離によって異なり、10 kbps(1200メートル)から10 Mbps(10メートル)まで変化します。RS-422ラインは、データ伝送用に4本のワイヤ(伝送用に2本のツイストワイヤと受信用に2本のツイストワイヤ)と1本の共通GNDアース線です。データラインの電圧は、-6 V〜 + 6Vの範囲にすることができます。AとBの論理差は+ 0.2Vより大きくなります。論理1は、AとBの差が-0.2V未満に対応します。 RS-422規格では、特定のタイプのコネクタは定義されていません。通常、端子台またはDB9コネクタにすることができます。
RS485
RS485はマルチポイントトポロジを使用するため、業界で最も使用されており、業界で推奨されるプロトコルです。RS422は、差動構成で32のラインドライバーと32のレシーバーを接続できますが、追加のリピーターと最大256デバイスの信号増幅器の助けを借ります。RS-485は特定のタイプのコネクタを定義していませんが、多くの場合、端子台またはDB9コネクタです。動作速度はラインの長さにも依存し、10メートルで10 Mbit / sに達する可能性があります。ラインの電圧は-7Vから+ 12Vの範囲です。RS-485には、2接点の半二重モードRS-485と4接点の全二重モードRS-485の2種類があります。他のマイクロコントローラーでRS485を使用する方法の詳細については、次のリンクを確認してください。
- ArduinoUNOをスレーブとして使用するRS-485MODBUSシリアル通信
- RaspberryPiとArduinoUno間のRS-485シリアル通信
- ArduinoUnoとArduinoNano間のRS485シリアル通信
- RS-485を使用したSTM32F103C8とArduinoUNO間のシリアル通信
結論
シリアル通信は、電子機器や組み込みシステムで広く使用されている通信インターフェースシステムの1つです。データレートは、アプリケーションごとに異なる場合があります。シリアル通信プロトコルは、この種のアプリケーションを扱うときに決定的な役割を果たすことができます。したがって、適切なシリアルプロトコルを選択することが非常に重要になります。