マイコンと周辺ICをつなぐ3大通信(SPI・I2C・UART)の仕組みと使い分け
さまざまな機器の中に組み込まれ制御をつかさどるマイコンの中では、多くの通信が行われています。
通信方式は複数ありますが、速度や信頼性の観点で選ばれる方式が変わります。また設計、構築の難易度も異なるため、利用シーンやコストなど全ての事情を考慮した上で適切な通信方式を選ぶことが必要です。
通信方式は幾つかの性質の組み合わせにより分かれており、パターンを理解してしまえばそれほど複雑な違いではありません。
この記事では特にシリアル通信に注目して、通信方式の違いやそれぞれに適した利用方法について解説します。
機器の中で使われる通信
複雑な制御になると、複数の基板やマイコンをつなぐ前提で設計します。代表的な通信方式には、シリアル通信とパラレル通信の二つがあります。
シリアル通信は比較的単純な方式で、送りたいデータを信号線1本に対して1bitずつ順番に送っていく形です。対して複数の信号線を使って、送りたいデータを複数同時に送信する方式がパラレル通信です。パラレル通信の方が便利なように思えますが、信号線の本数が増えるため、配線の難易度が上がります。また複数のbitを同時に送受信するため、通信の同期を取ることが難しいといった問題もあります。
現在はシリアル通信が高速化して1bitを高速に送れるため、通信速度によるデメリットはほとんどなくなりました。低難易度かつ低コストであるシリアル通信の方が、組み込み業界においては普及しています。代表的なシリアル通信にはSPI、I2C、UARTの三種類があります。
SPIの特徴と用途
SPIは一対多の通信に対応した通信方式です。フラッシュメモリやディスプレイなどとの通信に多く使われています。通信の同期を取るためにクロック専用の信号線を必要としますが、複数のデバイスを同時に制御することができます。
またデータの送信と受信を別々の信号線でやり取りする全二重通信が使われていることも、安定した通信を実現しているSPIの特徴です。
ただ送受信を同時に行う場合、どのタイミングで何のデータを送るのかを決める役割を果たす機能がないと、データの衝突を起こします。通信の開始やクロックの指定を行う、優先権を持ったデバイスをマスター、命令を受けて応答するデバイスをスレーブと呼びます。マスターが出力するクロックに合わせてデータを送受信することによって、通信の同期を取ります。一つのマスターに接続するスレーブが増えると、その分スレーブセレクトの数も増えていく仕組みです。もちろんこれを接続するための配線も必要となり、構造が複雑になります。
I2Cの特徴と用途
I2CもSPIと同様に一対多の通信が可能です。
違いの一つは、複数存在するスレーブを特定する方法です。I2Cでは各スレーブがアドレスを持っているため、マスターはスレーブのアドレスを指定するだけで、データの送り先を決められます。SPIのように同期を取る信号線が必要になると、部品点数が多い場合には配線が複雑化します。しかし、アドレスだけでスレーブを特定できるI2Cは、スレーブが増えても2本の信号線だけで複数の機器を接続可能です。
送受信を1本のケーブルで行う半二重方式を使うため、通信速度はそれほど速くありません。しかし、2本の信号線で通信可能で、配線の本数や使用するポート数が少なくて済みます。そのため、小型化したいセンサやメモリチップではI2Cが採用されていることが多くなっています。
UARTの特徴と用途
UARTは先に述べたSPIやI2Cとは異なり、非同期で通信します。
同期のためのクロック信号を送る必要がないことから配線が少なくて済み、送信と受信による2本の信号線で通信する全二重通信です。接続するデバイス同士で送信と受信のピンを接続する形のため、配線もシンプルにできることが特徴です。ただしデバイスを物理的につなぐので、UARTでは一対一の通信しかできません。
また、非同期通信のためクロックに左右されず、任意のタイミングで通信が可能ですが、そのままではデータの開始位置も長さも分かりません。そこで、スタートビットと呼ばれるデータの開始位置と、1bit時間の長さを決めるボーレートを定めておくことで、どこまでが一つの信号かを判断しています。
通信方法の選び方
シリアル通信において、通信速度を重視するならSPIが最適です。
同期通信が可能な上に、マスターとスレーブの間で整合性が取れていれば自由にデータ長を調整できます。そのため、データ長の長いデータを一度に送ることによって通信時間の短縮が可能です。しかし配線本数が多く複雑な構造になりやすい傾向があるので、接続台数が多いときには実装の難易度が上がります。
接続するデバイスの数が多いときには、I2Cの方が適しています。必要な配線、ポートの数が少なくシンプルな構成を実現できます。I2Cは、電圧の高低により0と1を判定するシングルエンド方式です。この方式はノイズが入ったときに誤認識を起こす可能性があるため、長距離での配線には向いていません。
長距離での通信を行いたい場合には、UARTを変換してRS-232C(インターフェース規格の一つ)でつなぐと便利です。UART自体はマイコン内で使うことを想定されているため、長距離での通信には適しません。そのため、マイコンの外部機器と通信するためにはRS232、RS485などへの変換が必要となります。UARTは通信タイミングもデータの長さも決められる通信であるがゆえに、自由なデータの送受信が可能です。
使用したいセンサやアクチュエータなどの周辺デバイスによって搭載されている通信規格が異なります。マイコンとそれら周辺デバイスそれぞれが対応できる通信規格を調べ、用途に合わせて、最適な通信方法を選択しましょう。

