Interfaz Periférica Serial
Interfaz periférica en serie (SPI) es un estándar de facto (con muchas variantes) para la comunicación en serie síncrona, que se utiliza principalmente en sistemas integrados para la comunicación por cable de corta distancia entre circuitos integrados.
SPI utiliza una arquitectura principal-subnodo, en la que un dispositivo principal organiza la comunicación proporcionando la señal de reloj y la(s) señal(es) de selección de chip que controlan cualquier número de periféricos subordinados.
La especificación original de Motorola utiliza cuatro cables para realizar una comunicación dúplex completa. A veces se denomina bus serie de cuatro hilos para contrastar con las variantes de tres hilos que son semidúplex y con los buses serie I²C de dos hilos y de 1 hilo.
Las aplicaciones típicas incluyen microcontroladores de interfaz con chips periféricos para tarjetas Secure Digital, pantallas de cristal líquido, convertidores de analógico a digital y de digital a analógico, memoria flash y EEPROM y varios chips de comunicación.
SPI puede describirse con precisión como una interfaz serial síncrona, pero es diferente del protocolo de interfaz serial síncrona (SSI).
Operación
(Nota: la sección Variaciones describe el funcionamiento de las variantes no estándar).

SPI tiene cuatro señales lógicas (que tienen nombres alternativos):
- SCLK: Reloj de serie (señal en punto desde el principio)
- MOSI: Main Out Sub En (producto de datos desde el principio)
- MISO: Main In Sub Out (producto de datos desde sub)
- CS: Chip Select (active low signal from main to address subs and initiate transmission)
MOSI en una salida principal a MOSI en un secundario. MISO en una salida secundaria a MISO en una principal.
SPI opera con un solo dispositivo que actúa como principal y con uno o más subdispositivos.
Los dispositivos secundarios deben usar salidas de tres estados para que su señal MISO se vuelva de alta impedancia (desconectada eléctricamente) cuando el dispositivo no está seleccionado. Los subwoofers sin salidas de tres estados no pueden compartir un cable MISO con otros subwoofers sin usar un búfer de tres estados externo.
Transmisión de datos
Para comenzar la comunicación, el SPI principal primero selecciona un subdispositivo bajando su CS. (Nota: la barra encima de CS indica que es una señal baja activa, por lo que un voltaje bajo significa "seleccionado", mientras que un voltaje alto significa "no seleccionado")
Si se requiere un período de espera, como para una conversión de analógico a digital, la red principal debe esperar al menos ese período de tiempo antes de emitir ciclos de reloj.
Durante cada ciclo de reloj SPI, se produce la transmisión full-duplex de un solo bit. El principal envía un bit en la línea MOSI mientras que el secundario envía un bit en la línea MISO, y luego cada uno lee su bit entrante correspondiente. Esta secuencia se mantiene incluso cuando sólo se pretende la transferencia de datos unidireccional.
La transmisión con un solo sub (Figura 1) implica un registro de desplazamiento en el principal y un registro de desplazamiento en el sub, ambos de un tamaño de palabra dado (por ejemplo, 8 bits), conectados en una topología de anillo virtual. Los datos generalmente se desplazan con el bit más significativo (MSB) primero. En el borde del reloj, tanto el principal como el secundario se desplazan un poco hacia su contraparte. En el siguiente borde del reloj, cada receptor muestrea el bit transmitido y lo almacena en el registro de desplazamiento como el nuevo bit menos significativo. Después de que todos los bits se hayan desplazado hacia adentro y hacia afuera, el principal y el secundario han intercambiado valores de registro. Si es necesario intercambiar más datos, los registros de desplazamiento se recargan y el proceso se repite. La transmisión puede continuar durante cualquier número de ciclos de reloj. Cuando se completa, el principal deja de alternar la señal del reloj y, por lo general, anula la selección del secundario.
Si se utiliza un solo subdispositivo, el pin CS puede fijarse en la lógica baja si el sub lo permite. Con varios subdispositivos, una configuración multipunto requiere una señal CS independiente del principal para cada subdispositivo, mientras que una configuración en cadena solo requiere un CS señal.
Cada sub del bus que no haya sido seleccionado debe ignorar el reloj de entrada y las señales MOSI. Y para evitar la contención en MISO, los subs no seleccionados deben usar la salida tristate. Los subs que aún no son tristate necesitarán buffers tristate externos para asegurar esto.
Polaridad y fase del reloj
Además de configurar la frecuencia del reloj, el principal también debe configurar la polaridad y la fase del reloj con respecto a los datos. Motorola nombró estas dos opciones como CPOL y CPHA (para clock polararity y clock phase) respectivamente, una convención que la mayoría de los proveedores también han adoptado.

