SPI通信
SPI通信とは
マイクロコントローラとその周辺ICの間でよく使用されるインターフェースの1つ
センサー、A/Dコンバータ、D/Aコンバータ、シフト・レジスタ、SRAMなどとマイクロコントローラの接続に使用される。
メインとサブノードがあり、クロックを生成する方がメインとされる。
メインでサブノードを操作する。
例:mbedで温度センサの値を取得する場合
mbed側がメイン、温度センサ側がサブノード。
特徴
一つのメインから、複数のサブノードを操作可能
ただし、複数の機器同時にデータの通信は出来ない。
I2C等に比べて、通信速度が早い。(対応しているクロック周波数が高い)
CSにて、デバイスを選択
送受信(MOSI,MISO)同時にデータの送受信が可能
必要なライン
メイン側:
CS:チップセレクト
使用するサブノード(IC)を選択するのに使用される。
メインがCSのHigh、Lowを設定する。
基本は、データを送りたい時に、Low、データを送らない時はHighにすることが多い。
これは、ICによる為、使用するICのデータシートを参照する。
CSを複数ノード選択状態にすると、サブノードからデータが送信されているのか、メインが判別出来ず
壊れる可能性がある。
SCLK:クロック
データの送受信のタイミングに使用される。
MOSI(Master Out Slave In):データを送信
データを送る
MISO(Master In Slave Out):データを受信
送られたデータを受け取る
サブノード側:
SDO(Serial Data Out):データを送信
SDI(Serial Data In):データを受信
※ICによって、MOSIだったり、SDIだったり書かれるので、混同しない様に、意味を考えるとよい。
接続:
https://scrapbox.io/files/63210f4fc4ad2f001d6e0bff.svg
※サブノードでも、MOSI,MISOが使われる場合がある。
その場合は、MOSIどうし、MISOどうしを接続する。
データの同期
シリアル・クロックのエッジによって、データのシフト/サンプリング処理を同期する。
クロックの立上がりエッジと立下がりエッジのうちどちらでデータをサンプリング/シフトするかを選択する。
SPIを介して送信されるデータのビット数については、各デバイスのデータシートを参照する。
メインでは、サブノードの要件に適合するように、CPOLビット、CPHAビットによって、クロックの極性と位相を選択する。
アイドル状態とは:
送信を開始するためにCSがハイからローに遷移するまでの間
送信を終了するためにCSがローからハイに遷移するまでの間
CPOL(Clock POLarity)ビットとは
アイドル状態におけるクロック信号の極性を設定する。
CPHA(Clock PHAse)ビットとは
クロックの位相を選択する
データのサンプリング/シフトにクロックの立上がりエッジと立下がりエッジのうち、どちらを使用するのかを設定する。
table:SPI
SPIモード CPOL CPHA アイドル状態のクロックの極性 データのサンプリング/シフトに使われるクロックの位相
0 0 0 Low データを立上がりエッジでサンプリング、立下がりエッジでシフト
1 0 1 Low データを立下がりエッジでサンプリング、立上がりエッジでシフト
2 1 0 High データを立下がりエッジでサンプリング、立上がりエッジでシフト
3 1 1 High データを立上がりエッジでサンプリング、立下がりエッジでシフト
※どのモードで通信を行うかは、サブノードの仕様によって決定する。
クロックの立下りエッジとは
クロックの信号が、HighからLowになったタイミング
クロックの立ち上がりエッジとは
クロックの信号が、LowからHighになったタイミング
データ通信の流れ
SPIモード0の場合
メインによって、CSをHighからLow設定に設定し、サブノードを選択する。
モード0の場合、アイドル状態のクロック極性が、Lowの為、
CSがHighからLowになる間、クロックはLowの状態になる。
CSがLowになった後、クロックがLowからHighになった時に、データの格納が開始される。
データを立下がりエッジになった時でサンプリング、立上がりエッジでシフトなので、
クロックが、HighからLowになった時に、その時のMISO,MOSIのデータを取得する。
次のクロックのLowからHighになったタイミングで、格納する場所が隣のビットに移動(シフト)する。
これを繰り返すことにより、送信する為のデータを格納していく。
参考:
DAC
参照:
P961
SPI参考資料
https://www.youtube.com/watch?v=HLCTDL_5QWw
SPI通信設定(レジスタ):
その他、参考
CPOLの設定方法について調べる必要がある。
関連: