Por qué es importante. Las lecturas del nodo se transmiten por tres cables o menos.
Elegir entre UART, SPI o I2C y evaluar el costo de los cables frente a la velocidad es una
La idea, con una imagen. UART envía bytes asíncronos:
La idea, con una imagen. UART envía asincrónico
tasa de baudios acordada por ambas partes. SPI comparte un reloj: el maestro controla SCLK y chip-select, los datos fluyen en MOSI hacia afuera y MISO hacia adentro —dúplex completo. I8C
necesita dos cables (SDA datos, SCL reloj), direcciona dispositivos con
2 bits, y los cablea como open-drain para que cualquier dispositivo pueda mantener la línea baja.
La derivación. UART no tiene línea de reloj, así que ambas partes reconstruyen el tiempo
7 bits, y los cablea en configuración open-drain para que cualquier dispositivo pueda mantener la línea baja.
*Un frame 8N1: 10 tiempos de bit por byte, 86.8 µs a 115 200 baudios
La deducción. UART no tiene línea de reloj, por lo que ambos extremos reconstruyen el tiempo
desde la baudión acordada: un byte en formato 8N1 ocupa exactamente 10 tiempos de bit,
$$T_{\text{byte}} = \frac{10}{\text{baud}}, \qquad \text{throughput} = \frac{\text{baud}}{10} \text{ bytes/s}.$$
SPI en cambio envía un bit por ciclo completo de reloj, por lo que un byte requiere 8 ciclos más
configuración: $T_{\text{byte}} \approx 8/f_{\text{SCLK}}$ — el reloj determina la velocidad.
Ejemplo resuelto 1 — dimensionamiento UART. A 115 200 baudios, 8N1: el rendimiento es
$115\,200/10 = 11\,520$ bytes/s; un byte tarda $10/115\,200 = 86.8$ µs.
Contra el bucle de control de 1 ms del nodo: 11 bytes caben perfectamente (0.95 ms) ✓; pero
una ráfaga bloqueante de 100 bytes (8.68 ms) supera el presupuesto — divídala o aumente la baudión. El
dimensionamiento se decide por cálculo, no por preferencia.
Ejemplo resuelto 2 — el precio tripartito. SPI a 10 MHz clockea un byte en
$8/10\,\text{MHz} = 0.8$ µs — aproximadamente 108× más rápido que UART aquí — pero cuesta un
cable de selección de chip por dispositivo. I2C a 400 kHz necesita 9 ciclos para 8 bits de datos más ACK:
$9/400\,\text{kHz} = 22.5$ µs, antes de los sobrecostos de dirección, inicio y parada.
A estas velocidades elegidas, se sitúa entre SPI y UART, pero con dos cables
sirven para toda la placa (dirección de 7 bits = hasta 112 dispositivos a 1 direcciones por
dispositivo). Sensor en I2C, flash en SPI, consola en UART — la división estándar,
cada una precificada mediante este cálculo.
Errores comunes. Baudios incompatibles (el frame aún 'funciona' y los bytes
son basura — verifique las matemáticas del divisor respecto al reloj periférico, no al
reloj central). Leer una dirección I2C como 8 bits: la dirección de 7 bits más el
bit de lectura/escritura se empaquetan en un byte, y las hojas técnicas citan ambas formas. Y
olvidar el modo SPI (polaridad y fase del reloj): existen cuatro modos porque
los dispositivos difieren; el incorrecto desfasa cada byte un bit.
Resumen. UART: 10 tiempos de bit por byte, sin reloj, ambos extremos acuerdan la
baudión. SPI: un bit por ciclo, un cable por dispositivo. I2C: dos cables, direcciones de 7 bits,
open-drain. Evalúe los bytes por milisegundo frente al número de cables antes de
elegir.