戻る

Pico SPIループバック:RP2040のシリアル通信をテストする

はじめに

SPI(Serial Peripheral Interface)は、マイクロコントローラをセンサー、ディスプレイ、その他の周辺機器に接続するために広く使用される同期式シリアル通信プロトコルです。このチュートリアルでは、Velxioのブラウザ内シミュレーターを使用して、Raspberry Pi Pico上で簡単なSPIループバックテストを構築します。PicoはSPI0を介してバイトを送信し、それらを読み戻します。その間、3つのLEDがMOSI、MISO、SCKラインのアクティビティを視覚的に示します。これは、より複雑なプロジェクトに進む前に、SPIハードウェアと配線が正しく動作していることを確認するための優れた方法です。

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

回路の解説

この回路のコンポーネントと配線を見てみましょう。

コンポーネント

配線

PicoのSPI0ピンは次のようにマッピングされています:

各LEDのアノード(A)はそれぞれのSPIピンに接続され、カソード(C)はGND(PicoのGND.1)に接続されます。シミュレーター内の配線色は次の通りです:

このシンプルなセットアップにより、SPIアクティビティを確認できます。データが送信されるとLEDが点滅します。

コード解説

以下がPico用の完全なArduinoスケッチです:

// Raspberry Pi Pico — SPI Loopback Test
// Sends bytes over SPI0 and reads the loopback response
// Default SPI0 pins: MISO=GP16, MOSI=GP19, SCK=GP18, CS=GP17

#include <SPI.h>

void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("=== Pico SPI Loopback Test ===");
  Serial.println("SPI0: MISO=GP16, MOSI=GP19, SCK=GP18");
  Serial.println();

  SPI.begin();
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));

  // Send test bytes
  byte testBytes[] = {0x55, 0xAA, 0xFF, 0x00, 0x42};
  int count = sizeof(testBytes);

  Serial.println("Sending bytes and reading loopback:");
  for (int i = 0; i < count; i++) {
    byte rxByte = SPI.transfer(testBytes[i]);
    Serial.print("  TX: 0x");
    if (testBytes[i] < 16) Serial.print('0');
    Serial.print(testBytes[i], HEX);
    Serial.print("  RX: 0x");
    if (rxByte < 16) Serial.print('0');
    Serial.print(rxByte, HEX);
    Serial.print("  ");
    Serial.println(rxByte == testBytes[i] ? "MATCH" : "DIFFER");
  }

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

void loop() {
  delay(10000);
}

動作の仕組み

  1. シリアル設定:115200ボーでシリアル通信を開始し、結果をシリアルモニターに出力します。
  2. SPI初期化SPI.begin()でSPI0ペリフェラルを初期化します。SPI.beginTransaction()は、クロック速度1 MHz、MSBファーストのデータ順序、SPIモード0(CPOL=0、CPHA=0)でバスを設定します。
  3. テストデータ:5つのテストバイト(0x550xAA0xFF0x000x42)の配列を定義します。これらは、交互ビット、全1、全0、および混合パターンをカバーします。
  4. ループバック転送:各バイトに対してSPI.transfer()を呼び出します。これにより、バイトを送信すると同時に、現在MISOラインにあるバイトを受信します。ループバック(MISOがMOSIに外部または内部で接続されている)があるため、受信したバイトは送信したバイトと一致するはずです。
  5. 結果表示:スケッチは、送信(TX)および受信(RX)されたバイトを16進数で表示し、さらに「MATCH」または「DIFFER」のステータスを表示します。
  6. クリーンアップSPI.endTransaction()でSPIバスを解放します。

主要な概念

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

推奨される拡張

自分で試してみよう

このプロジェクトを構築する準備はできましたか?Velxioでライブサンプルを開いて、実験を始めましょう:

VelxioでPico SPIループバックを開く

Velxioエディターツールバーを使用してコードをコンパイルおよび実行し、シリアルモニターを開いて結果を確認します。キャンバスツールバーを使用すると、回路のズームやパンができます。コンポーネントを追加する必要がある場合は、コンポーネントピッカーを使用します。

コンパイルと実行のコントロールがあるVelxioエディターツールバー

シミュレーションビューポートの上にあるVelxioキャンバスツールバー

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

それでは、楽しい製作を!


共有:
David Montero

執筆者

David Montero

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

GitHub velxio.dev

関連記事


前の記事
Raspberry Pi Picoでアナログセンサーを読み取る — Velxio
次の記事
Pico I2C EEPROM 読み書き:ブラウザで不揮発性メモリをシミュレート