Project_OKI’s diary

エンジニアの勉強ブログ

SPI通信とは

​​​​

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だったり書かれるので、

  混同しない様に、意味を考えるとよい。

SPI通信

 

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になったタイミングで、

  格納する場所が隣のビットに移動(シフト)する。
 ・これを繰り返すことにより、送信する為のデータを格納していく。

 

参考:

1. SPI とは

「SPI」の解説 - しなぷすのハード製作記

SPI通信インターフェースの基本を学ぶ(入門編) - 通信回路、プロトコルなど | アナログ・デバイセズ