SPI通信とは
1.目的
- SPI通信について、知る。
目次
2.SPI通信とは
・マイクロコントローラとその周辺ICの間でよく使用されるインターフェースの1
・センサー、A/Dコンバータ、D/Aコンバータ、シフト・レジスタ、SRAMなど
マイクロコントローラの接続に使用される。
・メインとサブノードがある。
クロックを生成する方がメインとされる。
・メインでサブノードを操作する。
例:mbedで温度センサの値を取得する場合
mbed側がメイン、温度センサ側がサブノード。
2.SPI通信の特徴
・1つのメインから、複数のサブノードを操作可能
・ただし、複数の機器同時にデータの通信は出来ない。
・I2C等に比べて、通信速度が早い。
(対応しているクロック周波数が高い)
・CSにて、デバイスを選択
・送受信(MOSI,MISO)同時にデータの送受信が可能
3.必要なライン
(1) CS:チップセレクト
・使用するサブノード(IC)を選択するのに使用される。
・メインがCSのHigh、Lowを設定する。
・基本は、データを送りたい時に、Low、
データを送らない時はHighにすることが多い。
これは、ICによる為、使用するICのデータシートを参照する。
・CSを複数ノード選択状態にすると、
サブノードからデータが送信されているのか、
メインが判別出来ず壊れる可能性がある。
(2) SCLK:クロック
・データの送受信のタイミングに使用される。
(3) MOSI(Master Out Slave In):データを送信
・データを送る
(4) MISO(Master In Slave Out):データを受信
・送られたデータを受け取る
サブノード側:
(1) SDO(Serial Data Out):データを送信
(2) SDI(Serial Data In):データを受信
※ICによって、MOSIだったり、SDIだったり書かれるので、
混同しない様に、意味を考えるとよい。
5.データの同期
(1) SPI通信は、データを送るのに、クロックに同期して送信する。
これは、シリアル・クロックのエッジによって、
データのシフト/サンプリング処理を同期する。
(2) クロックの立上がりエッジと立下がりエッジのうちどちらで、
データをサンプリング/シフトするかを選択する。
立ち上がり、立下りどちらを使用するかは、
各サブノードのデータシートを確認する。
(3) SPIを介して送信されるデータのビット数については、
各デバイスのデータシートを参照する。
(4)上記、データを送信するための設定としてCPOLビットとCPHAビットがある。
※1. クロックの立下りエッジとは
クロックの信号が、HighからLowになったタイミング
(下記図の矢印の右側)
※2. クロックの立ち上がりエッジとは
クロックの信号が、LowからHighになったタイミング
(下記図の矢印の左側)
※MCP3002のデータシートより抜粋
6.CPOLとCPHAについて
(1)メインでは、サブノードの要件に適合するように、
CPOLビット、CPHAビットによって、クロックの極性と位相を選択する。
(2)アイドル状態とは:
送信を開始するためにCSがハイからローに遷移するまでの間
送信を終了するためにCSがローからハイに遷移するまでの間
(3) CPOL(Clock Polarity)ビットとは
アイドル状態におけるクロック信号の極性を設定する。
つまり、アイドル状態の時に、クロックはHighにあるか、Lowにあるかを設定する。
上記図では、Lowに設定する必要がある。
(4) CPHA(Clock Phase)ビットとは
クロックの位相を選択する
データのサンプリング/シフトにクロックの立上がりエッジと立下がりエッジのうち、どちらを使用するのかを設定する。
SPIモード | CPOL | CPHA |
アイドル状態の クロックの極性 |
データのサンプリング/シフトに使われるクロックの位相 |
---|---|---|---|---|
0 | 0 | 0 | Low | データを立上がりエッジでサンプリング、立下がりエッジでシフト |
1 | 0 | 1 | Low | データを立下がりエッジでサンプリング、立上がりエッジでシフト |
2 | 1 | 0 | High | データを立下がりエッジでサンプリング、立上がりエッジでシフト |
3 | 1 | 1 | High | データを立上がりエッジでサンプリング、立下がりエッジでシフト |
(5) データ通信の流れ
SPIモード0の場合:
・メインによって、CSをHighからLow設定に設定し、サブノードを選択する。
・モード0の場合、アイドル状態のクロック極性が、Lowの為、
CSがHighからLowになる間、クロックはLowの状態になる。
・CSがLowになった後、クロックがLowからHighになった時に、
データの格納が開始される。
・データを立下がりエッジになった時でサンプリング、
立上がりエッジでシフトなので、
・クロックが、HighからLowになった時、
MISO,MOSIのデータを取得する。
・次のクロックのLowからHighになったタイミングで、
格納する場所が隣のビットに移動(シフト)する。
・これを繰り返すことにより、送信する為のデータを格納していく。
参考:
・SPI通信インターフェースの基本を学ぶ(入門編) - 通信回路、プロトコルなど | アナログ・デバイセズ