ElectroDesignForgeElectroDesignForge
Señales e interfacesDiseño de PCB

Interfaz SPI: modos, sincronización y cableado

Comprenda CPOL, CPHA, MOSI, MISO, SCLK y CS, luego cree un bus SPI confiable con sincronización, niveles lógicos, topologías y guía de depuración.

Escrito y revisado técnicamente porEquipo de ingeniería de ElectroDesignForge

Ver el proceso editorial

Guía de referencia

SPI (Interfaz periférica serie) conecta un controlador a circuitos integrados cercanos, como memorias Flash, ADC/DAC, pantallas, sensores y dispositivos RF. Este enlace serie síncrono es rápido y dúplex completo, pero no es un estándar completo: los límites eléctricos y de estructura provienen de cada hoja de datos.


Referencia rápida

SeñalDirección desde el controladorFunciónPunto clave
SCLK / SCKproducciónReloj de serieSu nivel de inactividad lo establece CPOL.
MOSIcontrolador → periféricoDatos transmitidosTambién llamado COPI, SDI o DIN.
MISOperiférico → controladorDatos recibidosTambién llamado CIPO, SDO o DOUT; alta impedancia cuando no está seleccionado.
CS / SS / nCSsalida, a menudo activa-bajaSelección y límite del marco.Normalmente se necesita un CS independiente por periférico.
TIERRAcompartidoRuta de referencia y retorno.Mantenlo junto a las señales, especialmente fuera de borda.

MOSI y MISO asumen el punto de vista del controlador. COPI (Controller Out, Peripheral In) y CIPO (Controller In, Peripheral Out) aclaran las funciones cuando se analiza un enlace sin un esquema.

SPI no define ni direccionamiento, ni reconocimiento ni una tarifa máxima universal. El protocolo de aplicación define comandos, direcciones de registro, bytes ficticios y respuestas. Por lo tanto, un analizador lógico puede decodificar bits válidos mientras un dispositivo permanece en silencio porque el CS o la estructura del comando es incorrecto.

Verifique antes del cableado: niveles lógicos, velocidad SCLK permitida, modo SPI, orden MSB/LSB, longitud de palabra, estado activo de CS y temporización de CS. Los dominios de 1,8 V, 2,5 V, 3,3 V y 5 V no son automáticamente compatibles.


Los cuatro modos: CPOL y CPHA

  • CPOL (polaridad del reloj) establece SCLK inactivo: 0 = bajo, 1 = alto.
  • CPHA (fase de reloj) establece el flanco de muestreo. Con CPHA = 0, el primer borde después de CS muestrea el primer bit; con CPHA = 1, cambia ese bit y el siguiente borde lo muestrea.
ModoCPOLCPHASCLK inactivoBorde de muestraCambios de datos en
000BajoCrecienteDescendente
101BajoDescendenteCreciente
210AltoDescendenteCreciente
311AltoCrecienteDescendente

El borde de ataque es la primera transición desde el estado inactivo y el borde de salida es la segunda. CPHA = 0 muestras en el borde de ataque; CPHA = 1 muestras en el borde de salida. Esto funciona para cualquier configuración de CPOL.

Lectura de un diagrama de tiempos

  1. Verifique SCLK antes de CS: es decir, CPOL.
  2. Encuentre el borde donde se leen los datos estables: ese es CPHA.
  3. Con CPHA = 0, el primer bit debe ser válido antes del primer flanco.
  4. Confirmar los retrasos en la salida en la hoja de datos; los datos no siempre cambian exactamente en el borde opuesto.

Una CPHA incorrecta a menudo cambia los bits; CPOL incorrecto lee una secuencia plausible en los instantes equivocados. 0x00, 0xFF o una identificación no válida son posibles síntomas, no diagnósticos concluyentes.


Sincronización más allá de la frecuencia

ParámetroSignificadoRiesgo cuando se viola
fSCLKvelocidad máxima de relojErrores intermitentes o muestreo inestable.
tSU(D)MOSI/MISO setup before sample edgeBit leído en el nivel incorrecto
tH(D)Retención de datos después del borde de la muestraEl siguiente bit corrompe el bit actual
tCSSCS activo al primer borde SCLKPrimer comando ignorado o desplazado
tCSHúltimo borde a CS inactivoÚltimo bit no aceptado
tCSHITiempo inactivo de CS entre fotogramasEstado interno no restablecido
tDORetraso de salida MISOMuestreo demasiado temprano a alta velocidad

El presupuesto de tiempo incluye el retardo del traductor de nivel, el tiempo de recorrido del cable o de la traza, la tasa de borde real y la carga capacitiva. Una tarifa que funciona en una placa corta puede fallar después de agregar un conector o una rama.

Para el CS activo-bajo habitual: mantenga SCLK en su estado CPOL, afirme CS, espere tCSS, presente el primer bit lo suficientemente temprano para CPHA = 0, genere bordes y luego espere tCSH antes de liberar CS. Algunas partes requieren CS bajo en toda una secuencia de comando-dirección-datos; otros ejecutan una operación cuando CS aumenta.


