Anda di halaman 1dari 3

Arduino y la comunicacin SPI

En este epgrafe se va a analizar el protocolo de comunicaciones SPI, y se va a ver de qu manera se puede manejar desde el entorno de desarrollo Arduino. En primer lugar se har un resumen de cmo funciona dicho protocolo, y a continuacin se explicarn las distintas funciones disponibles para poder utilizarlo. El protocolo SPI El protocolo SPI proviene de las siglas en ingls Serial Peripheral Interface, y es un estndar de comunicaciones usado principalmente en la transferencia de informacin entre circuitos integrados en circuitos electrnicos. Se trata de un bus serie de datos para la transferencia sncrona y bidireccional de informacin. En toda comunicacin por SPI deber haber al menos un dispositivo actuando como maestro, y uno o ms actuando como esclavos. Para seleccionar a cada uno de los esclavos existe una lnea, denominada slave select o chip select. Las seales del protocolo SPI son las siguientes:
SCLK: Es la seal de reloj, impuesta por el dispositivo maestro. MOSI: Corresponde a las siglas Master Output Slave Input, es decir, el maestro enviar los datos a travs de esta lnea y el esclavo los recibir. MISO: Corresponde a las siglas Master Input Slave Output, y es la lnea por la que los esclavos enviarn datos al dispositivo maestro. SS: Es la seal de Slave Select, es decir, la lnea que el maestro activar para indicar al esclavo que se va a establecer la comunicacin con l.

Habitualmente, el pin MISO del maestro se conecta con el pin MOSI del esclavo, y viceversa. Adems, la seal de seleccin de esclavo suele ser activa a nivel bajo. A continuacin se va a describir con un poco ms de detalles cmo funciona el protocolo:
Para iniciar la comunicacin, el maestro configura el reloj usando una frecuencia menos o igual a la frecuencia mxima que soporta el esclavo. Estas frecuencias suelen estar en el rango de 1 a 70 MHz. El maestro a continuacin pone a nivel bajo la seal Slave Select del esclavo para indicarle que se va a comunicar con l. Si es necesario esperar un tiempo antes de iniciar la comunicacin (por ejemplo para permitir una conversin analgico / digital), el maestro esperar al menos ese tiempo antes de proseguir con el intercambio de informacin. Durante cada ciclo de reloj se produce una comunicacin en los dos sentidos, ya que por una parte el maestro va a mandar un bit a travs del pin MOSI y el esclavo lo va recibir, mientras que a la vez el esclavo va a mandar un bit a travs de la lnea MISO para que el maestro lo reciba. Cuando ya no quedan datos que transmitir, el maestro deja de accionar la seal de reloj y normalmente vuelve a colocar a nivel alto la seal de Slave Select para as deseleccionar al dispositivo. Cualquier dispositivo que no tenga a nivel bajo su seal de seleccin, ignorar los movimientos que haya en las lneas MISO y MOSI, con lo que podemos tener distintos dispositivos conectados a esas mismas lneas sin que interfieran en la comunicacin. Evidentemente, la seal de Slave Select s debe ser propia de cada dispositivo.

Adems de la frecuencia de reloj, el maestro tambin puede configurar la polaridad y la fase de la seal de reloj con respecto a los datos. La polaridad se suele denominar usando las siglas CPOL, mientras que la fase se suele denominar como CPHA. En la figura inferior se puede ver un diagrama temporal que explica las distintas combinaciones (o modos) que se describen a continuacin:

o Si CPOL = 0, el valor base de la seal de reloj es el nivel bajo. Si CPHA = 0, los datos se capturan en el flanco de subida de la seal de reloj, y se propagan en el flanco de bajada. Este modo se denomina modo 0. Si CPHA = 1, los datos de capturan en el flanco de bajada de la seal de reloj, y se propagan en el flanco de subida. Este modo se denomina modo 1. o Si CPOL = 1, el valor base de la seal de reloj es el nivel alto. Si CPHA = 0, los datos de capturan en el flanco de bajada de la seal de reloj, y se propagan en el flanco de subida. Este modo se denomina modo 2. Si CPHA = 1, los datos se capturan en el flanco de subida de la seal de reloj, y se propagan en el flanco de bajada. Este modo se denomina modo 3.

Figura Diagrama temporal del protocolo SPI

Funciones disponibles en Arduino La gestin del protocolo SPI en Arduino se realiza a travs de la librera SPI. Esta interfaz se inicializa automticamente cuando la librera SPI se incluye en un cdigo. En el caso de Arduino Mega 2560 usando en las pruebas, los pines se inicializan de la siguiente forma:
Pin 50: seal MISO Pin 51: seal MOSI Pin 52: seal SCK

Pin 53: Seal SS, aunque se pueden usar otros pines para este fin. Esto puede ser til por ejemplo en el caso de tener varios dispositivos conectados en un mismo bus.

La configuracin por defecto del protocolo SPI en Arduino establece que el esclavo ser l mismo, que se van a transferir en primer lugar los bytes ms significativos de cada byte (MSB), que el modo seleccionado es el 0 y se establece la frecuencia de reloj en una cuarta parte de la frecuencia del sistema. Veamos las distintas funciones disponibles para modificar estos parmetros:
mode (byte config). Permite modificar el registro de configuracin del SPI. Si hay varios dispositivos usando SPI y cada uno necesita un modo distinto, esta funcin se deber llamar antes de acceder a cada dispositivo en particular. Veamos dos ejemplos de uso: sistema. dispositivo. Spi.mode( (1<<CPOL) | (1<<CPHA) ). Establece el modo 3 Spi.mode( (1<<SPR0) ). Configura el reloj SCK a 1/16 la velocidad del reloj del Byte transfer(byte b). Enva y recibe un byte a travs del bus SPI. Por ejemplo: n = Spi.transfer( 0x2A ). Enva el byte 0x2A y devuelve lo que reciba del otro

Byte.transfer(byte b, byte delay). Esta funcin es idntica a la anterior, slo que antes de acometer la operacin espera un nmero de microsegundos especificados en el parmetro delay. Es til cuando hay que esperar un tiempo antes de iniciar una transferencia de datos.