SPIの基本を学ぶ
著者: Piyu Dhaker
Share on

SPI（Serial Peripheral Interface）は、マイクロコントローラとその周辺ICの間でよく使用されるインターフェースの1つです。つまり、センサー、A/Dコンバータ、D/Aコンバータ、シフト・レジスタ、SRAMなどとマイクロコントローラの接続に広く採用されているということです。本稿では、まずSPIの基本について簡単に説明します。次に、アナログ・デバイセズが提供するSPI対応のスイッチ／マルチプレクサ製品を紹介します。更に、それらのICを利用することで、システムの基板設計において、必要なGPIO（General Purpose Input/Output）の本数を大幅に削減できることを示します。
SPIは、同期式／全二重のマスタ‐スレーブ型インターフェースです。マスタ（SPIマスタ）またはスレーブ（SPIスレーブ）からのデータは、クロックの立上がりまたは立下がりエッジによって同期がとられます。また、マスタとスレーブは、同時にデータを送信することが可能です。SPIには、3線式のものと4線式のものがあります。
本稿では、より一般的な4線式のSPIを取り上げます。

SPIの概要
SPI
マスタ

CS

CS

SCLK

SCLKMOSI

SDI

MISO

SDO

SPI
スレーブ

図 1 . S P I に お けるマスタとスレ ーブの 関 係

4線式のSPIデバイスには、次の4つの信号があります。
クロック（SPI CLK、SCLK）
XX チ ッ プ ・ セ レ ク ト （ C S ）XX マ ス タ 出 力 ／ ス レ ー ブ 入 力 （ M O S I ）XX マ ス タ 入 力 ／ ス レ ー ブ 出 力 （ M I S O ）XX

2種類のデバイスのうち、クロック信号を生成する方がマスタと呼ばれます。マスタとスレーブの間で送信されるデータは、マスタによって生成されるクロックと同期しています。SPIデバイスは、I 2 Cインターフェースよりもはるかに高いクロック周波数に対応します。SPIに対応する製品を使用する場合には、必ずデータシートを参照し、SPIのクロック周波数に関する仕様を確認してください。
SPIでは、1つのマスタに対し、複数のスレーブを接続することができます。図1に、SPIマスタとSPIスレーブの間の接続を示しました。

Analog Dialogue 52-09

マスタからのCS信号は、スレーブの選択に使用されます。通常、この信号はアクティブ・ローで、SPIバスからスレーブを切り離したい（送受信の対象から外したい）ときにハイにします。複数のスレーブを扱いたい場
合、最も基本的な使い方では、マスタから各スレーブに対して個別のCS信号を送信する必要があります。本稿では、CS信号はすべてアクティブ・ローであるという前提の下に話を進めていきます。
MOSIとMISOは、データを送受信するための信号線です。MOSIは、マスタからスレーブに対するデータの送信に使用されます。一方、MISOは、スレーブからマスタにデータを送信するために使われます。

データの送信SPIによる通信を開始するには、マスタからクロック信号を送信すると共に、CS信号をイネーブルにすることによって、スレーブを選択する必要があります。CS信号がアクティブ・ローである場合、マスタはロジック・レベルのローを送信することで、スレーブを選択します。SPIは全二重インターフェースなので、マスタとスレーブはそれぞれMOSIとMISOによって、同時にデータを送信できます。つまり、MOSI/SDOバスに対してシリアルにデータをシフトさせて出力する送信動作と、MISO/SDIバスのデータをサンプリング（読み出し）する受信動作を同時に行うことが可能です。その際には、シリアル・クロックのエッジによって、データのシフト／サンプリング処理の同期がとられます。SPIでは、クロックの立上がりエッジと立下がりエッジのうちどちらでデータをサンプリング／シフトするかを、ユーザが自由に選択できます。SPIを介して送信されるデータのビット数については、各デバイスのデータシートを参照してください。
クロックの極性と位相
SPIマ ス タ は 、 ク ロ ッ ク の 極 性 と 位 相 を 選 択 で き ます。CPOLビットは、アイドル状態におけるクロック信号の極性を設定するためのものです。アイドル状態というのは、送信を開始するためにCSがハイからローに遷移するまでの間と、送信を終了するためにCSがローからハイに遷移するまでの間のことです。CPHAビットは、クロックの位相を選択するためのものです。CPHAビットにより、データのサンプリング／シフトにクロックの立上がりエッジと立下がりエッジのうち、どちらを使用するのかを設定します。マスタでは、スレーブの要件に適合するように、クロックの極性と位相を選択する必要があります。表1に示すように、CPOLビットとCPHAビットの組み合わせ方によって、4つのSPIモードが存在することになります。

