Investigación sobre SPI
Enviado por Arturo Abrito • 25 de Enero de 2025 • Ensayo • 393 Palabras (2 Páginas) • 24 Visitas
Investigación sobre SPI
El bus SPI de la ESP32 “es un protocolo de comunicación síncrona usada para la transferencia de datos entre un microcontrolador y otro dispositivos, como sensores, pantallas, memorias y periféricos” [1].
Este bus usa múltiples líneas de comunicación, lo que permite una alta velocidad de transferencia y flexibilidad excepcional. Entre las características que presenta el bus SPI se encuentra el número de controladores, dependiendo del modelo de la ESP32 por ejemplo si es la ESP32, ESP32-S2 y la ESP32-S3 tienen 4 controladores, mientras que la ESP32-C3 tiene 3.
El uso del bus SPI en Arduino se da de la siguiente manera:
[pic 1]
Fig 1. Bus SPI código
Para la asignación de los pines de la ESP32 se llama a los pines SPI0, SPI1, SPI2 Y SPI3, estos pines son usados de la siguiente forma:
- SPIO y SPI1 se usan para la comunicación de la memoria Flash, estos pines no deben tocarse.
- SPI2 y SPI3 quedan libres para el usuario
Otra característica que se destaca es que para la comunicación se hace uso de 4 líneas:
- MISO: Maestro
- MOSI: Maestro fuera Esclavo
- SCK: Reloj serie
- CS/SS: Selección del chip( se utiliza para seleccionar el dispositivo cuando se utilizan varios periféricos)
Se debe tomar en consideración los pines SPI predeterminados de la SP32 como se puede ver en la siguiente Fig:
[pic 2]
Fig 2. Pines SPI predeterminados ESP32
Ejemplo:
#include <SPI.h>
const int csPin = 5; // Pin de selección de chip (CS)
void sendCommand(byte command, byte data) {
digitalWrite(csPin, LOW);
SPI.transfer(command);
SPI.transfer(data);
digitalWrite(csPin, HIGH);
}
void setup() {
SPI.begin();
pinMode(csPin, OUTPUT);
digitalWrite(csPin, HIGH);
// Inicializar el MAX7219
sendCommand(0x09, 0x00); // Modo de decodificación: ninguna
sendCommand(0x0A, 0x03); // Brillo: 3 (0-15)
sendCommand(0x0B, 0x07); // Scan limit: 8 LEDs
sendCommand(0x0C, 0x01); // Encender el dispositivo
sendCommand(0x0F, 0x00); // Modo de prueba: apagado
}
void loop() {
// Mostrar un patrón en el LED matrix
for (int row = 0; row < 8; row++) {
sendCommand(row + 1, 0b10101010); // Enviar datos a cada fila
}
delay(1000);
// Limpiar el display
for (int row = 0; row < 8; row++) {
sendCommand(row + 1, 0b00000000); // Limpiar cada fila
}
delay(1000);
}
Enlace: https://wokwi.com/projects/416214420071498753
[1] Cómo usar el bus SPI en un ESP32
...