SPI通信を理解していたつもりだったことに気づいた(SPI3)
🎯

SPI通信を理解していたつもりだったことに気づいた(SPI3)

Tags
Published
June 11, 2018
SPI通信についての勘違いがいくつかあったのでここに書き留めておこうと思います。

SPI通信に使うピン

  • MISO (Master In Slave Out)
  • MOSI (Master Out Slave In)
  • SCK (Sequence CLocK)
  • SS (Slave Select)
SPI通信にはマスター送信ライン(MOSI)スレーブ送信ライン(MISO)クロック(SCK)SSの4種類の線があります。SSピンはスレーブの数に比例するのでスレーブがn増えると4+n本の線が必要となってきます。

SCK

クロック(時計)から受け取れる意味そのままです。一定間隔で信号がHIGHになったりLOWになったりします。マスター側がクロックを生成し、スレーブはこのクロックを読むだけで生成しません。このクロックマスターとスレーブ間の通信における正確さを決定します。1Mhzくらいが主流です。STM32では16Mhzくらいまではちゃんと動作することが確認できています。

MOSI

MOSIではクロックのリズムに合わせてデータが1bitずつ送信されます。
車道と同じように一方通行です。スレーブは受け取るだけです。

MISO

クロックのリズムに乗ります。
MISOではMOSIにデータがくると同時に、1bitずつデータが送信されます。
MOSIと同じく一方通行です。マスターは受け取るだけです。

SSピンの役割

SSピンは水道(MISO)の蛇口の役割を果たします。
LOWで蛇口が捻られてデータが出ます。HIGHで蛇口が閉まります。
なのでSSピンがHIGHのときはSlaveからはデータが出ません。

STM32でのSPI通信

16bitモードというのがあるので、short int型なら2byteのデータを1byteと1byteに分けないですみます。しかし、16bit(2byte)も必要のない場合は通信モードを8bitにした方が早いです。
16bitモードでは16回分のクロックでデータを送信します。8bitモードでは8回分のクロックで送信します。spi.format(bit, mode);で設定します。おすすめは8bit,mode3と16bit,mode3です。
mbedのSPIのURL
 

Loading Comments...