El diagrama de tiempo de SPI que se muestra se describe con más detalle a continuación:
- La CPOL representa la polaridad del reloj. Las polaridades se pueden convertir con un sencillo inversor.
- SCLKCPOL=0 es un reloj que se hunde en la lógica baja tensión.
- SCLKCPOL=1 es un reloj que se hunde en el voltaje lógico alto.
- CPHA representa la fase del ciclo de transmisión de cada bit de datos relativo a SCLK.
- Para CPHA=0:
- El primer bit de datos se emite inmediatamente cuando CS activa.
- Los bits posteriores se producen cuando transiciones SCLK a su nivel de tensión ocioso.
- El muestreo ocurre cuando transiciones SCLK desde su nivel de tensión ocioso.
- Para CPHA=1:
- El primer bit de datos se emite en el primer reloj de SCLK después CS activa.
- Los bits posteriores se producen cuando transiciones SCLK desde su nivel de tensión ocioso.
- El muestreo ocurre cuando transiciones SCLK a su nivel de tensión ocioso.
- La conversión entre estas dos fases no es trivial.
- Nota: Las señales MOSI y MISO generalmente son estables (en sus puntos de recepción) para el ciclo medio hasta que comience el ciclo de transmisión del próximo bit, por lo que los dispositivos principales y sub del SPI pueden mostrar datos en diferentes puntos en ese ciclo medio, para flexibilidad, a pesar de la especificación original.
- Para CPHA=0:
Números de modo
Las combinaciones de polaridad y fases son mencionadas por estos " modo SPI " Números con CPOL como bit de orden alto y CPHA como el bit de orden bajo:
| Modo SPI | polaridad del reloj (CPOL) | Fase de bloqueo (CPHA) | Data is shift out on | Los datos se muestra en |
|---|---|---|---|---|
| 0 | 0 | 0 | cayendo SCLK, y cuando CS activado | SCLK |
| 1 | 0 | 1 | SCLK | SCLK |
| 2 | 1 | 0 | SCLK en ascenso, y cuando CS activado | SCLK |
| 3 | 1 | 1 | SCLK | SCLK |
Notas:
- Otra notación comúnmente utilizada representa el modo como un tuple (CPOL, CPHA); por ejemplo, el valor '(0, 1)' indicaría CPOL=0 y CPHA=1.
- En la operación Full Duplex, el dispositivo principal podría transmitir y recibir con diferentes modos. Por ejemplo, podría transmitir en el Modo 0 y recibir en el Modo 1 al mismo tiempo.
- Los diferentes proveedores pueden utilizar diferentes esquemas de nombres, como CKE para el reloj o NCPHA para la inversión de CPHA.
Comunicaciones válidas
Algunos dispositivos subtallos están diseñados para ignorar cualquier comunicación SPI en las que el número de pulsos de reloj es mayor de lo especificado. A otros no les importa, ignorando las entradas adicionales y continuando cambiando el mismo bit de salida. Es común que diferentes dispositivos usen comunicaciones SPI con diferentes longitudes, ya que, por ejemplo, cuando SPI se usa para acceder a una cadena de escaneo de ICS emitiendo una palabra de comando de un tamaño (quizás 32 bits) y luego obtener una Respuesta de un tamaño diferente (quizás 153 bits, uno para cada pin en esa cadena de escaneo).
interrumpe
Las interrupciones están fuera del alcance de SPI; Su uso no está prohibido ni especificado, por lo que puede implementarse opcionalmente.
De lo principal a la sub
microcontroladores configurados como dispositivos submarinos pueden tener soporte de hardware para generar señales de interrupción para sí mismos cuando se reciben palabras de datos o se producen un desbordamiento en un búfer FIFO de recepción, y también puede configurar una rutina de interrupción cuando su línea de entrada seleccionada de chip se extrae baja o alta.
de sub a main
SPI Subs a veces usa una señal fuera de banda (otro cable) para enviar una señal de interrupción a una principal. Los ejemplos incluyen interrupciones de lápiz de sensores de pantalla táctil, alertas de límite térmico de sensores de temperatura, alarmas emitidas por chips de reloj en tiempo real, SDIO e inserciones de audio para un códec de audio. Las interrupciones a Main también pueden falsificarse mediante el uso de encuestas (de manera similar a USB 1.1 y 2.0).
Diseño de software
SPI se presta a un controlador de autobuses " diseño de software. El software para dispositivos adjuntos está escrito para llamar a un controlador de bus " Eso maneja el hardware SPI de bajo nivel real. Esto permite que el código del controlador de dispositivos adjuntos se porte fácilmente a otro hardware o una implementación de software de bits-banging.
bit-banging el protocolo
El seudocódigo a continuación describe una implementación de software (" bit-banging ") del protocolo de SPI como un principal con salida y entrada simultánea. Este psuidocódigo es para CPHA = 0 y CPOL = 0, por lo tanto, SCLK se extrae antes de CS se activa y se ingresan bits en el borde de subida de sclk ' s Mientras que los bits se emiten en el borde caído de SCLK.
- Iniciar el SCLK como bajo y CS como alto
- Tiro CS bajo para seleccionar el sub
- Ámbito para que el número de bytes sea transferido:
- Inicializar
byte_outcon el siguiente byte de salida para transmitir - Loop 8 veces:
- Izquierda-Shift el siguiente bit de salida de
byte_outa MOSI - NOP para el tiempo de configuración del sub
- Tiro SCLK alto
- Izquierda-Shift la próxima entrada de MISO en
byte_in - NOP para el tiempo de espera del sub
- Tiro bajo
- Izquierda-Shift el siguiente bit de salida de
byte_inahora contiene ese byte recién recibido y se puede utilizar como se desee
- Inicializar
- Tiro CS alto para unseleccionar el sub
Bit-banging el protocolo de un sub es similar pero diferente al anterior. Una implementación podría implicar estar ocupado esperando a que CS caiga o desencadenar una rutina de interrupción cuando CS cae, y luego cambia dentro y fuera de los bits cuando el SCLK recibido cambia apropiadamente por el tiempo que sea el tamaño de la transferencia.
Topologías de bus
Aunque la sección de operación anterior se centró en una interfaz básica con un solo sub, SPI puede comunicarse con varios sub mediante configuraciones multipunto, en cadena o de expansión.
Configuración multipunto

