JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Arduino UNO R4 WiFi SPI テスト

2024-03-03 13:39:10 | Arduino
 Arduino UNO R4 WiFiのSPIのテストをします。

 前の記事で分からなかったArduino UNO R4のSPIの記載の仕方をWeb上を検索しましたところGitHub1に「Arduino_UNO_R4_SPI_test.ino」という記事を見つけました。記事は、こちら。また、Arduinoリファレンス日本語版にSPIライブラリの説明がありました。記事は、こちら

 GitHubのスケッチを元にSPIのテストをしました。
 SPIプロトコルの設定は、次のようSPISettingオブジェクトで行います。
 パラメータは、クロック速度、bitOrder(MSBFIRST or LSBFIRST)、SPIMODE(0~3)です。
例 SPISettings spi_setting(1000000, MSBFIRST, SPI_MODE0);

 このオブジェクトをSPI.beginTransaction() に渡すことにより設定が有効になります。
例  SPI.beginTransaction(spi_setting); 

 GitHubのスケッチです。(dataは、0x55,0xAAをそれぞれ1回出力に変更しています。)クロックは、100kHz,bitOrderは、MSBFIRST,SPI_MODE0です。
-----------------------------------------------------
#include <SPI.h>

SPISettings spi_setting(1000000, MSBFIRST, SPI_MODE0);

void setup() {
Serial.begin(9600);
while (!Serial);

SPI.begin();
pinMode(10, OUTPUT); // <- this is required to make `digitalWrite(SS, LOW);` work on Arduino R4 Minima.
}

void loop() {
uint8_t data[] = { 0x55, 0xAA};

SPI.beginTransaction(spi_setting);

digitalWrite(SS, LOW);
SPI.transfer(data, sizeof(data));
digitalWrite(SS, HIGH);

SPI.endTransaction();
}
-----------------------------------------------------
 このスケッチをArduino UNO R4 に書き込んで、出力されたSPIのCLK(D13)とMOSI(D11)信号です。MOSIデータは、0x55=0b01010101,0xAA=0b10101010の順にMSBFIRSTで送信されます。
 SPI_MODE0で、CLK正パルスで、CLKの前縁(立ち上がり)でMOSIデータがラッチされます。



 SPI_MODE1の時です。CLK正パルスで、CLKの後縁(立下り)でMOSIデータがラッチされます。


 SPI_MODE2の時です。CLKは負パルスで、CLKの前縁(立下り)でMOSIデータがラッチされます。



 SPI_MODE3の時です。負クロックで、CLKの後縁(立ち上がり)でMOSIデータがラッチされます。



 MAX7219 8X7segLEDには、SPI_MODE0のタイミングが必要です。
 前の記事のスケッチでbitOrderやmodeを設定しなくても動作したのは、SPI設定のデフォルトがMSBFIRSTとMODE0になっていたためと思われます。