1表1. 4つのSPIモード。CPOLビットとCPHAビットの組み合わせによってモードが決まります。

するには、製品のデータシートを参照して、タイミング仕様が満たされていることを確認する必要があります。
図3は、SPIモード1のタイミング図です。このモードでは、クロックの極性を0に設定しているので、アイドル状態におけるクロック信号はローになります。一方、クロックの位相については1に設定しているので、データは、クロック信号の立下がりエッジ（橙色の点線）でサンプリングされ、立上がりエッジ（青色の点線）でシフトされます。

CPOL

CPHA

アイドル状態のクロックの極性

データのサンプリング／シフトに使われるクロックの位相

000

ロジッ
ク・ロー

データを立上がりエッジでサンプリング、立下がりエッジでシフト

1

01

ロジッ
ク・ロー

データを立下がりエッジでサンプリング、立上がりエッジでシフト

2

11

ロジッ
ク・ハイ

データを立下がりエッジでサンプリング、立上がりエッジでシフト

3

10

ロジッ
ク・ハイ

データを立上がりエッジでサンプリング、立下がりエッジでシフトSPI
モード

図4は、SPIモード2のタイミング図です。このモードでは、クロックの極性を1に設定しています。そのため、アイドル状態におけるクロック信号はハイになります。
クロックの位相については1に設定しているので、データは、クロック信号の立下がりエッジ（橙色の点線）でサンプリングされ、立上がりエッジ（青色の点線）でシフトされます。
図5は、SPIモード3のタイミング図です。このモードでは、クロックの極性を1に設定しています。したがって、アイドル状態のクロック信号はハイになります。クロックの位相については0に設定しているため、データは、クロック信号の立上がりエッジ（橙色の点線）でサンプリングされ、立下がりエッジ（青色の点線）でシフトされます。

図2～図5は、4つのSPIモードにおけるタイミング図の例です。各例において、データの値はMOSIとMISOの部分に示してあります。送信の開始と終了は緑色の点線、サンプリング用のエッジは橙色、シフト用のエッジは青色で示しています。なお、これらは、説明用に作成した簡単な例に過ぎません。SPIによる通信機能を適切に実装

nCS
CLK
MOSI
0xA5xxxx

MISO
0xBA

Hi-Z

10

1

100011101xxxx

101Hi-Z0

図 2 . S P I モ ード 0 の タイミング 図 。C P O L は 0 、C P H A は 0 、アイドル 状 態 の C L K はローで す。
デ ー タを 立 上 がりエッジ で サン プ リング し 、立 下 がりエッジ で シフトしま す。

nCS
CLKMOSIxxxx

MISO

Hi-Z

11001101011001xxxx

1Hi-Z0

図 3 . S P I モ ード1の タイミング 図 。C P O L は 0 、C P H A は 1、アイドル 状 態 の C L K はローで す。
デ ー タを 立 下 がりエッジ で サン プ リング し 、立 上 がりエッジ で シフトしま す。

nCS

CLK

MOSI
0xA5xxxx

MISO
0xBA

Hi-Z

1

100

110

101

1001xxxx