En la configuración de bus multipunto, cada secundario tiene su propio CS, y el principal selecciona solo uno a la vez. MISO, SCLK y MOSI son compartidos por todos los dispositivos. Esta es la forma en que SPI se usa normalmente.
Dado que los pines MISO de los subwoofers están conectados entre sí, se requiere que sean pines de tres estados (alta, baja o alta impedancia), donde se debe aplicar la salida de alta impedancia cuando el subwoofer no está seleccionado. Los subdispositivos que no son compatibles con los tres estados se pueden usar en una configuración multipunto agregando un chip de búfer de tres estados controlado por su señal CS. (Dado que solo se necesita probar una sola línea de señal por sub, se puede usar un chip lógico estándar típico que contiene cuatro búferes de tres estados con entradas de compuerta independientes para conectar hasta cuatro subdispositivos a un bus SPI)
Caveat: All CS las señales deben comenzar altas (para indicar que no se seleccionan chips) antes de enviar mensajes de inicialización a cualquier sub, por lo que otros subs no inicializados ignoran los mensajes no dirigidos a ellos. Esto es una preocupación si el principal utiliza los pines de entrada/salida de uso general (GPIO) (que pueden predeterminarse a un estado indefinido) para CS y si el principal utiliza bibliotecas de software separadas para inicializar cada dispositivo. Una solución es configurar todos los GPIO utilizados para CS para producir un alto voltaje Todos subs antes ejecutar código de inicialización de cualquiera de esas bibliotecas de software. Otra solución es añadir un resistor en cada uno CS, para asegurar que todo CS Las señales son inicialmente altas.
Configuración de la cadena de Daisy

