技術コラム Vol.22

いまさら聞けない通信の話 ~SPI編~

公開日:2024/09/24

前回と前々回の技術コラムでは「CAN」と「I2C」についてそれぞれ解説いたしました。
今回は、基板内のマイコンやデバイス間などのごく短距離を接続する通信方式の一つとして、「I2C」と同じように利用される「SPI」について解説いたします。

I2Cは最大1Mbpsと低速ですが、マルチドロップ接続と2wireの省配線であることが特徴的な通信方式です。また、プロトコルは規格で決まっています。対してSPIは最大速度の上限がなく、100Mbpsを超える高速な通信でも利用されます。I2Cと同様、マスタ/スレーブ方式の通信による並列接続も可能ですが、基本的には1対1で通信します。最近主流になっているSPI FLASHやQSPI FLASHもSPI通信を使用しています。

  1. SPIの概要
  2. SPI通信の波形を見てみよう
  3. まとめ

1. SPIの概要

(1) SPIの概要

SPIとは「Serial Peripheral Interface」の略で、そのまま「エス・ピー・アイ」と呼びます。

SPIは当時のモトローラ社(現在のNXP Semiconductors社)が開発したシリアルバスの通信規格です。省配線で高速同期式通信ができることから、SPI通信に対応しているデバイスは非常に多く、デバイス間通信ではI2Cと並び、標準的なインタフェースの一つとなっています。

SPIの仕組みは、最低でも1本のクロックラインと2本のデータライン(入出力で一本ずつ)の計3本の信号線が必要となります。3本の信号線でも通信は可能ですが、SPIはI2Cと同じく一つのマスタで複数のスレーブと通信できるシングルマスタ・マルチスレーブ方式とすることも可能です。この場合、I2Cではスレーブアドレスを使い分けてソフトウェアで通信相手を指定していましたが、SPIでは通信相手を信号線(SS:スレーブ・セレクト)で指定します。

  • SPIでは「マスタ」「スレーブ」を「コントローラ」「ペリフェラル」と表現する場合もあります。
    本コラムでは広く知られた「マスタ」「スレーブ」として表記しています。

以下はマスタとスレーブの接続図の例です。
クロックライン(SCLK)・2本のデータライン(MISO(マスタ・イン・スレーブ・アウト)・MOSI(マスタ・アウト・スレーブ・
イン))は共通で使用します。

複数のスレーブと接続する際は、通信相手となるスレーブの数だけ個別にスレーブ・セレクト(SS)を接続する必要があります。

(2) SPIの特徴

SPIの特徴を幾つかピックアップして下記にあげます。

① サンプリングタイミングやアイドリング時のSCKを選択できる動作モード

SPIは同期式通信のため、SCKに合わせてMISO/MOSIでデータのサンプリングを行います。このとき、サンプリングタイミングをSCKの立ち上がりエッジ・立ち下がりエッジのどちらにするのかをデバイスメーカーは自由に決めることができます。
また、通信開始前後のアイドリング時のSCKをHigh/Lowいずれかにするのかも自由に選択できます。

結果、サンプリングタイミング(極性:Clock polarity(CPOL))・アイドリング時のSCK(位相:Clock phase(CPHA))の選択によって動作モードが4つ存在します。

通信を行う際は、マスタとスレーブで動作モードを合わせて通信します。

SPI動作モード
SPIモード CPOL CPHA アイドル時のクロック サンプリングタイミング
0 0 0 Low 立ち上がりエッジ
1 0 1 Low 立ち下がりエッジ
2 1 0 High 立ち上がりエッジ
3 1 1 High 立ち下がりエッジ
② 通信ビット数や通信速度に制限がない

SPIにはI2CやCANなどのように通信データにフォーマットはなく、標準のプロトコルも存在しません。さらに言えば、通信も必ずしも1パケット=8bit単位である必要もありません。12bitや16bit単位での通信が可能なため、例えば12bitでサンプリングするADコンバータICのような製品の場合、I2Cでは2Byte分の通信が必要となりますが、SPIではマスター側とスレーブ側の整合を取れば、自由にデータ長を決められるため、12bitデータをそのまま受け渡すことも可能です。その他、バースト通信や速度に関しても仕様の規定がなく、双方のデバイスが扱える範囲内ならば自由に決められます。
弊社製品「AP-RA8D-0A」に搭載されているRA8D1マイコンの場合は、60MbpsのSPI通信が可能です。

ここまでSPI通信は自由度が高く、様々なユースケースに対応できる通信として紹介してきました。その反面、標準プロトコルの規定がないため、SPIのデバイスを使用する場合などは、データシートをよく読んでプロトコルを把握する必要があります。

2. SPI通信の波形を見てみよう

SPI通信はSPIモードに従ってSCKと同期して通信するだけのシンプルな構成ですが、SPI通信の実際の波形についても紹介します。

(1) SPI通信のサンプルプロジェクトについて

今回は、RA8D搭載マイコンボード「AP-RA8D-0A」でSPI通信を動作させてみます。
「AP-RA8D-0A」のPmod™コネクタにSPI Pmodモジュール「Pmod OLEDrgb」を接続します。サンプルプログラムを実行して、
実際にマイコンがPmodデバイスに対して行っている通信の内容をモニタリングしてみます。

  • Pmodとは、Digilent社が策定したマイコンボードなどに機能拡張ボードを接続するためのインタフェース規格です。
    SPIのほか、I2C、UART、GPIOなどにも対応しています。

(2) SPI通信

サンプルプログラムを実行するとCPUボードからPmodデバイスに対し、表示画面を指示するためのデータ送信が自動で行われます。
なお、サンプルプログラムはPmod 1つとのみ通信し、かつ、「Pmod OLEDrgb」はデータ送信を行わないため、観察する信号は「SCK」「MOSI」の2線となります。

実際の通信波形図(黄色:SCK、緑色:MOSI)

前述の通り、SPI通信にはI2C通信における「スタートコンディション」や「スレーブアドレス」のようなフォーマットは特になく、SCKと同期する形でMOSIからデータを送信しています。

なお、この波形は「Pmod OLEDrgb」側に合わせて、動作モード0で通信速度が約6MHzまでの通信となっており、「0xA8, 0x3F」の2Byteを送信するタイミングの図です。

3. まとめ

今回は、製品内部のデバイス間で使われる通信技術の「SPI」の概要を、信号波形などを交えてご紹介しました。

前々回より、「CAN」「I2C」「SPI」と主に機器内で利用される通信について解説してきましたが、通信ごとに特徴があり、用途に応じて使い分けられていることもお分かりいただけたと思います。
最近では、SPIの派生である「QSPI」や「OSPI」、さらに高速な「PCIe」なども組み込みシステムで利用されるようになっています。機会がありましたら、また解説したいと思います。

本コラムで紹介したプログラムは、弊社のCPUボードのサンプルプログラムとして提供しておりますので、「SPI」の履修や評価用途などでもご利用ください。

製品のご案内

本コラム以外にも開発にお役立ていただける技術情報をアプリケーションノートとして公開しております。
ご興味のある方は、ぜひ製品をご利用ください。

  • ※Arm, TrustZone, HeliumおよびCortexは、米国および/またはその他の地域におけるArm Limited(またはその子会社)の登録商標です。
  • ※記載されている会社名、製品名は、各社の商標または登録商標です。
  • ※記載の内容は改良のため、予告なく変更する場合がございます。