Назад

Pico SPI Loopback: проверка последовательной связи вашего RP2040

Введение

SPI (Sequential Peripheral Interface) — это синхронный последовательный протокол связи, широко используемый для подключения микроконтроллеров к датчикам, дисплеям и другим периферийным устройствам. В этом руководстве мы создадим простой тест SPI-петли на Raspberry Pi Pico с помощью браузерного симулятора Velxio. Pico будет отправлять байты через SPI0 и считывать их обратно, а три светодиода будут визуально показывать активность на линиях MOSI, MISO и SCK. Это отличный способ убедиться, что ваше SPI-оборудование и разводка работают корректно, прежде чем переходить к более сложным проектам.

Схема цепи pico-spi-loopback на холсте симулятора Velxio

Разбор схемы

Давайте рассмотрим компоненты и разводку в этой схеме.

Компоненты

Разводка

Выводы SPI0 на Pico распределены следующим образом:

Анод (A) каждого светодиода подключается к соответствующему выводу SPI, а катод (C) — к GND (GND.1 на Pico). Цвета проводов в симуляторе:

Эта простая настройка позволяет видеть активность SPI: светодиоды будут мигать при передаче данных.

Разбор кода

Вот полный скетч Arduino для Pico:

// 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 МГц, порядком данных MSB-first и режимом SPI 0 (CPOL=0, CPHA=0).
  3. Тестовые данные: Мы определяем массив из пяти тестовых байтов: 0x55, 0xAA, 0xFF, 0x00 и 0x42. Они охватывают чередующиеся биты, все единицы, все нули и смешанный шаблон.
  4. Передача в петле: Для каждого байта мы вызываем SPI.transfer(). Это одновременно отправляет байт и принимает байт, находящийся в данный момент на линии MISO. Поскольку у нас есть петля (MISO подключен к MOSI внешне или внутренне), принятый байт должен совпадать с отправленным.
  5. Отображение результатов: Скетч выводит переданные (TX) и принятые (RX) байты в шестнадцатеричном формате, а также статус “MATCH” или “DIFFER”.
  6. Завершение: SPI.endTransaction() освобождает шину SPI.

Ключевые концепции

Типичные ошибки и советы по отладке

Предлагаемые расширения

Попробуйте сами

Готовы создать этот проект? Откройте живой пример в Velxio и начинайте экспериментировать:

Открыть Pico SPI Loopback в Velxio

Используйте панель инструментов редактора 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 Чтение/Запись: Симуляция энергонезависимой памяти в вашем браузере