マイクロコントローラ(MCU)とは?マイコンのUART、SPI、I2C通信について

マイクロコントローラ(MCU)の2つのインタフェース

パラレルインタフェースとシリアルインタフェースの概要と回路例

マイコンが他のデバイスとデータをやり取りする方法には、大きく分けて2つの種類があります。

  • パラレルインタフェース

  • シリアルインタフェース

パラレルインタフェースは、例えば、8ビット長のデータを1クロックで送受信する方法です。理論的に転送速度は高速ですが、データビット長分の配線を必要とし、機器の小型化を妨げる要因になります。それに対して少ない信号線で送受信を行う方法がシリアルインタフェースです。例えば、8ビット長のデータであれば1本の信号線を用い、時間を区切って1ビットずつ合計8回送受信します。


■パラレルインタフェース(バスインタフェース)回路例

図1.1 8ビットSRAMとのインタフェース回路例

図1.1 8ビットSRAMとのインタフェース回路例


■シリアルインタフェース回路例

図1.2 UART通信における接続例

図1.2 UART通信における接続例


かつてパラレルインタフェースは高速、シリアルインタフェースは低速とされてきました。しかし、デバイスの進化と差動信号*1によりノイズ耐性を高め、メガHz・ギガHzといった高速シリアルインタフェースも一般的になってきました。パラレルインタフェースを高速化しようとした場合、複数の信号線を同期させることが難しいといったこともあり、現在ではパラレルインタフェースに比べ、シリアルインタフェースのほうが高速な送受信を実現しています。


*1:差動信号
正と負の2本の信号線を用い、その差分をデータとして扱うことにより、外部ノイズの影響を受けにくく高速で高品質な通信が可能な方式。高速なシリアル通信で取り入れられている。


本文では、差動信号を用いず、汎用的なマイコンに搭載されているシリアルインタフェースについて解説します。


マイクロコントローラ(MCU)のシリアルインタフェースの種類と特徴

汎用的なマイコンに搭載されているUART、SPI、I2Cの3種類のシリアルインタフェースについて、概要を説明します。

UART通信(Universal Asynchronous Receiver/Transmitter)

本方式は古くよりパソコンと周辺機器とのインタフェースに用いられています。通信速度は低速ですが、GNDレベルを共通にする以外は、送信信号線と受信信号線各1本の配線で済みますので、高速転送を必要としない多くのケースで採用されています。
通信方式としは、送信側、受信側それぞれでタイマを持ち、予め決められたタイミングでデータを受信、あるいは送信を行います。


【 送信 】
初期信号は、必ずHレベルであり、また、送信の開始時は、必ずLレベルへの立下りからスタートします。その後、あらかじめ決められたタイミング毎に送信したいデータを1ビットずつ送信します。送信するデータを最上位ビットから送るのか、最下位ビットから送るのかは、予め通信機器間で取り決めておく必要があります。また、送信終了後は、必ずHレベルにする必要があります。
なお、送信データ末尾には、受信側が受け取ったデータが正しいかどうか、チェックするためのパリティビットを付加することもできます。


図2.1 UART送信フォーマット例

図2.1 UART送信フォーマット例


【 受信 】
初期信号レベルは、必ずHレベルであるため、受信側は信号が立ち下がるタイミングを待ち続けます。信号立下りをトリガとして、受信タイマを起動し、予め取り決められたタイミング、ビット長でデータの取り込みを行います。データをすべて受信したら、信号線はHレベルになりますので、このHレベルを確認して、送受信が完了したことになります。但し、何らかの理由で最後の信号レベルがHレベルでなかった場合は、フレーミングエラーとなり、例えば、データの再送信を要求するなどのエラー処理が必要です。

図2.2 UART受信サンプリングタイミング

図2.2 UART受信サンプリングタイミング例


SPI通信 (Serial Peripheral Interface)

UARTでは、送受信機器双方がタイマを用いて時間を計測し、通信タイミングを合わせていました。これに対して、SPIでは送受信双方が専用クロック信号に同期してデータの送受信を行うものです。チップセレクト信号も用いることが可能であり、本信号線を使用することにより、1対複数台の機器と送受信を行うこともできます。UARTに比べて不利な点は、通信を行うために必要な信号線が、多くなってしまうことです。


図2.3 MCUをマスタとし外部機器3台を接続した場合の回路例

図2.3 MCUをマスタとし外部機器3台を接続した場合の回路例

【送信(マスタ→スレーブ)】
マスタ側から同期クロックを出力するとともに、本同期クロックに合わせてデータを出力します。


図2.4 SPI送信フォーマット

図2.4 SPI送信フォーマット例

【受信 (マスタ→スレーブ)】
スレーブ側から送信されたデータを本同期クロックの立ち上がりエッヂで受け取ります。


図2.5 SPI送信フォーマット

図2.5 SPI受信フォーマット例

なお、データの送信順序(最上位ビット、最下位ビットどちらを先に送るか)、使用するクロックの極性、データの送信/取り込みエッヂなどは、予め決めて設定しておく必要があります。


I2C通信(Inter-Integrated Circuit)

I2CもSPIのように1対複数台の接続が可能です。SPIとの大きな相違は、個々のスレーブがアドレスを持っており、マスタは通信したいスレーブのアドレスを送信することにより、アドレスが一致したスレーブのみと通信することが可能になります。 また、信号線、クロック線ともNチャンネルオープンドレイン*2方式で出力することになっており、出力はLレベルのみ、その他の期間においては、外部のプルアップ抵抗によりHレベルに引き上げられます。


図2.6 I2C通信回路例

図2.6 I2C通信回路例


 

*2:Nチャンネルオープンドレイン
Hレベル、Lレベル双方を出力するコンプリメンタリ出力に対して、Lレベルのみを出力する方式をNチャンネルオープンドレイン、Hレベルのみ出力する方式をPチャンネルオープンドレインと称す。オープンドレイン方式の場合は、NチャンネルならH側の出力がなく、プルアップ抵抗抵抗を付加して信号線をHレベルにし、ハイインピーダンス(HでもLでもない状態)を防ぐ。

図2.7 (a)コンプリメンタリ出力回路
図2.7 (a)コンプリメンタリ出力回路

図2.7(b) Nチャンネルオープンドレイン出力回路
図2.7(b) Nチャンネルオープンドレイン出力回路


【 送信 (マスタ→スレーブ) 】
マスタは、最初にスレーブアドレスを送信し、スレーブからのアクノリッジ信号を受け取ります。以降、マスタは送信データをスレーブに対して送信するとともに、データごとのアクノリッジ信号を受け取ります。


図2.8 I2C通信におけるマスタからスレーブへの転送フォーマット

図2.8 I2C通信におけるマスタからスレーブへの転送フォーマット


【 受信 (マスタ←スレーブ) 】
マスタは、最初にスレーブアドレスを送信し、スレーブからはアクノリッジ信号を受け取ります。以降、マスタはスレーブから出力されるデータを受信し、各データを受信する毎にアクノリッジ信号を出力します。


図2.9 I2C通信におけるスレーブからマスタへの転送フォーマット

図2.9 I2C通信におけるスレーブからマスタへの転送フォーマット


なお、クロック(SCL)、スタートコンディション、ストップコンディションは、以下の通りです。SCLがHの区間に、SDAが立ち下がればスタートとなり、SCLがHの区間にSDAが立ち上がればストップとなります。


図2.9 I2C通信におけるスレーブからマスタへの転送フォーマット

図2.10 I2C通信におけるスタートコンディションとストップコンディション