1Hi-Z0

図 4 . S P I モ ード 2 の タイミング 図 。C P O L は 1、C P H A は 1、アイドル 状 態 の C L K は ハ イで す。
デ ー タを 立 下 がりエッジ で サン プ リング し 、立 上 がりエッジ で シフトしま す。

2Analog Dialogue 52-09

nCS

CLK
MOSI
0xA5xxxx

MISO
0xBA

Hi-Z

10

1

1000

1

1

1

10xxxx

10

1

Hi-Z

0

図 5 . S P I モ ード 3 の タイミング 図 。C P O L は 1、C P H A は 0 、アイドル 状 態 の C L K は ハ イで す。
デ ー タを 立 上 がりエッジ で サン プ リング し 、立 下 がりエッジ で シフトしま す。

SPI
マスタ

CS3
CS2
CS1

CSCS
SCLK
SDI
SDO

SPI
スレーブ

ADGS1412SCLK
SDI
SDO

CS
SCLK

SPI
スレーブ

SDI
SDO

ADGS1412

SPI
スレーブ

ADGS1412

SCLK
MOSI
MISO

図 6 . S P I に よってマル チスレ ーブ 構 成 を 実 現した 例

マルチスレーブ構成
先述したように、SPIでは1つのマスタに対して、複数のスレーブを使用することが可能です。スレーブは標準モードまたはデイジーチェーン・モードで接続できます。
標準モード
標準モードでは、マスタから各スレーブに対して、個別にCS信号を送信する必要があります。マスタがCS信号をイネーブルにする（ローに引き下げる）と、選択されたそのスレーブに対して、クロックとMOSI/MISO上のデータが有効になります。複数のCS信号がイネーブルになると、MISO上のデータが壊れてしまいます。どのスレーブからデータが送信されているのか、マスタは識別できないからです。
図6に示すように、スレーブの数が増えるに連れて、マスタからのCS信号線の数も増えてしまいます。マスタに必要な入出力の数が著しく増加してしまうので、現実的には使用できるスレーブの数には限りがあるということになります。この問題については、いくつかの対処法があります。言い換えると、標準モードにおけるスレーブの数を無理なく増やすことも可能だということです。例えば、マルチプレクサを使用してCS信号を生成するという方法を採用すれば、この問題に対処できます。

デイジーチェーン・モード
SPI
マスタ

CS

CS

SCLK

SCLK

MOSI

SDI

MISO

SPI
スレーブ

SDO

CS

SDI

SPI
SCLK スレーブ
SDO

SDI
CS
SPI

SCLK スレーブ
SDO

図 7. デイジ ー チェーン・モ ード で
マル チスレ ーブ 構 成 を 実 現した 例

Analog Dialogue 52-09

3

マルチスレーブ向けのもう1つの接続方法がデイジーチェーン・モードです。この方法では、すべてのスレーブに対して、同一のCS信号を供給します。そして、1つのスレーブから次のスレーブへと順にデータが伝搬されるように、複数のスレーブを配置します。この構成では、すべてのスレーブが同じクロックを同時に受信します。マスタからのデータは1つ目のスレーブに引き渡され、そこから順次、次のスレーブへとデータが伝搬していきます。
この方法では、1つのスレーブから次のスレーブへと順にデータが伝搬されます。そのため、各スレーブにデータが到達するまでに必要なクロック・サイクルの数は、デイジーチェーンにおける各スレーブの位置に比例します。
例えば、図7の例が8ビットのシステムであるとすると、3つ目のスレーブまでデータを送信するには、24個のクロック・パルスが必要になります。それに対し、標準モードであれば8個のクロック・パルスで済みます。図8に、デイジーチェーンにおけるクロック・サイクルとデータの伝搬の関係を示しました。なお、デイジーチェーン・モードは、すべてのSPIデバイスでサポートされているとは限りません。製品のデータシートで、同モードを使用できるかどうかを確認してください。

