返回

SPI 回环测试:使用 Velxio 掌握协议

简介

串行外设接口(SPI)是一种同步串行通信协议,广泛用于将微控制器连接到传感器、显示屏和存储芯片。在本教程中,我们将使用 Velxio 模拟器构建一个 SPI 回环测试。回环测试通过 SPI 发送字节并读取响应,以确认协议正常工作。由于没有物理从设备,模拟器会返回发送的字节,这使得它成为无需任何硬件即可学习 SPI 的理想方式。

电路讲解

让我们从搭建电路开始。我们需要的唯一组件是一块 Arduino Uno,将其放置在画布上。

Velxio 模拟器画布上 spi-loopback 的电路图

要添加 Arduino Uno,请点击画布工具栏上的“+”图标,打开组件选择器

Velxio 组件选择器模态框,按类别浏览部件

搜索“Arduino Uno”并将其放置在画布上。Arduino Uno 有专用的 SPI 引脚:

在此回环测试中,我们不需要任何外部接线,因为 SPI 信号在 Arduino 内部。但是,我们必须确保 SS 引脚(引脚 10)配置为输出,并在初始时拉高,在通信期间拉低。代码会处理这些。

代码讲解

现在让我们检查代码。点击编辑器工具栏中的“代码”选项卡,打开代码编辑器。

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

相关文章


上一篇
在 Velxio 上精通 Arduino 的串口、I2C 和 SPI
下一篇
使用Arduino进行I2C EEPROM读写:完整指南