I2C vs SPI: Diferencias Clave para Elegir el Protocolo Adecuado
¿Estás diseñando un proyecto y necesitas decidir entre I2C y SPI? Si no sabes cuál elegir, esta guía te ayudará a tomar la mejor decisión según tus necesidades.
¿Qué es el Protocolo SPI?
Desarrollado por Motorola en la década de 1980, el protocolo SPI (Serial Peripheral Interface) fue creado para comunicar microcontroladores con periféricos como memorias EEPROM.
SPI utiliza cuatro líneas de señal activas (sin contar alimentación y tierra):
- SS (Slave Select): Selección de esclavo, controlada por el maestro.
- MOSI (Master Out Slave In): Datos del maestro al esclavo.
- SCLK (Serial Clock): Reloj serie, generado por el maestro.
- MISO (Master In Slave Out): Datos del esclavo al maestro.
Solo puede haber un dispositivo maestro en el bus SPI, pero no hay límite teórico para los periféricos (esclavos). Cada esclavo adicional requiere una línea SS dedicada.
Cuando el maestro quiere comunicarse con un esclavo, pone su línea SS a nivel bajo (activo). Entonces, la línea SCLK comienza a oscilar a una frecuencia determinada y los datos se transfieren simultáneamente por MOSI y MISO (comunicación full-dúplex). Solo un esclavo puede comunicarse a la vez.
¿Qué es el Protocolo I2C?
Philips Semiconductors (actual NXP) desarrolló I2C (Inter-Integrated Circuit) en 1982 para estandarizar la comunicación entre chips en una misma PCB.
A diferencia de SPI, I2C usa solo dos líneas de comunicación:
- SDA (Serial Data): Línea de datos bidireccional.
- SCL (Serial Clock): Línea de reloj.
Ambas líneas son de colector abierto (open-drain), lo que requiere resistencias pull-up para llevar la línea a nivel alto. Esto permite conectar múltiples maestros y esclavos en el mismo bus (hasta 112 dispositivos con direccionamiento de 7 bits).
Si dos maestros intentan transmitir simultáneamente, se produce un arbitraje: el que detecta que SDA está a nivel bajo mientras él intenta ponerlo alto, detiene su transmisión.
La comunicación inicia con una condición START (SDA baja mientras SCL alta), seguida de la dirección de 7 bits del esclavo más un bit de lectura (1) o escritura (0). El esclavo correspondiente responde con un bit ACK (acknowledge) poniendo SDA a nivel bajo.
Diferencias Fundamentales entre I2C y SPI
Ambos son protocolos "de bajo nivel" para comunicación intra-PCB, pero difieren en principios de funcionamiento y prestaciones:
Modos de Reloj en SPI
SPI define cuatro modos según la polaridad (CPOL) y fase (CPHA) del reloj. Maestro y esclavo deben coincidir:
- Modo 0: Muestreo en flanco de subida, reloj en reposo bajo (CPOL=0, CPHA=0)
- Modo 1: Muestreo en flanco de bajada, reloj en reposo bajo (CPOL=0, CPHA=1)
- Modo 2: Muestreo en flanco de bajada, reloj en reposo alto (CPOL=1, CPHA=0)
- Modo 3: Muestreo en flanco de subida, reloj en reposo alto (CPOL=1, CPHA=1)
Velocidad de Transferencia
SPI supera fácilmente los 10 Mbps (hasta 100 Mbps en implementaciones modernas), ideal para pantallas LCD, acelerómetros y sensores de alta tasa de actualización.
I2C transmite en paquetes de un byte, requiriendo bit ACK por cada byte. Sus tres modos estándar son:
- Estándar: 100 kbps
- Rápido (Fast Mode): 400 kbps
- Alta velocidad (High-Speed): 3.4 Mbps
Por tanto, I2C es significativamente más lento, adecuado para sensores de temperatura, convertidores ADC y dispositivos de baja tasa de datos.
Tabla Comparativa: I2C vs SPI
| Característica | SPI | I2C |
|---|---|---|
| Tipo de driver | Push-pull (tótem pole) | Open-drain (colector abierto) |
| Velocidad máxima típica | 10–100 Mbps (sin límite teórico estricto) | 100 kbps / 400 kbps / 3.4 Mbps |
| Multi-maestro | No | Sí (con arbitraje) |
| Líneas de señal | 4 (+1 SS por esclavo adicional) | 2 (SDA, SCL) |
| Nº máx. de periféricos | Limitado por pines SS disponibles en el maestro | 112 (direccionamiento 7 bits) |
| Control de flujo | No | Sí (clock stretching, ACK/NACK) |
| Dúplex | Full-dúplex | Half-dúplex |
| Consumo de potencia | Menor (drivers push-pull) | Mayor (resistencias pull-up activas) |
| Distancia máxima | Corto alcance (misma PCB) | Mayor (hasta varios metros con buen cableado) |
| Inmunidad al ruido | Menor (señales single-ended, alta velocidad) | Mayor (señales lentas, histéresis en entradas) |
Ventajas e Inconvenientes
SPI
Ventajas
- Alta velocidad full-dúplex
- Bajo consumo energético
- Protocolo simple sin overhead de direccionamiento
- Sin limitación de número de esclavos (salvo pines SS)
Desventajas
- Requiere más pines (4 + 1 por esclavo)
- Solo un maestro
- Comunicación solo a corta distancia (misma PCB)
- Variantes no estándar pueden causar problemas de compatibilidad
- Sin control de flujo ni confirmación de recepción
I2C
Ventajas
- Solo 2 hilos para cualquier número de dispositivos li>Soporte multi-maestro nativo
- Direccionamiento por hardware (7 u 10 bits)
- Control de flujo (clock stretching) y confirmación (ACK)
- Mejor inmunidad al ruido y distancias mayores
- Menor coste de cableado y pines
Desventajas
- Velocidad inferior a SPI
- Mayor consumo por resistencias pull-up
- Complejidad de software superior (arbitraje, ACK, clock stretching)
- Un dispositivo defectuoso que mantenga SDA/SCL bajo bloquea todo el bus
- Capacitancia parásita limita velocidad y número de dispositivos
Factores Clave para Elegir
Pines Disponibles
Si tu microcontrolador tiene pines limitados, I2C (2 pines) es ventajoso frente a SPI (4+ pines).
Velocidad Requerida
Para transferir grandes volúmenes de datos (pantallas, almacenamiento flash, sensores rápidos), SPI es la elección obvia.
Consumo Energético
En dispositivos alimentados por batería, SPI suele consumir menos por sus drivers push-pull y ausencia de pull-ups continuas.
Tamaño de PCB y Enrutado
I2C simplifica el diseño de PCB al requerir solo dos trazas compartidas. SPI necesita más trazas y resistencias de terminación en líneas largas.
Topología de Red
¿Necesitas múltiples maestros? Solo I2C lo soporta nativamente.
Guía Rápida de Decisión
| Requisito | Elige SPI si... | Elige I2C si... |
|---|---|---|
| Velocidad crítica (>1 Mbps) | ✓ Necesitas máximo rendimiento | Dispositivos lentos (sensores, EEPROM, RTC) |
| Pines escasos | Tienes pines suficientes | ✓ Solo 2 pines disponibles |
| Múltiples maestros | No soportado | ✓ Requerido |
| Distancia > 30 cm | No recomendado | ✓ Mejor integridad de señal |
| Bajo consumo (batería) | ✓ Drivers push-pull eficientes | Pull-ups consumen corriente continua |
| Simplicidad de firmware | ✓ Protocolo más simple | Más complejo (estados, ACK, arbitraje) |
UART: Una Tercera Alternativa
UART (Universal Asynchronous Receiver-Transmitter) es un circuito físico para comunicación serie asíncrona punto a punto. Usa dos hilos (TX, RX) sin reloj compartido ni esquema maestro/esclavo. Es ideal para comunicación entre placas, depuración (consola serie) y módulos inalámbricos (Bluetooth, LoRa, GSM).
Conclusión
En la práctica, muchos chips integran ambas interfaces. Si debes elegir:
- SPI para alta velocidad, full-dúplex, bajo consumo y corta distancia.
- I2C para ahorrar pines, múltiples maestros, mayor distancia, simplicidad de cableado y dispositivos lentos.
¿Tienes dudas? Contáctanos y te ayudaremos a elegir la mejor opción para tu diseño.
Tecnología Industrial
- Guía esencial para pruebas de aceite de transformador para sistemas de energía fiables
- Proteja sus motores: los beneficios esenciales de los reactores de línea
- Guía Esencial de Protectores para Muela de Rectificar: Protegiendo al Usuario de Roturas y Lesiones
- 5 claves sobre microherramientas para mecanizado de precisión
- Cumplimiento TAA Explicado: 5 Puntos Clave que Todo Proveedor Debe Conocer
- 9 Aplicaciones esenciales de Machine Learning que debes conocer
- Terminología Esencial de Chorro de Agua para Profesionales
- Ranurado (knurling) explicado: Dominando técnicas de acabado texturizado
- 7 parámetros CNC esenciales que todo operador debe dominar
- Dominando el Revestimiento de Embrague: Guía Completa para Equipos Industriales
- 7 Librerías React Esenciales que Todo Desarrollador Debe Dominar