UART frente a SPI frente a I2C
UART, SPI e I2C son los tres protocolos seriales más comunes para sistemas embebidos. Cada uno se diseñó para un caso de uso diferente: UART para enlaces asíncronos punto a punto, SPI para buses periféricos de alta velocidad e I2C para la comunicación multidispositivo a través de dos cables. La elección del más adecuado depende de la velocidad, el número de pines y la topología.
UART (receptor/transmisor asíncrono universal)
UART es un protocolo serial asíncrono punto a punto que utiliza líneas TX y RX independientes. Sin reloj compartido: ambas partes deben acordar la velocidad en baudios. Velocidades estándar de 9600 a 4 Mbps. Se utiliza para consolas de depuración, módulos GPS y módulos Bluetooth.
Advantages
- Hardware sencillo: solo dos cables (TX, RX)
- No se requiere señal de reloj: funcionamiento asincrónico
- Soporte universal: casi todas las MCU tienen un UART
- Funciona con cables largos y es fácil de depurar con un terminal
Disadvantages
- Solo punto a punto, sin bus multidispositivo nativo
- Ambas partes deben ponerse de acuerdo sobre la velocidad en baudios: la mala configuración provoca datos confusos
- Menor velocidad que SPI para transferencias masivas
- Requiere bytes de encuadre y bits de inicio/parada: aproximadamente un 20% de sobrecarga
When to use
Utilice UART para enlaces punto a punto: receptores GPS, módulos Bluetooth/WiFi, registro de depuración y dispositivos industriales con RS-232/RS-485. Ideal cuando la simplicidad y la comunicación de largo alcance importan más que la velocidad.
I2C (circuito interintegrado)
I2C es un protocolo de bus de dos hilos (SDA + SCL) que admite varios maestros y hasta 127 dispositivos en un solo bus. Velocidades estándar: 100 kbps, 400 kbps, 1 Mbps (Fast+), 3,4 Mbps (alta velocidad). Utiliza direccionamiento de 7 bits.
Advantages
- Solo dos cables (SDA + SCL) independientemente del número de dispositivos
- Bus multidispositivo: hasta 127 dispositivos direccionables
- No se necesitan líneas de selección de chips: el direccionamiento está dentro de la banda
- Muy adecuado para sensores, EEPROM, RTC y controladores de pantalla
Disadvantages
- Más lento que SPI para transferencias masivas de datos
- El bus de drenaje abierto requiere resistencias de tracción, lo que limita la velocidad en recorridos largos
- Solucione los posibles conflictos con dispositivos de dirección fija
- No es adecuado para flujos de datos de alta velocidad
When to use
Use I2C cuando tenga varios periféricos de velocidad lenta a media que compartan un bus y quiera minimizar el número de pines. Perfecto para sensores (IMU, temperatura, humedad), EEPROM, RTC y controladores de pantalla.
Key Differences
- ▸Recuento de cables: UART = 2 (TX/RX); I2C = 2 (SDA/SCL, bus compartido); SPI = 4+ (MOSI/MISO/SCK + CS por dispositivo)
- ▸Velocidad: SPI > I2C > UART para transferencias masivas; UART es el más rápido para una transmisión sencilla
- ▸Topología: UART = punto a punto; I2C/SPI = bus multidispositivo (I2C usa direccionamiento, SPI usa líneas de selección de chips)
- ▸UART es asincrónico; SPI e I2C son sincrónicos (reloj compartido)
- ▸SPI es dúplex completo; I2C y UART pueden ser dúplex completo (UART) o semidúplex (I2C)
Summary
Utilice UART para los enlaces seriales punto a punto y la salida de depuración/registro. Utilice el I2C cuando necesite conectar varios sensores o periféricos de baja velocidad en dos cables. Use SPI cuando necesite transferencias de alta velocidad a un solo periférico (pantallas, memoria flash, ADC). El número de pines y la velocidad suelen ser los factores decisivos.
Frequently Asked Questions
¿Qué es más rápido: SPI, I2C o UART?
El SPI es el más rápido: las implementaciones típicas se ejecutan a una velocidad de 10 a 50 MHz (10 a 50 Mbps), limitadas principalmente por la capacitancia de trazas. El I2C alcanza un máximo de 3,4 Mbps (modo de alta velocidad). El UART suele oscilar entre 115,2 kbps y 4 Mbps para las implementaciones estándar.
¿Puedo conectar varios dispositivos en un bus UART?
El UART estándar es punto a punto. El RS-485 (una extensión multipunto de la señalización UART) admite hasta 32 nodos en un bus diferencial a una velocidad de hasta 10 Mbps. Cada dispositivo necesita direccionarse en la capa de aplicación.
¿Por qué I2C necesita resistencias de tracción?
El I2C utiliza señalización de desagüe abierto: los dispositivos solo pueden bajar el bus, no subirlo. Las resistencias de arrastre externas (normalmente 4,7 kΩ para 100 kbps, 2,2 kΩ para 400 kbps) elevan la línea cuando no hay ningún dispositivo que la esté activando. La constante de tiempo RC de la capacitancia del bus y del pull-up limita la velocidad máxima.
¿Para qué se usa el SPI que I2C no puede hacer?
Se prefiere SPI para datos masivos de alta velocidad: tarjetas SD (hasta 25 MHz), flash SPI (hasta 133 MHz), pantallas a color (SPI TFT) y ADC/DAC de alta velocidad. El I2C no puede funcionar de manera confiable a más de 3,4 Mbps debido a las limitaciones del bus de drenaje abierto.