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...