Eight
クロック

Eight
クロック

Eight
クロック

SDIN1

0xA5

0x5A

0x0A

SDOUT1SDIN2

X

0xA50x5A

SDOUT2
SDIN3X

X0xA5

CLK

図 8 . デイジ ー チェーン に お ける
クロック・サイクルとデ ー タの 伝 搬 の 関 係

アナログ・デバイセズのSPI向け
スイッチ／マルチプレクサ
アナログ・デバイセズは、SPIを使用する際に活用できるスイッチICを提供しています。特に、最新世代の製品を使用すれば、スイッチに起因する性能劣化を生じさせることなく、実装スペースを大きく削減することができます。以下では、SPIを最適な形で利用できるように設計されたスイッチ／マルチプレクサを活用することによって、システム・レベルの設計を大幅に簡素化する方法を説明します。具体的には、GPIOの必要本数に注目して、その効果を示すことにします。
まずは、シンプルなスイッチICを使用した場合にどのようなことが起きるのかというところから説明します。
「ADG1412」は、クワッド・タイプのSPST（単極単投）スイッチICです。図9は、マイクロコントローラに1個のADG1412を接続する場合の概念図です。この例では、マイクロコントローラの4本のGPIOを各スイッチの制御入力に接続しています。
マイクロコントローラ

GPIOs
SPI マスタ

ADG1412

入力

出力SPI
スレーブ

図 9 . マイクロコントロー ラ の G P I O をス イッチ の 制 御 信 号として使 用 する 例

このようなシンプルな方法を採用した場合、基板上のスイッチの数が増えるに連れ、必要なGPIOの本数が激増してしまいます。例として、テスト用の計測システムを設計するケースを考えます。その場合、システムのチャンネ
ル数を増やそうとすると、非常に多くのスイッチが必要になります。仮に、4個のADG1412を使用して、4 × 4のクロスポイント・マトリクスを構成するとしましょう。
そうすると、必要なGPIOの数は16本に達します。標準的なマイクロコントローラを使用したい場合、このことが足かせになってしまうかもしれません。つまり、システム全体として見た場合、GPIOの数が不足してしまう可能性があるということです。図10に、マイクロコント
ローラの16本のGPIOを使用して、4個のADG1412を制御する例を示しました。

GPIOs

マイクロコントローラ

SPI マスタ

ADG1412

ADG1412

ADG1412

ADG1412

SPI
スレーブ

SPI
スレーブ

SPI
スレーブ

SPI
スレーブ

図 1 0 . マル チスレ ーブ 構 成 の 例 。この 方 法 で は 、ス イッチ の 数 を 増 や すと、必 要 な G P I O の 数 が 激 増しま す。

4Analog Dialogue 52-09

マイクロコントローラ
CS
CLK
MOSI
MISO

シリアル‐パラレル変換器

SPI マスタ

ADG1412

ADG1412

ADG1412

ADG1412

SPI
スレーブ

SPI
スレーブ

SPI
スレーブ

SPI
スレーブ

図 11 . シリアル‐パラレル 変 換 器 を 利 用した マル チスレ ーブ 構 成CS4
SPI
マスタ

CS3
CS2
CS1

SCLKマイクロコントローラCSCS

SDI
SDO

SPI
スレーブ
ADGS1412

SCLK
SDI
SDO

CS
SCLK

SPI
スレーブ
ADGS1412

SCLK

SPI
スレーブ

SDI
SDO

CS
SPI
スレーブ

SDI
SDO

ADGS1412

ADGS1412

SCLK
MOSI
MISO

図 1 2 . S P I 対 応 ス イッチ I C を 利 用した マル チスレ ーブ 構 成 。
同 I C を 使 用 することに より、必 要 な G P I O の 本 数 を 節 約 することが で きま す。

