Serial Peripheral Interface(SPI)は,マイコンとその周辺機器のシリアル通信の規格です.複数のデバイスを接続できることや,双方向の通信ができることが特徴です.
この記事ではSPIの仕組みについて解説していきます.
SPIとは?
Serial Peripheral Interface(SPI)は,Motorola社(現在のNXP Semiconductors社)が提唱した,マイコンとその周辺機器のシリアル通信の規格です.
I2Cと並んで,事実上の業界標準となっています.
SPIの概要
SPIでは次の4つの信号を使って通信を行います.
- MOSI(Master Out Slave In)
- MISO(Master In Slave Out)
- SCK(Serial Clock)
- SS(Slave Select)
SPIでは,デバイスはその役割によってマスタとスレーブに分かれています.
マスタは複数接続されたスレーブの中から1つを選び,クロック信号をSCKに出力することで通信を開始することができます.
マスタは通信したいスレーブのSSをLOWにすることで,スレーブを選択します.通信しないスレーブのSSはHIGHにすることで通信から除外することができます.
SPIの仕組み
SPIの動作は次の図のようになります。
マスタが通信したいスレーブのCSをLOWにします。マスタが生成するクロック信号のSCKに合わせて、MOSIとMISOでデータを伝送します。
マスタからスレーブへのデータの送信はMOSI(Master Out Slave In)を使い、スレーブからマスタへのデータの送信はMISO(Master In Slave Out)を使います。
SPICR1
SPIの設定を行うレジスタです.
SPIE(SPI Interrupt Enable Bit)
SPIの割り込みを有効化します.
SPE(SPI System Enable Bit)
SPIを有効化します.SPEがクリアされると,SPIは無効化され,アイドル状態になります.SPISRはリセットされます.
SPTIE(SPI Transmit Interrupt Enable Bit)
SPIの送信割り込みを有効化します.
MSTR(SPI Master/Slave Select Bit)
SPIバスにマスタで動作します.
CPOL(SPI Clock Polarity Bit)
SCKシリアルクロックの極性を決定します.
CPHA(SPI Clock Phase Bit)
データのサンプリングのタイミングを指定します.
SSOE(Slave Select Output Enable)
LSBFE(LSB First Enable Bit)
送信データの順番を指定します.1LSBファーストで0がMSBファーストです.
マスタとスレーブで,クロックの極性(CPOL)とクロックの位相(CPHA)を揃える必要があります.
SPIモード | クロックの極性(CPOL) | クロックの位相(CPHA) |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
- アイドル状態でLOW、アクティブでHIGH(CPOL=0)
- アイドル状態でHIGH、アクティブでLOW(CPOL=1)
- 1つ目のエッジでサンプリング、2つ目のエッジでシフト(CPHA=0)
- 1つ目のエッジでシフト、2つ目のエッジでサンプリング(CPHA=1)
注意:デバイスのデータシートを参照してください。
参考文献
NXP Semiconductors “SPI Block Guide V04.01”
https://www.nxp.com/files-static/microcontrollers/doc/ref_manual/S12SPIV4.pdf