bus-spi-miso-mosi-sck-velocidad

El bus SPI: líneas MISO, MOSI, SCK y CS

  • 4 min

El bus SPI es un protocolo serie síncrono de alta velocidad. A cambio de usar más cables, nos da señales más limpias y una lógica bastante directa.

Hemos visto que el I2C es genial porque usa pocos cables, pero tiene un defecto: es “lento” y complejo eléctricamente (resistencias pull-up, direcciones…).

Cuando los ingenieros diseñaron el SPI (Serial Peripheral Interface), decidieron sacrificar el número de cables a cambio de una sola cosa: Velocidad.

El modo rápido habitual de I2C llega a 400 kbit/s, mientras que muchos dispositivos SPI trabajan a varios megahercios. La frecuencia máxima depende del controlador, el periférico, el cableado y la integridad de señal.

Los 4 jinetes del SPI

A diferencia de los dos cables del I2C, aquí usamos cuatro. Conviene saber qué hace cada uno para no cruzarlos.

SCK (Serial Clock): el reloj

Al igual que en I2C, es un protocolo Síncrono. El Maestro genera los pulsos de reloj.

  • La diferencia es la velocidad. Aquí el reloj vuela.
  • Cada pulso marca el envío y recepción de un bit.

MOSI (Master Out Slave In)

Es la línea de datos que va del Maestro hacia el Esclavo. (Nota: En los estándares modernos, para evitar términos esclavistas, se empieza a llamar COPI - Controller Out Peripheral In).

MISO (Master In Slave Out)

Es la línea de datos que va del Esclavo hacia el Maestro. (Nota moderna: CIPO - Controller In Peripheral Out).

CS o SS (Chip Select / Slave Select)

Aquí no hay “direcciones hexadecimales” como en I2C. Para hablar con un chip específico, el Maestro tiene un cable directo conectado al pin CS de ese chip.

  • La lógica suele ser Inversa (Active Low).
  • Si pones el pin CS a LOW, el chip queda seleccionado y escucha.
  • Si pones el pin CS a HIGH, el chip ignora lo que pasa en el bus. Los voltajes concretos dependen de los niveles lógicos de los dispositivos.

Full Duplex: la cinta transportadora

Esta es una característica única del SPI. Es Full Duplex.

Una UART con líneas TX y RX también puede ser full duplex. En SPI, las líneas separadas MOSI y MISO permiten desplazar datos en ambos sentidos a la vez.

Imagina dos registros de desplazamiento conectados en anillo. Cuando el Maestro envía un bit por MOSI, el Esclavo simultáneamente empuja un bit por MISO. Es un intercambio, un trueque. Aunque solo quieras leer datos del sensor, estás obligado a enviarle “algo” (generalmente ceros o basura) para “empujar” los datos de vuelta.

Topología: ¿cómo conectamos varios dispositivos?

Si queremos conectar 3 sensores SPI al mismo Arduino:

  1. SCK, MOSI y MISO se comparten (van en paralelo a todos los sensores).
  2. CS (Chip Select) es individual. Necesitas un cable separado desde el Arduino para cada sensor.
  • Sensor 1 al Pin 10.
  • Sensor 2 al Pin 9.
  • Sensor 3 al Pin 8.

Para hablar con el Sensor 1, bajas el Pin 10, haces la transferencia y lo vuelves a subir. Desventaja: cuantos más dispositivos, más líneas CS necesitas. En I2C las dos líneas se comparten, pero el número de dispositivos queda limitado por direcciones, capacitancia y temporización.

Push-pull vs open-drain (el secreto de la velocidad)

¿Por qué SPI es tan rápido y I2C tan lento? Recuerda que I2C usaba Open-Drain (resistencias pull-up). Cargar la capacitancia del cable usando una resistencia es lento (la señal sube como una curva de aleta de tiburón).

SPI suele usar salidas push-pull. Los flancos pueden ser más rápidos que con un pull-up resistivo, aunque el cableado, la carga y las reflexiones siguen deformando la señal y pueden aumentar las emisiones EMI.

Comparativa de protocolos

Ahora que conocemos los tres, ¿cuál eliges para tu proyecto?

ProtocoloVelocidadCablesTopologíaUso ideal
UARTBaja2 (RX/TX)Punto a PuntoComunicación PC, GPS, Bluetooth.
I2CMedia2 (SDA/SCL)Bus (Direcciones)Sensores lentos, RTC, giroscopios. Fácil cableado.
SPIMuy Alta3 + N (CS)Bus (Chip Select)Pantallas TFT, Tarjetas SD, Ethernet, Tiras LED rápidas.

Nota sobre los Modos SPI: A veces verás “SPI Mode 0, 1, 2, 3”. Esto define si leemos el dato cuando el reloj sube o cuando baja. El más común es el Modo 0, pero si un chip no funciona, revisa esto en su datasheet.