Voltar

Teste de Loopback SPI: Domine o Protocolo com a Velxio

Introdução

O Serial Peripheral Interface (SPI) é um protocolo de comunicação serial síncrona amplamente utilizado para conectar microcontroladores a sensores, displays e chips de memória. Neste tutorial, vamos construir um teste de loopback SPI usando o simulador Velxio. O teste de loopback envia bytes via SPI e lê a resposta de volta, confirmando que o protocolo funciona corretamente. Como não há um dispositivo escravo físico, o simulador retorna o byte enviado, tornando esta uma maneira perfeita de aprender SPI sem nenhum hardware.

Passo a Passo do Circuito

Vamos começar configurando o circuito. O único componente que precisamos é um Arduino Uno, que colocaremos na tela.

Diagrama do circuito de loopback SPI na tela do simulador Velxio

Para adicionar o Arduino Uno, abra o seletor de componentes clicando no ícone ”+” na barra de ferramentas da tela.

Modal do seletor de componentes da Velxio navegando por peças por categoria

Pesquise por “Arduino Uno” e coloque-o na tela. O Arduino Uno possui pinos SPI dedicados:

Neste teste de loopback, não precisamos de nenhuma fiação externa, pois os sinais SPI são internos ao Arduino. No entanto, devemos garantir que o pino SS (pino 10) seja configurado como saída e acionado em nível alto inicialmente, depois em nível baixo durante a comunicação. O código cuida disso.

Passo a Passo do Código

Agora vamos examinar o código. Abra o editor de código clicando na aba “Code” na barra de ferramentas do editor.

Barra de ferramentas do editor Velxio com controles de compilar e executar

O código é escrito em Arduino C++ e usa a biblioteca interna SPI.h. Nenhuma biblioteca externa é necessária.

// 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);
}

Vamos detalhar as partes principais:

Conceitos Principais

Armadilhas Comuns e Dicas de Depuração

Extensões Sugeridas

Experimente Você Mesmo

Pronto para mergulhar? Abra o exemplo ao vivo na Velxio e execute a simulação. Você verá a saída serial mostrando cada byte transmitido e recebido, confirmando o loopback.

Abra o Teste de Loopback SPI na Velxio

Feliz simulação!


Compartilhar em:
David Montero

Escrito por

David Montero

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

GitHub velxio.dev

Artigos relacionados


Artigo anterior
Domine Serial, I2C e SPI no Arduino com Velxio
Próximo artigo
Leitura/Gravação de EEPROM I2C com Arduino: Um Guia Completo