como-usar-spi-raspberry-pi

Qué es y cómo usar SPI en Raspberry Pi

  • 4 min

En este tutorial vamos a ver cómo usar el protocolo SPI junto a una Raspberry Pi para comunicarnos con dispositivos externos de alta velocidad.

El SPI (Serial Peripheral Interface) es un protocolo de comunicación serial síncrono ampliamente utilizado para la comunicación entre un microcontrolador y dispositivos periféricos, como sensores, pantallas o memorias flash.

SPI es conocido por su alta velocidad y simplicidad, lo que lo convierte en una opción popular en proyectos de hardware (por contra, requiere más cables que I2C, por ejemplo)

Si quieres aprender más sobre el bus SPI consulta,

¿Qué es SPI?

SPI es un protocolo de comunicación full-duplex, lo que significa que los datos pueden enviarse y recibirse simultáneamente. Utiliza cuatro líneas principales para la comunicación:

  • SCLK (Serial Clock): Señal de reloj generada por el maestro para sincronizar la comunicación.
  • MOSI (Leader Out Follower In): Línea de datos desde el maestro hacia el follower.
  • MISO (Leader In Follower Out): Línea de datos desde el follower hacia el maestro.
  • SS/CS (Follower Select/Chip Select): Línea utilizada para seleccionar el dispositivo follower con el que se desea comunicar.

Cada dispositivo follower tiene su propia línea de selección, lo que permite al maestro comunicarse con un solo follower a la vez.

Conexión dispositivos SPI

La Raspberry Pi tiene dos puertos SPI disponibles: SPI0 y SPI1. El puerto SPI0 es el más comúnmente utilizado y está disponible en los siguientes pines GPIO:

  • GPIO 8 (CE0): Chip Select 0
  • GPIO 7 (CE1): Chip Select 1
  • GPIO 11 (MOSI): Leader Out Follower In
  • GPIO 9 (MISO): Leader In Follower Out
  • GPIO 10 (SCLK): Serial Clock

Si tienes múltiples dispositivos followers conectados al bus SPI, debes utilizar las líneas de selección (CS) para seleccionar el dispositivo con el que deseas comunicarte.

Configuración de SPI en Raspberry Pi

La Raspberry Pi tiene soporte nativo para SPI a través de su GPIO (General Purpose Input/Output). Para utilizar SPI, primero debemos habilitarlo en la configuración del sistema.

Habilitar SPI en Raspberry Pi

Abrimos la terminal en tu Raspberry Pi.

Ejecutamos el siguiente comando para abrir la configuración de Raspberry Pi:

sudo raspi-config

Vamos a Interfacing Options > SPI y seleccinamos Yes para habilitar I2C. raspberry-pi-spi

Reinicia la Raspberry Pi para aplicar los cambios:

sudo reboot

Después de reiniciar, puedes verificar si SPI está habilitado ejecutando el siguiente comando en la terminal:

lsmod | grep spi

Si SPI está habilitado, deberías ver algo como spi_bcm2835 en la salida.

Programación de SPI en Python

Para interactuar con dispositivos SPI en Raspberry Pi, podemos utilizar la biblioteca spidev, que proporciona una interfaz sencilla para trabajar con SPI en Python.

Primero, instala la biblioteca spidev ejecutando el siguiente comando en la terminal:

sudo apt-get install python3-spidev

Vamos con un ejemplo sencillo de cómo enviar y recibir datos a través de SPI utilizando Python:

import spidev

# Crear una instancia de SPI
spi = spidev.SpiDev()

# Abrir el bus SPI (bus 0, dispositivo 0)
spi.open(0, 0)

# Configurar la velocidad del reloj (en Hz)
spi.max_speed_hz = 1000000  # 1 MHz

# Enviar datos al dispositivo SPI
datos_enviados = [0x01, 0x02, 0x03]  # Datos a enviar
datos_recibidos = spi.xfer(datos_enviados)  # Enviar y recibir datos

# Imprimir los datos recibidos
print("Datos recibidos:", datos_recibidos)

# Cerrar la conexión SPI
spi.close()

En este ejemplo,

  • Abrimos el bus SPI0 y configuramos la velocidad del reloj a 1 MHz.
  • Luego, enviamos una lista de bytes ([0x01, 0x02, 0x03]) al dispositivo SPI y recibimos la respuesta.

Ejemplos prácticos