Protocolo de comunicación SPI

 Conceptos básicos de SPI e I2C

SPI es un protocolo de comunicaciones con una configuración full duplex, que utiliza cuatro señales, Chip Select (CS), reloj (SCK), Master Out / Slave In (MOSI) y Master In / Slave Out (MISO), para las comunicaciones entre un maestro y un esclavo. Una conexión maestro a esclavo individual requiere una señal CS. Esto quiere decir que el número de señales CS aumenta si hay más de un esclavo conectado al mismo bus. 

No hay un límite oficial a la velocidad de un bus SPI, y es habitual que los microcontroladores manejen el bus SPI a velocidades de hasta 10 Mhz. Hay cuatro modos de SPI para registro de los datos en los distintos flancos y polaridad de la señal de reloj. Sin embargo, no existe un mecanismo estándar que permita al maestro confirmar que el esclavo ha recibido y almacenado los datos correctamente.

El bus I2C, por el contrario, requiere solo dos líneas: la línea de datos (SDA) y la línea de reloj (SCLK). Opera a una velocidad mucho más baja de 100 kHz, aunque son posibles velocidades más altas que podrían no ser compatibles con la mayoría de microcontroladores. Los dispositivos esclavo conectados al bus I2C se identifican por la dirección de chip, definida por el hardware. Con I2C, se logra el menor número de pines de señal en el controlador.

Un estándar de I2C bien definido cubre no solo la velocidad del protocolo, sino también los comandos, inicialización, transferencia de datos y confirmación entre dispositivos maestro y esclavo. De este modo, se garantiza que todos los dispositivos compatibles con I2C observen un mismo estándar a fin de facilitar la implementación. 

Consideraciones importantes al elegir entre SPI e I2C para los chips de memoria

Tanto SPI como I2C son protocolos populares con chips de memoria serie, como SRAM (memoria estática de acceso aleatorio), flash o EEPROM (ROM programable y borrable eléctricamente). Al decidir qué protocolo se adapta mejor al diseño, no se debe tener en cuenta exclusivamente el coste. Estos son algunos aspectos importantes que pueden servir para simplificar el proceso de toma de decisiones:

1. Velocidad

Al transferir datos en bloque o si se tiene un margen estrecho para cotejar la entrada de usuario con los datos almacenados en el chip de memoria, cada microsegundo cuenta. Si la velocidad es la cuestión principal, elige SPI para lograr una tasa de transferencia de datos común de 10 MHz, mucho mayor que el modo de alta velocidad de I2C, que es de 400 Khz.

 

2. Número de pines limitado

No todos los diseñadores de hardware disponen de microcontroladores de gama alta con más de 100 pines. Algunos se las tienen que apañar para conectar los chips de memoria con microcontroladores de 28 pines. En estos casos, I2C es la solución ideal, ya que solo necesita un par de pistas para la comunicación.

3. Tamaño de PCB

Si no hay limitaciones en cuestión de tamaño, tanto SPI como I2C son opciones perfectamente válidas. Sin embargo, si necesitas encajar la PCB en una carcasa muy pequeña, el menor número de pistas de I2C se traduce en un tamaño menor de PCB, por lo que es la alternativa más inteligente.

4. Fallos y recuperación de errores

Los diseñadores no son perfectos, y tampoco lo es el protocolo I2C. El bus I2C es propenso a fallos y bloqueos, debido a que tanto la transmisión como la recepción tienen lugar en las mismas pistas físicas. Si el maestro no libera el bus a tiempo, el esclavo puede entrar en modo de bloqueo tras enviar una señal que el maestro no recibe. La recuperación de errores puede ser complicada y, en algunos casos, requerir un reinicio completo de los dispositivos bloqueados. 

5. Alimentación

Si estás diseñando un dispositivo de alimentación por baterías o solar, necesitas minimizar el consumo de energía. Los dispositivos I2C consumen generalmente más energía que los SPI. Por tanto, si el consumo es una cuestión importante, es mejor optar por el modelo SPI.





Comentarios

Entradas populares de este blog

Dispositivos Digitales Programables Pal y Gal

Arquitectura de los DSP y sus módulos embebidos

Bloques funcionales en PLD