Cableado MOSI, MISO, SCLK y CS

Controller MOSI  ─────────►  Peripheral SDI / DIN
Controller MISO  ◄─────────  Peripheral SDO / DOUT
Controller SCLK  ─────────►  Peripheral SCK
Controller nCS   ─────────►  Peripheral nCS
GND              ─────────►  GND

MISO solo se puede compartir cuando cada periférico no seleccionado realmente se vuelve de alta impedancia. Una resistencia de tracción establece un estado inactivo pero nunca resuelve dos salidas activas que luchan entre sí.

SCLK suele ser el más crítico: conmuta cada bit, sincroniza cada receptor y puede sonar. Manténgalo corto, sobre un plano de tierra continuo y alejado de entradas analógicas sensibles. Una resistencia en serie de unas pocas decenas de ohmios en el controlador puede amortiguar una conexión punto a punto; validar el valor con un osciloscopio.

CS sólo permite que responda un periférico. Un pull-up hacia inactivo es útil durante el reinicio del controlador, después de verificar los pull-ups internos, el consumo de energía y las necesidades de tiempo de subida.


Topologías SPI

Estrella con CS independiente

SCLK y MOSI van a cada IC; cada IC recibe su propio CS. Sólo la pieza seleccionada impulsa MISO.

                  ┌──────────► Peripheral A
Controller ─ SCLK ├──────────► Peripheral B
           ─ MOSI ├──────────► Peripheral C
           ─ MISO ◄────────── shared outputs, high impedance when unselected
           ─ CSA  ───────────► A
           ─ CSB  ───────────► B
           ─ CSC  ───────────► C

Esta es la topología recomendada: es sencilla de depurar y no enruta bytes a través de otros dispositivos. Cuando los GPIO son escasos, un decodificador o expansor puede generar señales CS; incluir su retraso y estado de encendido en el diseño.

Cadena de margaritas

Algunos registros de cambios y controladores LED están diseñados para conexiones en cadena. Su salida en serie alimenta la siguiente entrada; comparten SCLK y CS.

Controller MOSI ─► Device 1 ─► Device 2 ─► Device 3
Controller SCLK ─► all devices
Controller CS   ─► all devices
Controller MISO ◄─ final device output, if available

La longitud de la trama es la suma de todas las palabras del dispositivo y el orden físico determina el orden de los bytes. Esto no es apropiado para periféricos SPI normales que simplemente comparten un bus.

Integridad de señal y bus compartido

Cada rama es un trozo que degrada los bordes a medida que aumenta SCLK. Prefiere distribución compacta y ramas cortas. Para enlaces de cable o placa a placa, reduzca fSCLK, proporcione un retorno a tierra cercano y mida en el receptor. SPI no es una interfaz diferencial diseñada para largas distancias.

SituaciónPráctica recomendada
Un IC, trazas muy cortasConexión directa; validar modo y niveles lógicos
Varios circuitos integrados en una placaCS independiente, MISO de alta impedancia cuando no está seleccionado
SCLK sonandoResistencia en serie cerca del controlador; inspeccionar con osciloscopio
Cable o interconexiónVelocidad más baja, intercalado GND, longitud límite, use transceptor si es necesario
Muchas líneas CSDecodificador, registro de desplazamiento o expansor con estado de encendido seguro

Niveles lógicos y depuración.

Compare los umbrales de VIH/VIL y las clasificaciones máximas absolutas en ambas direcciones. Un MISO de 1,8 V puede ser demasiado bajo para una entrada de 3,3 V; una salida de 5 V puede dañar una entrada de 3,3 V no tolerante. Los traductores MOSFET bidireccionales comunes en I²C no son automáticamente adecuados para SCLK o MOSI rápidos: elija un búfer o traductor clasificado para los niveles, velocidad y carga elegidos.

  1. Comience con un periférico a 100 kHz o menos.
  2. Verifique el estado de alimentación, GND, reinicio y CS antes de los datos.
  3. Mida SCLK, CS, MOSI y MISO juntos, activados por CS activo.
  4. Verifique CPOL/CPHA, el orden de bits y el recuento exacto de bordes por cuadro.
  5. Lea una identificación documentada o un registro de estado y luego aumente la tarifa gradualmente.

Un analizador lógico verifica el protocolo; se necesita un osciloscopio para flancos, sobreimpulsos, ruidos y reflexiones. Sonda cerca de la entrada periférica: medir solo en el controlador puede ocultar un problema de línea.


Lista de verificación

  • CPOL, CPHA, orden de bits y longitud de palabras documentados explícitamente en esquemas y firmware.
  • Una CS por periférico a menos que se utilice una cadena definida por la hoja de datos.
  • MISO liberado cuando no está seleccionado; sin contención de salida.
  • Umbrales lógicos, máximos absolutos y temporización comprobados en ambas direcciones.
  • SCLK corto sobre terreno continuo; cualquier resistencia en serie validada.
  • Estado CS seguro durante el reinicio y el encendido.
  • Medición del lado del receptor después de agregar cable, conector, traductor o rama.

Referencias