Algunos productos que implementan SPI pueden estar conectados en una configuración de cadena DAISY, donde la primera salida de sub ' s está conectada a la segunda entrada de sub ' cuya salida está conectada de nuevo a la entrada principal. Esto fusiona efectivamente los registros de cambio de comunicación individual de cada submarino para formar un solo registro de cambio combinado más grande que cambia los datos a través de la cadena. Esta configuración solo requiere una línea única cs line desde la principal, en lugar de una decoración de texto separada cs línea para cada sub.
Además de usar submarinos específicos de SPI, SPI de cadena de margarita puede incluir registros de desplazamiento discretos para más pines de entradas (por ejemplo, utilizando la serie paralela 74XX165) o salidas (por ejemplo 74xx595) encadenado indefinidamente. Otras aplicaciones que pueden ser potencialmente interoperar con SPI de cadena de margarita incluyen SGPIO, JTAG e I2C.
Configuraciones de expansión
Las configuraciones de expansores usan unidades de direccionamiento controladas por SPI (por ejemplo, decodificadores binarios, demultiplexores o registros de cambio) para agregar seleccionar chips.
Por ejemplo, uno cs se puede usar para transmitir a un demultiplexor controlado por SPI un número de índice que controla sus señales selectas, mientras que otro cs se enruta a través de ese demultiplexor de acuerdo con ese índice para seleccionar el sub.
pros y contras
ventajas
- Comunicación dúplex completa en la versión predeterminada de este protocolo
- Los controladores push-pull (a diferencia del drenaje abierto) proporcionan una integridad de señal relativamente buena y alta velocidad
- mayor rendimiento que I2C o SMBus
- El protocolo de SPI no tiene velocidad máxima del reloj, sin embargo:
- Dispositivos individuales especifican frecuencias de reloj aceptables
- Frecuencia límite de cableado y electrónico
- El protocolo de SPI no tiene velocidad máxima del reloj, sin embargo:
- Flexibilidad total del protocolo para los bits transferidos
- No limitado a símbolos de 8 bits
- Elección arbitraria del tamaño, contenido y propósito del mensaje
- Herraje sencillo e interfacing
- La implementación de hardware para subs sólo requiere un registro de cambio seleccionable
- Los subs usan el reloj principal y por lo tanto no necesitan osciladores de precisión
- Los subs no necesitan una dirección única – a diferencia de I2C o GPIB o SCSI
- Los principales sólo requieren una generación de reloj y CS señales
- Resultados en la implementación simple de software de lavado parcial
- Usa sólo cuatro pines en paquetes IC, y alambres en diseños de tableros o conectores, mucho menos que interfaces paralelas
- En la mayoría de una señal única por dispositivo (CS); todos los demás son compartidos
- Nota: la configuración de la cadena daisy no necesita más de uno compartido CS
- En la mayoría de una señal única por dispositivo (CS); todos los demás son compartidos
- Requisitos de potencia típicamente inferiores a I2C o SMBus debido a menos circuitos (incluidos los resistores de elevación)
- Solo principal significa que no hay arbitraje de autobús (y modos de falla asociados) - a diferencia de CAN-bus
- Los transceptores no son necesarios - a diferencia de CAN-bus
- Las señales son unidireccionales, permitiendo un aislamiento galvánico fácil
- La implementación de hardware para subs sólo requiere un registro de cambio seleccionable
Desventajas
- Requiere más pins en paquetes IC que I2C, incluso en variantes de tres hilos
- Sólo maneja distancias cortas en comparación con RS-232, RS-485 o CAN-bus (aunque la distancia se puede ampliar con el uso de transceptores como RS-422)
- Extensibilidad severamente reducida cuando se requieren múltiples subs utilizando diferentes modos SPI
- El acceso se ralentiza cuando se necesita reinicializar con frecuencia en diferentes modos
- No formal standard
- Así que no es posible validar la conformidad
- Muchas variaciones existentes complican el apoyo
- No hay soporte de protocolo integrado para algunas comodidades:
- No hay control de flujo de hardware por el sub (pero el principal puede retrasar el borde del reloj siguiente para frenar la tasa de transferencia)
- No hay subconocimiento de hardware (el principal podría estar transmitiendo a ninguna parte y no saberlo)
- No hay protocolo de comprobación de errores
- Nada de intercambio caliente (dinamicamente añadiendo nodos)
- Las interrupciones están fuera del alcance del SPI (ver § Interrupts)
aplicaciones
SPI se usa para hablar con una variedad de periféricos, como
- Sensores: temperatura, presión, ADC, pantallas táctiles, controladores de videojuegos
- Dispositivos de control: codecs de audio, potenciómetros digitales, DACs
- Lentes de cámara: Montaje de lentes Canon EF
- Comunicaciones: Ethernet, USB, USART, CAN, IEEE 802.15.4, IEEE 802.11
- Memoria: flash y EEPROMs
- Relojes en tiempo real
- LCD, a veces incluso para gestionar datos de imagen
- Cualquier tarjeta MMC o SD (incluyendo la variante SDIO)
- Registros de cambios para I/O adicionales
Los ahorros en espacio físico y cableado de la placa en comparación con un bus paralelo son significativos y le han otorgado a SPI un papel sólido en los sistemas integrados. Eso es cierto para la mayoría de los procesadores de sistema en un chip, tanto con procesadores de 32 bits de gama alta como los que usan ARM, MIPS o PowerPC como con microcontroladores de gama baja como AVR, PIC y MSP430. Estos chips generalmente incluyen controladores SPI capaces de funcionar en modo principal o secundario. Los controladores AVR programables en el sistema (incluidos los en blanco) se pueden programar mediante SPI.
Los diseños basados en chips o FPGA a veces usan SPI para comunicarse entre componentes internos; Los bienes raíces en el chip pueden ser tan costosos como su primo a bordo. Y para los sistemas de alto rendimiento, los FPGA a veces usan SPI para interactuar como un sub a un host, como un principal a los sensores o para la memoria flash utilizada para arrancar si están basados en SRAM.
La capacidad de dúplex completo hace que SPI sea muy simple y eficiente para aplicaciones principales únicas/subaplicaciones únicas. Algunos dispositivos utilizan el modo dúplex completo para implementar un flujo de datos rápido y eficiente para aplicaciones como audio digital, procesamiento de señales digitales o canales de telecomunicaciones, pero la mayoría de los chips estándar se adhieren a los protocolos de solicitud/respuesta semidúplex.
Variaciones
SPI es un estándar de facto. Sin embargo, la falta de un estándar formal se refleja en una amplia variedad de opciones de protocolo. Algunos dispositivos son solo de transmisión; otros son de solo recepción. Las selecciones de chips a veces son activas-altas en lugar de activas-bajas. Algunos dispositivos envían primero el bit menos significativo. Los niveles de señal dependen completamente de los chips involucrados. Y aunque el protocolo SPI básico no tiene códigos de comando, cada dispositivo puede definir su propio protocolo de códigos de comando. Algunas variaciones son menores o informales, mientras que otras tienen un documento de definición oficial y pueden considerarse protocolos separados pero relacionados.
Definición original
Did you mean:Motorola in 1983 listed three 6805 8-bit microcomputers that have an integrated "Serial Peripheral Interface#34;, whose functionality is described in a 1984 manual.
AN991
Motorola's 1987 Application Node AN991 'Uso de la interfaz periférica en serie para comunicarse entre varias microcomputadoras' (ahora bajo NXP, última revisión 2002) sirve informalmente como el "oficial" documento de definición para SPI.
Variaciones de tiempo
Algunos dispositivos tienen variaciones de tiempo con respecto a los modos CPOL/CPHA de Motorola. El envío de datos de secundario a principal puede usar el borde de reloj opuesto como principal a secundario. Los dispositivos a menudo requieren tiempo de inactividad de reloj adicional antes del primer reloj o después del último, o entre un comando y su respuesta.
Algunos dispositivos tienen dos relojes, uno para leer datos y otro para transmitirlos al dispositivo. Muchos de los relojes de lectura se ejecutan desde la línea de selección de chip.
Tamaño de transmisión
Son comunes los diferentes tamaños de palabras de transmisión. Muchos chips SPI solo admiten mensajes que son múltiplos de 8 bits. Dichos chips no pueden interoperar con los protocolos JTAG o SGPIO, o cualquier otro protocolo que requiera mensajes que no sean múltiplos de 8 bits.
Sin selección de chip
Did you mean:Some devices don'to use chip select, and instead manage protocol state machine entry/exit using other methods.
Conectores
Cualquiera que necesite un conector externo para SPI define el suyo propio o utiliza otra conexión estándar como: UEXT, Pmod, varios conectores JTAG, socket para tarjetas Secure Digital, etc.
Control de flujo
Algunos dispositivos requieren una señal de control de flujo adicional de secundario a principal, que indica cuándo los datos están listos. Esto conduce a un protocolo de 5 cables en lugar de los 4 habituales. Una señal de listo o habilitar suele estar activa en nivel bajo y debe habilitarse en puntos clave como después de los comandos o entre palabras. Sin dicha señal, es posible que las velocidades de transferencia de datos deban reducirse significativamente, o que los protocolos deban tener bytes ficticios insertados, para acomodar el peor de los casos para el tiempo de respuesta secundaria. Los ejemplos incluyen iniciar una conversión ADC, direccionar la página correcta de la memoria flash y procesar un comando suficiente para que el firmware del dispositivo pueda cargar la primera palabra de la respuesta. (Muchas redes SPI no admiten esa señal directamente y, en cambio, dependen de retrasos fijos).
SPI segura
SafeSPI es un estándar de la industria para SPI en aplicaciones automotrices. Su enfoque principal es la transmisión de datos de sensores entre diferentes dispositivos.
Modificaciones de alta fiabilidad
En entornos eléctricamente ruidosos, dado que SPI tiene pocas señales, puede ser económico reducir los efectos del ruido de modo común adaptando SPI para usar señalización diferencial de bajo voltaje. Otra ventaja es que los dispositivos controlados pueden diseñarse para retroceder para probar la integridad de la señal.
Controladores SPI inteligentes
Una interfaz periférica serie en cola (QSPI; diferente pero con la misma abreviatura que Quad SPI descrito en § Quad SPI) es un tipo del controlador SPI que utiliza una cola de datos para transferir datos a través de un bus SPI. Tiene un modo envolvente que permite transferencias continuas hacia y desde la cola con solo atención intermitente de la CPU. En consecuencia, los periféricos aparecen ante la CPU como dispositivos paralelos mapeados en memoria. Esta función es útil en aplicaciones como el control de un convertidor A/D. Otras características programables en Queued SPI son las selecciones de chips y la duración/retraso de la transferencia.
Los controladores SPI de diferentes proveedores admiten diferentes conjuntos de funciones; tales colas de acceso directo a la memoria (DMA) no son infrecuentes, aunque pueden estar asociadas con motores DMA separados en lugar del propio controlador SPI, como el que usa el puerto serie con búfer multicanal (MCBSP). La mayoría de los controladores principales SPI integran soporte para hasta cuatro selecciones de chips, aunque algunos requieren que las selecciones de chips se administren por separado a través de líneas GPIO.
Did you mean:Note that Queued SPI is different from Quad SPI, and some processors even confusingly allow a single "QSPI#34; interface to operate in either quad or queued mode!
Microalambre
Microwire, a menudo escrito como μWire, es esencialmente un predecesor de SPI y una marca comercial de National Semiconductor. Es un subconjunto estricto de SPI: semidúplex y utiliza el modo 0 de SPI. Los chips de microcable tienden a necesitar velocidades de reloj más lentas que las versiones más nuevas de SPI; tal vez 2 MHz frente a 20 MHz. Algunos chips Microwire también admiten un modo de tres hilos.
Microhilo/Plus
Microwire/Plus es una mejora de Microwire y cuenta con comunicación full-duplex y compatibilidad con los modos SPI 0 y 1. No se especificó ninguna mejora en la velocidad del reloj serial.
Tres hilos
Las variantes de tres hilos de SPI restringidas a un modo semidúplex utilizan una sola línea de datos bidireccional llamada SISO (salida secundaria/entrada secundaria) o MOMI (salida principal/entrada principal) en lugar de las dos líneas unidireccionales de SPI. (MOSI y MISO). Los tres cables tienden a usarse para piezas de menor rendimiento, como EEPROM pequeñas que se usan solo durante el inicio del sistema, ciertos sensores y Microwire. Pocos controladores SPI son compatibles con este modo, aunque se puede modificar fácilmente en el software.
Doble SPI
Para los casos en los que no se usa la naturaleza de dúplex completo de SPI, una extensión usa ambos pines de datos en una configuración de dúplex medio para enviar dos bits por ciclo de reloj. Por lo general, se envía un byte de comando solicitando una respuesta en modo dual, después de lo cual la línea MOSI se convierte en SIO0 (E/S serial 0) y transporta bits pares, mientras que la línea MISO se convierte en SIO1 y transporta bits impares. Los datos aún se transmiten primero con el bit más significativo, pero SIO1 transporta los bits 7, 5, 3 y 1 de cada byte, mientras que SIO0 transporta los bits 6, 4, 2 y 0.
Esto es particularmente popular entre las ROM SPI, que tienen que enviar una gran cantidad de datos, y viene en dos variantes:
- Dual read ordena el envío y dirección desde el principal en modo único, y devuelve los datos en modo dual.
- Los comandos Dual I/O envían el comando en modo individual, luego envían la dirección y devuelven los datos en modo dual.
SPI cuádruple
Quad SPI (QSPI; diferente pero tiene la misma abreviatura que Queued-SPI descrito en § Controladores SPI inteligentes) va más allá del SPI dual, agregando dos líneas de E/S más (SIO2 y SIO3) y envía 4 bits de datos por ciclo de reloj. Nuevamente, se solicita mediante comandos especiales, que habilitan el modo cuádruple después de que el comando en sí se envía en modo único.
- SQI Tipo 1
- Mandos enviados en línea única pero direcciones y datos enviados en cuatro líneas
- SQI Tipo 2
- Mandos y direcciones enviados en una sola línea pero datos enviados/recibidos en cuatro líneas
QPI/SQI
Además de ampliar SPI cuádruple, algunos dispositivos admiten un "todo cuádruple" Modo en el que toda la comunicación tiene lugar a través de 4 líneas de datos, incluidos los comandos. Esto se denomina de diversas formas "QPI" (que no debe confundirse con Intel QuickPath Interconnect) o "E/S cuádruple en serie" (SQI)
Esto requiere programar un bit de configuración en el dispositivo y requiere cuidado después del reinicio para establecer la comunicación.
Doble velocidad de datos
Además de utilizar varias líneas para E/S, algunos dispositivos aumentan la velocidad de transferencia mediante el uso de transmisión de doble velocidad de datos.
JTAG
Aunque existen algunas similitudes entre SPI y el protocolo JTAG (IEEE 1149.1-2013), no son intercambiables. JTAG está diseñado específicamente para proporcionar acceso de prueba confiable a los pines de E/S desde un controlador externo con parámetros de sesgo y retardo de señal menos precisos, mientras que SPI tiene muchas aplicaciones variadas. Si bien no es estrictamente una interfaz sensible al nivel, el protocolo JTAG admite la recuperación de infracciones de configuración y retención entre dispositivos JTAG al reducir la velocidad del reloj o cambiar los ciclos de trabajo del reloj. En consecuencia, la interfaz JTAG no está diseñada para admitir velocidades de datos extremadamente altas.
SGPIO
SGPIO es esencialmente otra pila de aplicaciones (incompatible) para SPI diseñada para actividades particulares de administración de backplane. SGPIO usa mensajes de 3 bits.
Interfaz periférica serie mejorada de Intel
Intel ha desarrollado un sucesor de su bus Low Pin Count (LPC) al que llama bus Enhanced Serial Peripheral Interface (eSPI). Intel tiene como objetivo reducir la cantidad de pines requeridos en las placas base y aumentar el rendimiento en comparación con LPC, reducir el voltaje de trabajo a 1,8 voltios para facilitar los procesos de fabricación de chips más pequeños, permitir que los periféricos eSPI compartan dispositivos flash SPI con el host (el bus LPC no permitía concentradores de firmware para ser utilizados por los periféricos LPC), canalizar los pines fuera de banda anteriores a través de eSPI y permitir que los diseñadores de sistemas compensen el costo y el rendimiento.
Did you mean:A SPI bus can either be shared with SPI devices to save pins or be separate from an SPI bus to allow more performance, especially when eSPI devices need to use SPI flash devices.
Este estándar define una señal de alerta n.° que utiliza un sub eSPI para solicitar el servicio del principal. En un diseño orientado al rendimiento o un diseño con solo un sub eSPI, cada sub eSPI tendrá su pin Alert# conectado a un pin Alert# en el principal eSPI que está dedicado a cada sub, lo que permite que el eSPI principal otorgue baja latencia servicio, porque eSPI principal sabrá qué eSPI secundario necesita servicio y no necesitará sondear todos los subs para determinar qué dispositivo necesita servicio. En un diseño económico con más de un sub eSPI, todos los pines Alert# de los subs están conectados a un pin Alert# en el eSPI principal en una conexión OR cableada, lo que requiere que el principal sondee todos los subs para determinar cuál necesitan servicio cuando uno o más periféricos que necesitan servicio bajan la señal Alert#. Solo después de que todos los dispositivos hayan recibido servicio, la señal de Alerta # se elevará debido a que ninguno de los subs de eSPI necesita servicio y, por lo tanto, bajará la señal de Alerta #.
Este estándar permite a los diseñadores utilizar comunicaciones de 1, 2 o 4 bits a velocidades de 20 a 66 MHz para que los diseñadores puedan equilibrar aún más el rendimiento y el coste.
Todas las comunicaciones que estaban fuera de banda de LPC, como la entrada/salida de propósito general (GPIO) y el Bus de administración del sistema (SMBus), se canalizan a través de eSPI a través de ciclos de cable virtual y ciclos de mensajes fuera de banda, respectivamente, en orden. para eliminar esos pines de los diseños de la placa base usando eSPI.
Este estándar admite ciclos de memoria estándar con longitudes de 1 byte a 4 kilobytes de datos, ciclos de memoria cortos con longitudes de 1, 2 o 4 bytes que tienen mucha menos sobrecarga en comparación con los ciclos de memoria estándar y ciclos de E/S con longitudes de 1, 2 o 4 bytes de datos que también tienen una sobrecarga baja. Esto reduce significativamente la sobrecarga en comparación con el bus LPC, donde todos los ciclos, excepto el ciclo de lectura del concentrador de firmware de 128 bytes, gastan más de la mitad de todo el rendimiento y el tiempo del bus en sobrecarga. El ciclo de memoria estándar permite una longitud de entre 1 byte y 4 kilobytes para permitir que su mayor sobrecarga se amortice en una transacción grande. Los subs eSPI pueden iniciar versiones principales de bus de todos los ciclos de memoria. Los ciclos de E/S principal del bus, que fueron introducidos por la especificación del bus LPC, y el DMA de estilo ISA, incluida la variante de 32 bits introducida por la especificación del bus LPC, no están presentes en eSPI. Por lo tanto, los ciclos de memoria principal del bus son los únicos DMA permitidos en este estándar.
Los subs de eSPI pueden usar eSPI main como un proxy para realizar operaciones flash en un sub de memoria flash SPI estándar en nombre del sub de eSPI solicitante.
También se agrega el direccionamiento de memoria de 64 bits, pero solo se permite cuando no hay una dirección equivalente de 32 bits.
El conjunto de chips Intel Z170 se puede configurar para implementar este bus o una variante del bus LPC que no tiene la capacidad DMA de estilo ISA y tiene una frecuencia de reloj baja de 24 MHz en lugar de los 33 MHz estándar.
Herramientas de desarrollo
Ordenadores de placa única
Did you mean:Single-board computers may provide pin access to SPI hardware units. For instance, the Raspberry Pi 's J8 header exposed at least two SPI units that can be used via Linux drivers or python.
Adaptadores USB a SPI
Existe una serie de adaptadores USB que permiten que una PC de escritorio o un teléfono inteligente con USB se comunique con chips SPI (por ejemplo, FT221xs). Se utilizan para sistemas integrados, chips (FPGA, ASIC y SoC) y pruebas, programación y depuración de periféricos. Muchos de ellos también brindan capacidades de creación de scripts o programación (por ejemplo, Visual Basic, C/C++, VHDL).
Los parámetros clave de SPI son: la frecuencia máxima admitida para la interfaz serial, la latencia de comando a comando y la longitud máxima de los comandos SPI. Actualmente, es posible encontrar adaptadores SPI en el mercado que admitan interfaces seriales de hasta 100 MHz, con una longitud de acceso prácticamente ilimitada.
Al ser el protocolo SPI un estándar de facto, algunos adaptadores de host SPI también tienen la capacidad de admitir otros protocolos más allá del SPI tradicional de 4 hilos (por ejemplo, compatibilidad con el protocolo quad-SPI u otro protocolo serial personalizado que se deriva de SPI).
Analizadores de protocolo
Los analizadores lógicos son herramientas que recopilan, marcan la hora, analizan, decodifican, almacenan y ven las formas de onda de alta velocidad para ayudar a depurar y desarrollar. La mayoría de los analizadores lógicos tienen la capacidad de decodificar señales de bus SPI en datos de protocolo de alto nivel con etiquetas legibles por humanos.
Osciloscopios
La mayoría de los proveedores de osciloscopios ofrecen soporte opcional para el análisis del protocolo SPI (SPI de 2, 3 y 4 hilos) con disparo. Se puede acceder a las señales SPI a través de canales analógicos (y/o a través de canales digitales en osciloscopios de señal mixta).
Nombres alternativos
La especificación SPI original usaba la terminología histórica de "Master" para identificar el dispositivo principal y el "Slave" para identificar los dispositivos subordinados. Desde entonces, muchos han usado nombres alternativos para cada uno de los cuatro nombres de señales originales:
- Reloj de serie. Alternativas:
- SCK, SCLK, CLK, SCL
- MOSI: "Master" Out → "Slave" In. Ahora se puede leer como "Main" Out "Sub" En, o puede utilizar estas alternativas:
- SIMO, MTSR, SPID - corresponden a MOSI en dispositivos principales y sub, se conectan entre sí
- SDI, DI, DIN, SI, SDA - en dispositivos sub-sólo; Varias abreviaturas para "Serial" "Data" "In". Se conecta a MOSI (o nombres alternativos) en los principales
- SDO, DO, DOUT, SO - en dispositivos sólo principales; Varias abreviaturas para "Serial" "Data" "Out". se conecta a MOSI (o nombres alternativos) en sub
- COPI, PICO para "periferal y controlador", o COTI para "controlador" y "target"
- MISO: "Master" En ← "Slave" Out. Ahora se puede leer como "Main" En "Sub" Out, o puede utilizar estas alternativas:
- SOMI, MRST, SPIQ - corresponden a MISO tanto en dispositivos principales como sub, se conectan entre sí
- SDO, DO, DOUT, SO - on sub-only devices; connects to MISO (or alternative names) on main
- SDI, DI, DIN, SI - solo en dispositivos principales; se conecta a MISO (o nombres alternativos) en sub
- CIPO, POCI o CITO
- SS: "Slave" Select (la misma funcionalidad como Chip Select). Alternativas:
- SS, SS, SSEL, NSS, /SS, SS# (su selecto)
- CS, CS (chip select)
- CSN (chip select/enable)
- CE