必 要 な G P I O の 数 を 減 ら す た め の 1 つ の 方 法 は 、 図 11 に 示
すように、シリアル‐パラレル変換器を使用することです。この回路では、同変換器をSPIのシリアル・インターフェースによって設定し、出力されるパラレル信号をスイッチの制御入力として使用します。この方法の欠点は、追加のコンポーネントが必要になるため、部品点数（BOM：Bill of Material）が増加してしまうことです。
この問題については、有用な代替策があります。それは、SPIによってスイッチを制御する機能を備えたスイッチIC（SPI 対応スイッチIC）を採用することです。SPI 対応スイッチICを使用すれば、必要なGPIOの数を減らせるだけでなく、シリアル‐パラレル変換器も追加しなくて済みます。「ADGS1412」は、アナログ・デバイセズが提供している代表的なSPI対応スイッチICです。図12では、同ICを4個使用しています。それぞれの制御は、マイクロコントローラからSPIの信号を供給することによって行います。そのために必要なGPIOの数は、16本からわずか7本に削減されます。
また、ADGS1412をデイジーチェーン・モードで使用すれば、必要なGPIOの数を更に減らすことができます（図13）。同モードでは、マイクロコントローラがSPIマスタとして機能するために必要なGPIOの数は、システムで使用するADGS1412の数にかかわらず、わずか4本で済みます。

SPI
マスタCSCSSCLK

SCLK

MOSI

SDI
ADGS1412
SDO

MISO
マイクロコントローラ

CS
SCLK

SPI
スレーブ

SDI
SPI
スレーブ

ADGS1412
SDO

CS

SDI

SPI
スレーブ
SCLK
ADGS1412
SDO

CS

SDI

SPI
スレーブ
SCLK
ADGS1412
SDO

図 1 3 . S P I 対 応 ス イッチ I C を デイジ ー チェーン・モ ード で使 用 する 例 。この 方 法 を 採 用 す れ ば 、G P I O の 必 要 本 数 を
更 に 削 減 で きま す。

Analog Dialogue 52-095図13は、ADGS1412の使い方を説明するための概念図です。実際には、同ICのデータシートに記載されているように、SDOピンにはプルアップ抵抗を付加することが推奨されます。ADGS1412をデイジーチェーン・モードで使う方法については、同ICのデータシートをご覧ください。なお、図13では、回路を簡素化するためにスイッチの数を4個としました。実際には、システムで使用するスイッチの数が増えるに連れ、基板の簡素化とスペースの削減という面で得られる効果が非常に大きくなります。例えば、SPI対応スイッチICの製品群の中からクワッド・タイプのSPSTスイッチを選択し、それを8個使って4 × 8のクロスポイント構成を実現するとします。6層基板を使用してそのような回路を構成した場合、基板上の占有面積を20%削減できます。なお、高精度のSPI対応スイッチICを使用してチャンネル密度を高める方法については、「高精度のSPIスイッチにより、チャンネル密度を高める」を参照してください。

関連資料
ADuCM3029 データシート「パワー・マネージメントを統合した超低消費電力ARM Cortex-M3 MCU」Analog
Devices、2017年3月
Stephen Nugent「高精度の SPI スイッチにより、チャンネル密度を高める」Analog Dialogue、AD51-05
Miguel Usach、AN-1248、アプリケーション・ノート「SPIインターフェース」Analog Devices、2015年9月

アナログ・デバイセズは、SPI対応スイッチICと同マルチプレクサICを数多く提供しています。詳細については、こちらをご覧ください。

Piyu Dhaker
著者：
Piyu Dhaker（piyu.dhaker@analog.com）は、アナログ・デバイセズの北米セントラル・アプリケーション・グループに所属するアプリケーション・エンジニアです。2017年6月に同グループに加わりました。それ以前には、車載パワー・トレイン・グループやパワー・マネージメント・グループに所属していました。2007年にサンノゼ州立大学で電気工学の修士号を取得しています。

6

Analog Dialogue 52-09