SPI en Raspberry Pi con la librería WiringPi
En este tutorial vamos a usar el bus SPI con la Raspberry Pi. Para realizar este tutorial es necesario tener la librería WiringPi instalada, puedes consultar aquí. Si tienes dudas sobre el bus SPI aquí tienes mas información.
El primer paso es encender la Raspberry y conectarnos por ssh o directamente con el teclado. Este tutorial se realizara usando el editor de texto nano aunque se puede hacer perfectamente con codeblocks simplemente importando la librería.
El primer paso es encender la Raspberry y conectarnos por ssh o directamente con el teclado. Este tutorial se realizara usando el editor de texto nano aunque se puede hacer perfectamente con codeblocks simplemente importando la librería.
Tecleamos el siguiente comando para cargar los drivers SPI en la Raspberry: gpio load spi
Si todo ha ido bien no tiene que salir ningún mensaje. A continuación tenemos la opción de definir el tamaño del buffer del spi. Por defecto viene a 4KB, valor mas que suficiente para la mayoría de las aplicaciones, aunque si queréis cambiarlo aquí tenéis la instrucción:
gpio load spi 100 , donde pone 100 podéis poner el numero que deseéis.
gpio load spi 100 , donde pone 100 podéis poner el numero que deseéis.
Antes de empezar con el código vamos a explicar algunos detalles del SPI de la Raspberry. En primer lugar hay que decir que la Rspberry tiene dos puertos SPI el 0 y el 1. En realidad lo que tiene son dos Chips enable que en tienen el nombre de CE0 y CE1. La velocidad a la que puede comunicarse va desde 500 KHz y 32 MHz .Yo intentaría evitar velocidades mayores a 10 MHz ya que la señal se deforma bastante, una buena velocidad es 1 MHz que es la que se utilizara en este tutorial.
Básicamente hay dos únicas funciones en esta librería, una para configurar y otra para leer/escribir.
- int wiringPiSPISetup (int channel, int speed) ;:Esta función sirve para configurar el spi. En channel ponemos 1 o 0 según el puerto que queramos usar y en speed ponemos la velocidad en Herzios de nuestra comunicación SPI. Si la función nos devuelve un -1 quiere decir que no se ha iniciado bien y que tenemos un error.
- int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ;: Por ultimo tenemos la función de escritura/lectura, esta tiene 3 parámetros El canal , el buffer de datos y el tamaño de los datos a enviar. Dado que esta función lee y escribe al mismo tiempo, lo que pongamos en data sera sobrescrito por lo que se lea del bus.
Ahora vamos a crear el código para usar el SPI para ello crearemos un nuevo fichero con la instrucción nano spi.c . Ahora con el editor de texto abierto pondremos el siguiente código:

spi.c | |
File Size: | 0 kb |
File Type: | c |
Ahora solo nos falta compilar el programa con cc -o spi spi.c -L/usr/local/lib -lwiringPi y ejecutarlo con sudo ./spi .Los pines de la Raspberry son los siguientes:
Con este código realizamos la lectura y escritura de dos bytes. Si se quieren conservar los datos enviados se tendrían que guardar en otra variable ya que la lectura los sobrescribe. El resultado por el osciloscopio son los siguientes.