SPI(シリアル・ペリフェラル・インタフェース)は以前にお話したI2Cと同様のコンピュータのボード内部で使用するデバイス同士を接続することを目的としたシリアルバス規格の一種の通信インタフェースです。
1.SPIとは
従来のデータバス、アドレスバス、制御信号による周辺デバイスの接続(パラレル通信)には、少なくとも十数本以上の信号を接続する必要がありました。 メインメモリなどの高速にアクセスできる必要があるデバイス以外にそれほど速度を必要とされないデバイスなどに関しては、ICのパッケージも小型化できることから、省ピンで接続できる仕様が望まれていました。
このような背景から、いくつかのシリアルバス規格が提唱されその中の一つがSPIになります。
SPIでは、
〇シリアル・クロック(SCLK)
〇データ入力(MOSI)
〇データ出力(MISO)
〇チップ・セレクト(CS)
の4本の信号線を用いて通信します。
クロックの立ち上がり(立ち下がり)エッジに同期して通信を行います。
そして、通信をする場合には、マスタとスレーブというように役割を分けます。クロックは必ずマスタから出力され、入力と出力はクロックに同期して行われます。
マスタ1つに対しスレーブは複数接続できますが、その場合、マスタ側には接続するスレーブの数だけCSの信号線を用意する必要があります。
マスタとスレーブの接続例は以下のようになります。
以前にお話した、RS232Cでは非同期方式ですが、今回のSPIは同期式ですので非同期に比べて高速で安定した送受信(データ通信)が可能な方式です。
また、SPIは全二重のインタフェースなのでマスタ・スレーブのMOSI・MISOは各々同時にデータの送信・受信を行うことが出来ます。
全二重とは簡単に言うと電話の様な方式です、話すと聞くが同時にできます。
(ただし、全二重は電話の様な方式と言いましたが、SPIの全二重は少し違いますのでご使用になられるチップのデータシートで確認下さい。)
これに対して、半二重というものがあります、これは片方が話しているとき相手方は聞くだけで話終わるのを待ってから相手方は話し出さないと行けません。
さらに、チップ・セレクト(CS)信号を制御することでマスタ(一つ)から複数のスレーブを接続し制御(通信)することが可能です。すなわち、マイクロコンピュータなどから複数のスレーブ(SPI対応)ICとの通信を行い必要なデータのやり取りを行います。
2.動作仕様
SPIバスは、マスタ一つと、複数のスレーブの構成になりますが。もし、マスタとスレーブが一対一の場合であれば、スレーブ側に問題が無ければ、CS端子の論理レベルをLに固定する事が可能です。
ただし、場合によってはスレーブが、CS信号の立下りのエッジを動作開始のトリガーに必要とする場合は、固定できない事があります。例えば、M社の M**1242 ADC等では、HからLへの遷移で変換の開始を行う様なチップがあります。複数のスレーブ部品を使うに時は、マスタからそれぞれのスレーブへの独立したCS信号が必要となります。
ほとんどのスレーブ部品は、トライ・ステートの出力状態を持ち、デバイスが選択されていない時のMISO信号は、高インピーダンス(電気的に切断された状態)となりますが、トライ・ステート出力を持たない部品では、外部トライ・ステート・バッファ等を用いないと、SPIを他の部品と共用する事が出来ない事が有りますのでこれも注意しましょう。
ご使用になられる製品(部品)の仕様を確認してから使用するようにしましょう。
2-1 データの送受信
通信を開始するために、マスタは、スレーブが対応する周波数(通常は数MHz)のクロック信号を生成させます。その後、マスタはデータ送受信を行うスレーブのCS信号の論理レベルをアクティブ(Low)にして、そのスレーブを選択します。もし、待ち時間がスレーブ側に必要な場合(例えばアナログからデジタルへの変換を行うA-D変換など)、マスタはクロック信号を発信する前に、必要とされる時間を待つ必要があります。
SPIの各クロックの間に、全二重データ送信が行われる。マスタはMOSIで1ビットのデータを送信し、スレーブがそのデータを読み込みます。その間にスレーブはMISOにて1ビットのデータを送信し、マスタがそのデータを読み込みます。この一連の処理は、たとえ一方通行のデータ送信を目的としている場合でも実行されます。
通常の送信には、8ビットなど、特定のワードサイズの2つのシフトレジスタが用いられます。1つはマスタに、もう1つはスレーブに配置されます。これらのレジスタは、仮想的なリング状に接続されます。データは通常、最上位ビットが最初にシフトアウト※1されます。クロックエッジで、マスタとスレーブの両方がビットをシフトアウトし、伝送ライン上で向かい合う相手にデータを出力します。
次のクロックエッジで、各レシーバーで伝送ラインからビットがサンプリングされ、シフトレジスタの新しい最下位ビットとして設定されます。レジスタの全ビットがシフトイン※1およびシフトアウトされた後には、マスタとスレーブはレジスタ値を交換した状態になります。さらにデータを交換する必要がある場合、シフトレジスタがリロードされ、この一連の処理が繰り返されます。送信は、任意の数のクロックサイクルにわたって継続できます。完了すると、マスタはクロック信号のLとHの切り替えを停止し、通常はスレーブの選択を解除します。
※1:シフトアウト シフトイン:ここではデータが最上位ビットから1ビット毎出力され
それが1ビット毎入力されます。 1ビット毎にデータがシフトされているのでこのような表現をします。
多くの場合、送信は8ビットワードで構成されます。ただし、他のワードサイズも一般的に使われています。例を挙げますと、テキサス・インスツルメンツのTSC2101などのタッチスクリーンコントローラまたはオーディオコーデック用では16ビットワード、または多くのデジタルからアナログへのコンバーター(D/A変換)やアナログからデジタルへのコンバーター(A/D変換)などでは12ビットワードです。
CS線を使用してアクティブにされていないバス上のすべてのスレーブは、入力クロックとMOSI信号を無視する必要があり、MISOを駆動してはいけません(つまり、トライ・ステート出力が必要です)。 繰り返しになりますがデバイスの中には、このような事を実現するのに外部トライ・ステート・バッファの実装が必要となりますので注意が必要です。
2-2 シリアル通信速度について
1990年代後半、自宅でインタネットが出来るようになった頃は、2400bpsや9600bpsといった通信速度が一般的でした。
※bps:bit per secondの略で ビット/秒 です。 9600bpsは1秒間に9600ピットの通信ができる速さを言います。
現在では1Gbps や 10Gbps が一般的になってきました。
- 1000=1M 1000M=1Gですので 10Gbpsは10000000bps となります。
このように我々の周辺でも通信速度の高速化になってきています。
チップのシリアル通信速度も近年通信の速度が高速なっています。
身近なところではパソコンのハードディスクも昔はパラレルインターフェイス(IDE)でしたが、最近はシリアルインターフェイス(SATA)になり、シリアルインターフェイスの用途が増えてきています。チップ形状や配線などから省スペース化にもなりますので今後はさらに増えていくかとおもいます。
3.具体的な使用例
・EEPROM(データ記憶用)
・SDメモリーカード
・RTC(リアルタイムクロック):パソコン等時刻(時計)用などに用いられています。
・温度湿度センサ等の各種デバイスが用いられています。
卓上型の時計(温度計機能付き)等もその一例ですね。
・A/D変換器(コンバータ):アナログをデジタルに変換します。
電圧計の様にアナログの量をデジタルに変換し表示等に使用します。
・D/A変換器(コンバータ):デジタルをアナログに変換します。
A/D変換の逆の動作になります。