戻る

SPIループバックテスト:Velxioでプロトコルをマスターする

はじめに

SPI(Serial Peripheral Interface)は、マイクロコントローラをセンサー、ディスプレイ、メモリチップに接続するために広く使用される同期式シリアル通信プロトコルです。このチュートリアルでは、Velxioシミュレータを使用してSPIループバックテストを構築します。ループバックテストは、SPI経由でバイトを送信し、応答を読み戻すことで、プロトコルが正しく動作することを確認します。物理的なスレーブデバイスがないため、シミュレータは送信したバイトを返すため、ハードウェアなしでSPIを学ぶのに最適な方法です。

回路のウォークスルー

まずは回路をセットアップしましょう。必要なコンポーネントはArduino Unoのみで、これをキャンバス上に配置します。

Velxioシミュレータキャンバス上のspi-loopbackの回路図

Arduino Unoを追加するには、キャンバスツールバーの「+」アイコンをクリックしてコンポーネントピッカーを開きます。

カテゴリ別に部品をブラウズするVelxioコンポーネントピッカーモーダル

「Arduino Uno」を検索してキャンバスに配置します。Arduino Unoには専用のSPIピンがあります:

このループバックテストでは、SPI信号はArduino内部で完結するため、外部配線は必要ありません。ただし、SSピン(ピン10)を出力として設定し、初期状態でHIGH、通信中はLOWにする必要があります。コードでこれを処理します。

コードのウォークスルー

次にコードを見ていきましょう。エディタツールバーの「Code」タブをクリックしてコードエディタを開きます。

コンパイルと実行コントロールを備えたVelxioエディタツールバー

コードはArduino C++で記述されており、組み込みのSPI.hライブラリを使用しています。外部ライブラリは必要ありません。

// SPI Loopback Test
// Sends bytes via SPI and logs the exchange.
// Without a physical slave, the emulator returns the sent byte.

#include <SPI.h>

#define SS_PIN 10

void setup() {
  Serial.begin(9600);
  Serial.println("========================");
  Serial.println("  SPI Protocol Test");
  Serial.println("========================");
  Serial.println();

  pinMode(SS_PIN, OUTPUT);
  digitalWrite(SS_PIN, HIGH);
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV16);

  Serial.println("SPI initialized.");
  Serial.print("Clock divider: 16 (");
  Serial.print(F_CPU / 16);
  Serial.println(" Hz)");
  Serial.println();

  // Send test pattern
  Serial.println("Sending test pattern via SPI:");
  byte testData[] = {0xAA, 0x55, 0xFF, 0x00, 0x42, 0xDE, 0xAD, 0xBE};

  digitalWrite(SS_PIN, LOW);  // Select slave

  for (int i = 0; i < sizeof(testData); i++) {
    byte sent = testData[i];
    byte received = SPI.transfer(sent);

    Serial.print("  TX: 0x");
    if (sent < 16) Serial.print("0");
    Serial.print(sent, HEX);
    Serial.print("  RX: 0x");
    if (received < 16) Serial.print("0");
    Serial.print(received, HEX);

    if (sent == received) {
      Serial.println("  (loopback OK)");
    } else {
      Serial.println();
    }
  }

  digitalWrite(SS_PIN, HIGH);  // Deselect slave

  Serial.println();
  Serial.println("SPI test complete.");
}

void loop() {
  delay(1000);
}

主要部分を解説します:

主要な概念

よくある落とし穴とデバッグのヒント

推奨される拡張

自分で試してみよう

さあ、始めましょう。Velxioでライブサンプルを開き、シミュレーションを実行してください。送信および受信された各バイトを示すシリアル出力が表示され、ループバックが確認できます。

VelxioでSPIループバックテストを開く

楽しいシミュレーションを!


共有:
David Montero

執筆者

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

関連記事


前の記事
Arduinoでシリアル、I2C、SPIをマスターする — Velxioで学ぶ
次の記事
Arduinoを使ったI2C EEPROMの読み書き:完全ガイド