La interfaz periférica serie ( SPI ) es un estándar de facto (con muchas variantes ) para la comunicación serie síncrona , utilizada principalmente en sistemas embebidos para la comunicación por cable de corta distancia entre circuitos integrados .
SPI sigue una arquitectura maestro-esclavo [ 1 ] , donde un dispositivo (denominado maestro, líder, controlador, principal, etc.) coordina la comunicación con uno o más dispositivos (denominados esclavo, seguidor, objetivo, sub...) mediante el control de las señales de reloj y selección de chip . Dado que no existe un estándar formal, algunos fabricantes introducen dispositivos con la capacidad de cambiar de rol sobre la marcha.
La especificación original de Motorola (de principios de la década de 1980) utiliza cuatro señales lógicas , también conocidas como líneas o cables, para admitir la comunicación dúplex completa . A veces se le denomina bus serie de cuatro cables para contrastarlo con las variantes de tres cables , que son semidúplex , y con los buses serie I²C y 1-Wire de dos cables .
Entre las aplicaciones típicas se incluyen la interconexión de microcontroladores con chips periféricos para tarjetas Secure Digital , pantallas de cristal líquido , convertidores analógico-digitales y digital-analógicos , memoria flash y EEPROM , y diversos chips de comunicación.
Aunque SPI es una interfaz serial síncrona, [ 2 ] es diferente de la Interfaz Serial Síncrona (SSI). SSI emplea señalización diferencial y proporciona solo un único canal de comunicación simplex .
Operación

Generalmente, SPI tiene cuatro señales lógicas. Las variantes pueden usar nombres diferentes o tener señales diferentes.
La señal MOSI del maestro se conecta a la señal MOSI del esclavo. La señal MISO del esclavo se conecta a la señal MISO del maestro.
Cada dispositivo utiliza internamente un registro de desplazamiento para la comunicación en serie, que en conjunto forman un búfer circular entre chips .
Para admitir el bus multipunto, los dispositivos esclavos deben usar salidas triestado, de modo que su señal MISO se vuelva de alta impedancia (desconectada eléctricamente) cuando el dispositivo no esté seleccionado. Los esclavos sin salidas triestado no pueden compartir una línea MISO con otros esclavos sin usar un búfer triestado externo.
Transmisión de datos


Para iniciar la comunicación, el maestro SPI primero selecciona el dispositivo con el que desea comunicarse bajando su señal SS . (La barra sobre SS indica que es una señal activa en bajo , 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 por ejemplo para una conversión analógica a digital, el maestro debe esperar al menos ese período de tiempo antes de emitir ciclos de reloj. [ nota 2 ]
Durante cada ciclo de reloj SPI, se produce la transmisión dúplex completa de un solo bit. El maestro envía un bit por la línea MOSI mientras que el esclavo envía otro por la línea MISO, y luego cada uno lee el bit entrante correspondiente. Esta secuencia se mantiene incluso cuando solo se pretende la transferencia de datos en una dirección.
La transmisión mediante un único esclavo requiere un registro de desplazamiento en el maestro y otro en el esclavo, ambos con un tamaño de palabra determinado (por ejemplo, 8 bits). Si bien las transmisiones suelen constar de palabras de ocho bits, también son comunes otros tamaños de palabra; por ejemplo, palabras de dieciséis bits para controladores de pantalla táctil o códecs de audio, como el TSC2101 de Texas Instruments, o palabras de doce bits para muchos convertidores digital-analógico o analógico-digital.
Los datos se suelen enviar con el bit más significativo (MSB) primero, pero la especificación original incluye una función LSBFE ("LSB-First Enable") para controlar si los datos se transfieren con el bit menos significativo (LSB) o con el bit más significativo (MSB) primero. En el flanco del reloj, tanto el maestro como el esclavo envían un bit a su contraparte. En el siguiente flanco del reloj, cada receptor muestrea el bit transmitido y lo almacena en el registro de desplazamiento como el nuevo bit menos significativo. Una vez que se han enviado y recibido todos los bits, el maestro y el esclavo han intercambiado los valores de sus registros. Si se necesita 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 finaliza, el maestro deja de conmutar la señal de reloj y, por lo general, deselecciona al esclavo.
Si se utiliza un único dispositivo esclavo, su pin SS puede fijarse a nivel lógico bajo si el esclavo lo permite. Con varios dispositivos esclavos, una configuración multidrop requiere una señal SS independiente del maestro para cada dispositivo esclavo, mientras que una configuración en cadena solo requiere una señal SS .
Todo esclavo en el bus que no haya sido seleccionado debe ignorar las señales de reloj de entrada y MOSI. Para evitar la contención en MISO, los esclavos no seleccionados deben usar la salida triestado . Los esclavos que no sean triestado necesitarán búferes triestado externos para garantizar esto. [ 3 ]
Polaridad y fase del reloj
Además de configurar la frecuencia del reloj, el maestro también debe configurar la polaridad y la fase del reloj con respecto a los datos. Motorola [ 4 ] [ 5 ] denominó a estas dos opciones CPOL y CPHA (por polaridad del reloj y fase del reloj ) respectivamente, una convención que la mayoría de los proveedores también han adoptado.

El diagrama de temporización SPI que se muestra se describe con más detalle a continuación:
- CPOL representa la polaridad del reloj. Las polaridades se pueden convertir con un simple inversor .
- SCLK CPOL=0 es un reloj que permanece inactivo a un voltaje lógico bajo .
- SCLK CPOL=1 es un reloj que permanece inactivo a un voltaje lógico alto.
- CPHA representa la fase del ciclo de transmisión de cada bit de datos en relación con SCLK.
- Para CPHA=0:
- El primer bit de datos se emite inmediatamente cuando se activa SS .
- Los bits subsiguientes se emiten cuando SCLK pasa a su nivel de voltaje de reposo.
- El muestreo se produce cuando SCLK transita desde su nivel de voltaje de reposo.
- Para CPHA=1:
- El primer bit de datos se emite en el primer flanco de reloj de SCLK después de que se active SS .
- Los bits subsiguientes se emiten cuando SCLK pasa de su nivel de voltaje de reposo.
- El muestreo se produce cuando SCLK pasa a su nivel de voltaje de reposo.
- La conversión entre estas dos fases no es trivial.
- Las señales MOSI y MISO suelen ser estables (en sus puntos de recepción) durante el semiciclo hasta que comienza el ciclo de transmisión del siguiente bit, por lo que los dispositivos maestro y esclavo SPI pueden muestrear datos en diferentes puntos de ese semiciclo, para mayor flexibilidad, a pesar de la especificación original.
- Para CPHA=0:
Números de moda
Las combinaciones de polaridad y fases se denominan mediante estos números de "modo SPI", donde CPOL es el bit de orden superior y CPHA el bit de orden inferior:
Notas:
- Otra notación comúnmente utilizada representa el modo como una tupla (CPOL, CPHA); por ejemplo, el valor '(0, 1)' indicaría CPOL=0 y CPHA=1.
- En el modo dúplex completo, el dispositivo maestro puede transmitir y recibir en diferentes modos. Por ejemplo, puede transmitir en el modo 0 y recibir en el modo 1 simultáneamente.
- Los distintos proveedores pueden utilizar diferentes esquemas de nomenclatura, como CKE para el flanco de reloj o NCPHA para la inversión de CPHA.
Comunicaciones válidas
Algunos dispositivos esclavos están diseñados para ignorar cualquier comunicación SPI en la que el número de pulsos de reloj sea mayor al especificado. Otros no tienen inconveniente, ignorando las entradas adicionales y continuando con el mismo bit de salida. Es común que distintos dispositivos utilicen comunicaciones SPI de distinta longitud, como, por ejemplo, cuando se utiliza SPI para acceder a la cadena de exploración de un circuito integrado mediante el envío de una palabra de comando de un tamaño (quizás 32 bits) y la obtención de una respuesta de un tamaño diferente (quizás 153 bits, uno por cada pin de esa cadena de exploración).
Interrumpe
Las interrupciones quedan fuera del ámbito de SPI; su uso no está prohibido ni especificado, por lo que pueden implementarse de forma opcional.
De amo a esclavo
Los microcontroladores configurados como dispositivos esclavos pueden tener soporte de hardware para generar señales de interrupción para sí mismos cuando se reciben palabras de datos o se produce un desbordamiento en un búfer FIFO de recepción , [ 6 ] y también pueden establecer una rutina de interrupción cuando su línea de entrada de selección de esclavo se pone en bajo o en alto.
De esclavo a amo
En ocasiones, los dispositivos esclavos SPI utilizan una señal fuera de banda (otro cable) para enviar una señal de interrupción al maestro. Algunos ejemplos son las interrupciones por pulsación del lápiz táctil , las alertas de límite térmico , las alarmas emitidas por chips de reloj en tiempo real , SDIO [ nota 3 ] y las inserciones de conectores de audio para un códec de audio . También se pueden simular interrupciones al maestro mediante sondeo (de forma similar a USB 1.1 y 2.0 ).
Topologías de bus
Si bien la sección de funcionamiento anterior se centró en una interfaz básica con un único esclavo, SPI puede comunicarse con varios esclavos mediante configuraciones multidrop, en cadena o de expansor.
Configuración multidrop

En la configuración de bus multipunto , cada esclavo tiene su propio SS , y el maestro selecciona solo uno a la vez. MISO, SCLK y MOSI son compartidos por todos los dispositivos. Así es como se usa normalmente SPI.
Dado que los pines MISO de los esclavos están conectados entre sí, deben ser pines triestado (alta, baja o alta impedancia), donde la salida de alta impedancia debe aplicarse cuando el esclavo no está seleccionado. Los dispositivos esclavos que no admiten triestado pueden utilizarse en una configuración multidrop añadiendo un chip buffer triestado controlado por su señal SS . [ 3 ] (Dado que solo se necesita una línea de señal triestada por esclavo, un chip lógico estándar típico que contiene cuatro buffers triestado con entradas de puerta independientes puede utilizarse para conectar hasta cuatro dispositivos esclavos a un bus SPI).
Advertencia: Todas las señales SS deben comenzar en alto (para indicar que no hay esclavos seleccionados) antes de enviar mensajes de inicialización a cualquier esclavo, de modo que otros esclavos no inicializados ignoren los mensajes que no estén dirigidos a ellos. Esto es un problema si el maestro utiliza pines de entrada/salida de propósito general (GPIO) (que pueden tener un estado indefinido por defecto) para SS y si el maestro utiliza bibliotecas de software separadas para inicializar cada dispositivo. Una solución es configurar todos los GPIO utilizados para SS para que emitan un voltaje alto para todos los esclavos antes de ejecutar el código de inicialización de cualquiera de esas bibliotecas de software. Otra solución es agregar una resistencia pull-up en cada SS para asegurar que todas las señales SS estén inicialmente en alto. [ 3 ]
Configuración en cadena

Algunos productos que implementan SPI pueden conectarse en una configuración en cadena , donde la salida del primer esclavo se conecta a la entrada del segundo, y así sucesivamente con los esclavos subsiguientes, hasta el último esclavo, cuya salida se conecta de nuevo a la entrada del maestro. Esto fusiona eficazmente los registros de desplazamiento de comunicación individuales de cada esclavo para formar un único registro de desplazamiento combinado de mayor tamaño que transfiere los datos a través de la cadena. Esta configuración solo requiere una línea SS del maestro, en lugar de una línea SS independiente para cada esclavo. [ 7 ]
Además de utilizar esclavos específicos de SPI, el SPI en cadena puede incluir registros de desplazamiento discretos para más pines de entrada (por ejemplo, utilizando el registro de entrada paralela y salida en serie 74).xx165) [ 8 ] o salidas (por ejemplo, usando la entrada en serie y la salida en paralelo 74xx595) [ 9 ] encadenados indefinidamente. Otras aplicaciones que potencialmente pueden interoperar con SPI en cadena incluyen SGPIO , JTAG , [ 10 ] e I 2 C .
Configuraciones del expansor
Las configuraciones de expansores utilizan unidades de direccionamiento controladas por SPI (por ejemplo, decodificadores binarios , demultiplexores o registros de desplazamiento) para agregar selecciones de chip.
Por ejemplo, una señal SS puede utilizarse para transmitir a un demultiplexor controlado por SPI un número de índice que controla sus señales de selección, mientras que otra señal SS se enruta a través de ese demultiplexor según ese índice para seleccionar el esclavo deseado. [ 11 ]
Ventajas y desventajas
Ventajas
- Comunicación dúplex completa en la versión predeterminada de este protocolo.
- Los controladores push-pull (a diferencia de los de drenaje abierto ) proporcionan una integridad de señal relativamente buena y alta velocidad.
- Mayor rendimiento que I²C o SMBus.
- El protocolo SPI no tiene una velocidad de reloj máxima, sin embargo:
- Cada dispositivo especifica las frecuencias de reloj aceptables.
- El cableado y la electrónica limitan la frecuencia.
- El protocolo SPI no tiene una velocidad de reloj máxima, sin embargo:
- Flexibilidad de protocolo completa para los bits transferidos
- No se limita a símbolos de 8 bits.
- Elección arbitraria del tamaño, el contenido y el propósito del mensaje.
- Hardware e interfaz sencillos
- La implementación de hardware para los esclavos solo requiere un registro de desplazamiento seleccionable.
- Los esclavos utilizan el reloj del maestro y, por lo tanto, no necesitan osciladores de precisión.
- Los esclavos no necesitan una dirección única , a diferencia de I²C , GPIB o SCSI.
- Los maestros solo requieren adicionalmente la generación de señales de reloj y SS.
- Da como resultado una implementación de software sencilla mediante manipulación de bits.
- Utiliza solo cuatro pines en los encapsulados de circuitos integrados y cables en los diseños de placas o conectores, muchos menos que las interfaces paralelas.
- Como máximo una señal única por dispositivo ( SS ); todas las demás son compartidas.
- La configuración en cadena no necesita más de un SS compartido.
- Como máximo una señal única por dispositivo ( SS ); todas las demás son compartidas.
- Generalmente requieren menos energía que I²C o SMBus debido a que tienen menos circuitos (incluidas las resistencias pull-up).
- Un único maestro significa que no hay arbitraje de bus (y los modos de fallo asociados), a diferencia del bus CAN.
- No se necesitan transceptores, a diferencia del bus CAN.
- Las señales son unidireccionales, lo que permite un fácil aislamiento galvánico.
- La implementación de hardware para los esclavos solo requiere un registro de desplazamiento seleccionable.
Desventajas
- Requiere más pines en los encapsulados de circuitos integrados que I²C , incluso en variantes de tres cables.
- Solo admite distancias cortas en comparación con RS-232 , RS-485 o CAN-bus (aunque la distancia se puede extender con el uso de transceptores como RS-422 ).
- La extensibilidad se reduce considerablemente cuando se requieren varios esclavos que utilicen diferentes modos SPI.
- El acceso se ralentiza cuando el maestro necesita reinicializarse con frecuencia en diferentes modos.
- No existe un estándar formal.
- Por lo tanto, validar la conformidad no es posible.
- Muchas variantes existentes complican el soporte.
- No ofrece soporte de protocolo integrado para algunas funciones prácticas:
- El esclavo no tiene control de flujo por hardware (pero el maestro puede retrasar el siguiente flanco de reloj para reducir la velocidad de transferencia).
- No hay confirmación del esclavo de hardware (el maestro podría estar transmitiendo a ninguna parte sin saberlo).
- No hay protocolo de comprobación de errores
- No se permite el intercambio en caliente (agregar nodos dinámicamente).
- Las interrupciones están fuera del alcance de SPI (véase § Interrupciones ).
Aplicaciones
SPI se utiliza para comunicarse con una variedad de periféricos, como
- Sensores: temperatura , presión , ADC , pantallas táctiles , controladores de videojuegos
- Dispositivos de control: códecs de audio , potenciómetros digitales , convertidores digital -analógico (DAC).
- Objetivos de cámara: Montura de objetivo Canon EF
- Memoria: flash y EEPROM
- Cualquier tarjeta MMC o SD (incluida la variante SDIO [ nota 3 ] )
- Relojes en tiempo real
- Pantallas LCD , a veces incluso para gestionar datos de imagen.
- Registros de desplazamiento para E/S adicionales [ 8 ] [ 9 ]
El ahorro en espacio en la placa y en el cableado en comparación con un bus paralelo es significativo, lo que ha consolidado la posición de SPI en los sistemas embebidos. Esto se aplica a la mayoría de los procesadores de sistema en un chip , tanto a los procesadores de 32 bits de gama alta, como los que utilizan ARM , MIPS o PowerPC , como a los microcontroladores de gama baja, como AVR , PIC y MSP430 . Estos chips suelen incluir controladores SPI capaces de funcionar en modo maestro o esclavo. Los controladores AVR programables en el sistema (incluidos los que no tienen memoria) pueden programarse mediante SPI. [ 12 ]
Los diseños basados en chips o FPGA a veces utilizan SPI para la comunicación entre componentes internos; el espacio en el chip puede ser tan costoso como el de la placa base. Además, en sistemas de alto rendimiento, las FPGA a veces utilizan SPI para interactuar como esclavas con un host, como maestras con sensores o para la memoria flash utilizada para el arranque si se basan en SRAM.
La capacidad full-duplex hace que SPI sea muy simple y eficiente para aplicaciones de un solo maestro/un solo esclavo. Algunos dispositivos utilizan el modo full-duplex 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 comerciales se ciñen a los protocolos de solicitud/respuesta half-duplex.
Variaciones
Las implementaciones de SPI presentan una amplia variedad de protocolos. Algunos dispositivos solo transmiten; otros solo reciben. En ocasiones, la selección de esclavos es activa en alto en lugar de activa en bajo. Algunos dispositivos envían primero el bit menos significativo. Los niveles de señal dependen completamente de los chips involucrados. Si bien 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 cuentan con un documento de definición oficial y pueden considerarse protocolos separados pero relacionados.
Definición original
Motorola en 1983 enumeró [ 13 ] tres microcomputadoras 6805 de 8 bits que tienen una "Interfaz Periférica Serie" integrada, cuya funcionalidad se describe en un manual de 1984. [ 14 ]
AN991
El nodo de aplicación AN991 de Motorola de 1987 "Uso de la interfaz periférica serie para comunicarse entre múltiples microcomputadoras" [ 15 ] (ahora bajo NXP , última revisión 2002 [ 5 ] ) sirve informalmente como el documento de definición "oficial" para SPI.
Variaciones de sincronización
Algunos dispositivos presentan variaciones de temporización respecto a los modos CPOL/CPHA de Motorola. El envío de datos del esclavo al maestro puede utilizar el flanco de reloj opuesto al del maestro al esclavo. Los dispositivos suelen requerir un tiempo de inactividad adicional antes del primer pulso 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 funcionan desde la línea de selección de esclavo.
Tamaño de la transmisión
Es común que existan diferentes tamaños de palabra 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 , ni con ningún otro protocolo que requiera mensajes que no sean múltiplos de 8 bits.
No se selecciona ningún esclavo
Algunos dispositivos no utilizan la selección de esclavo y, en su lugar, gestionan la entrada/salida de la máquina de estados del protocolo mediante otros métodos.
Conectores
Cualquier persona que necesite un conector externo para SPI define el suyo propio o utiliza otra conexión estándar como: UEXT , Pmod , varios conectores JTAG , zócalo para tarjeta Secure Digital , etc.
Control de flujo
Algunos dispositivos requieren una señal de control de flujo adicional del esclavo al maestro, que indica cuándo los datos están listos. Esto implica un protocolo de 5 hilos en lugar del habitual de 4. Dicha señal de disponibilidad o habilitación suele ser activa en bajo y debe activarse en puntos clave, como después de los comandos o entre palabras. Sin esta señal, la velocidad de transferencia de datos podría reducirse significativamente, o los protocolos podrían necesitar la inserción de bytes ficticios para compensar el peor escenario posible en el tiempo de respuesta del esclavo. Algunos ejemplos incluyen iniciar una conversión ADC, acceder a la página correcta de la memoria flash y procesar un comando lo suficientemente largo como para que el firmware del dispositivo pueda cargar la primera palabra de la respuesta. (Muchos maestros SPI no admiten esta señal directamente y, en su lugar, utilizan retardos fijos).
SafeSPI
SafeSPI [ 16 ] es un estándar industrial 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 con ruido eléctrico, 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 . [ 17 ] Otra ventaja es que los dispositivos controlados pueden diseñarse para realizar bucles de retroalimentación para probar la integridad de la señal. [ 18 ]
Controladores SPI inteligentes
Una interfaz periférica serie en cola ( QSPI ; diferente pero con la misma abreviatura que Quad SPI descrita en § Quad SPI ) es un tipo de controlador SPI que utiliza una cola de datos para transferir datos a través de un bus SPI. [ 19 ] Tiene un modo de bucle que permite transferencias continuas hacia y desde la cola con atención intermitente por parte de la CPU. En consecuencia, los periféricos aparecen ante la CPU como dispositivos paralelos mapeados en memoria . Esta característica es útil en aplicaciones como el control de un convertidor A/D . Otras características programables en Queued SPI son la selección de chips y la longitud/retardo de transferencia.
Los controladores SPI de diferentes proveedores admiten diferentes conjuntos de características; estas colas de acceso directo a memoria (DMA) no son infrecuentes, aunque pueden estar asociadas con motores DMA separados en lugar del propio controlador SPI, como el utilizado por el puerto serie con búfer multicanal ( MCBSP ). [ nota 4 ] La mayoría de los controladores maestros SPI integran soporte para hasta cuatro selecciones de esclavos, [ nota 5 ] aunque algunos requieren que las selecciones de esclavos se gestionen por separado a través de líneas GPIO.
Tenga en cuenta que SPI en cola es diferente de SPI cuádruple , y algunos procesadores incluso permiten, de forma confusa, que una única interfaz "QSPI" funcione en modo cuádruple o en cola. [ 20 ]
De tres cables
Las variantes de SPI de tres hilos, restringidas al modo semidúplex, utilizan una única línea de datos bidireccional denominada SISO (salida/entrada de esclavo) o MOMI (salida/entrada de maestro), en lugar de las dos líneas unidireccionales de SPI (MOSI y MISO). El modo de tres hilos se suele utilizar para componentes de menor rendimiento, como pequeñas memorias EEPROM que se usan solo durante el arranque del sistema, ciertos sensores y Microwire . Pocos controladores SPI admiten este modo, aunque se puede implementar fácilmente mediante software.
Extensiones de ancho de bits
SPI dual
En los casos en que no se utiliza la comunicación dúplex completa de SPI, una extensión utiliza ambos pines de datos en una configuración semidúplex para enviar dos bits por ciclo de reloj. Normalmente, se envía un byte de comando solicitando una respuesta en modo dual, tras lo cual la línea MOSI se convierte en SIO0 (E/S serie 0) y transmite los bits pares, mientras que la línea MISO se convierte en SIO1 y transmite los bits impares. Los datos se siguen transmitiendo con el bit más significativo primero, pero SIO1 transmite los bits 7, 5, 3 y 1 de cada byte, mientras que SIO0 transmite 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: [ 21 ] [ 22 ]
- La lectura dual envía el comando y la dirección desde el maestro en modo simple y devuelve los datos en modo dual.
- La función de E/S dual envía el comando en modo simple y, a continuación, envía la dirección y los datos de respuesta en modo dual.
SPI cuádruple
Quad SPI ( QSPI ; diferente pero con la misma abreviatura que Queued-SPI descrito en § Controladores SPI inteligentes ) va más allá de Dual SPI, añadiendo dos líneas de E/S más (SIO2 y SIO3) y enviando 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 se envíe en modo simple. [ 21 ] [ 22 ]
- SQI Tipo 1
- Los comandos se envían en una sola línea, pero las direcciones y los datos se envían en cuatro líneas.
- SQI Tipo 2
- Los comandos y las direcciones se envían por una sola línea, pero los datos se envían/reciben por cuatro líneas.
QPI/SQI
Ampliando aún más el SPI cuádruple, algunos dispositivos admiten un modo "cuádruple para todo" donde toda la comunicación se realiza a través de 4 líneas de datos, incluidos los comandos. [ 23 ] Esto se denomina de diversas maneras "QPI" [ 22 ] (que no debe confundirse con Intel QuickPath Interconnect ) o "E/S cuádruple serial" (SQI) [ 24 ]
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 múltiples líneas para E/S, algunos dispositivos aumentan la velocidad de transferencia mediante la transmisión de datos a doble velocidad . [ 25 ] [ 26 ]
SGPIO
SGPIO es esencialmente otra pila de aplicaciones (incompatible) para SPI, diseñada para actividades específicas de gestión de la placa base. SGPIO utiliza mensajes de 3 bits.
Interfaz periférica serie mejorada de Intel
Intel ha desarrollado un sucesor para su bus de bajo número de pines (LPC), al que denomina bus de interfaz periférica serial mejorada ( eSPI ). Intel busca reducir el número de pines necesarios en las placas base y aumentar el rendimiento en comparación con LPC, reducir el voltaje de funcionamiento a 1,8 voltios para facilitar procesos de fabricación de chips más pequeños, permitir que los periféricos eSPI compartan dispositivos de memoria flash SPI con el host (el bus LPC no permitía que los periféricos LPC utilizaran concentradores de firmware), canalizar los pines fuera de banda anteriores a través de eSPI y permitir a los diseñadores de sistemas encontrar un equilibrio entre coste y rendimiento. [ 27 ] [ 28 ]
Un bus eSPI puede compartirse con dispositivos SPI para ahorrar pines o separarse de un bus SPI para permitir un mayor rendimiento, especialmente cuando los dispositivos eSPI necesitan usar dispositivos flash SPI. [ 27 ]
Este estándar define una señal Alert# que un esclavo eSPI utiliza para solicitar servicio al maestro. En un diseño orientado al rendimiento o con un solo esclavo eSPI, cada esclavo tendrá su pin Alert# conectado a un pin Alert# del maestro eSPI dedicado a cada esclavo, lo que permite al maestro eSPI ofrecer un servicio de baja latencia, ya que sabrá qué esclavo eSPI necesita servicio y no tendrá que consultar a todos los esclavos para determinar qué dispositivo lo necesita. En un diseño económico con más de un esclavo eSPI, todos los pines Alert# de los esclavos están conectados a un único pin Alert# del maestro eSPI mediante una conexión OR cableada , lo que requiere que el maestro consulte a todos los esclavos para determinar cuáles necesitan servicio cuando la señal Alert# se pone a nivel bajo debido a uno o más periféricos que necesitan servicio. Solo después de que todos los dispositivos hayan recibido servicio, la señal Alert# se pondrá a nivel alto debido a que ninguno de los esclavos eSPI necesita servicio y, por lo tanto, pone la señal Alert# a nivel bajo. [ 27 ]
Este estándar permite a los diseñadores utilizar comunicaciones de 1 bit, 2 bits o 4 bits a velocidades de 20 a 66 MHz para permitirles aún más equilibrar el rendimiento y el coste. [ 27 ]
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), deben tunelizarse a través de eSPI mediante ciclos de cableado virtual y ciclos de mensajes fuera de banda respectivamente, con el fin de eliminar esos pines de los diseños de placas base que utilizan eSPI. [ 27 ]
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, consumen más de la mitad del rendimiento y el tiempo total 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 esclavos eSPI pueden iniciar versiones maestras del bus de todos los ciclos de memoria. Los ciclos de E/S maestras 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 del maestro de bus son el único DMA permitido en este estándar. [ 27 ]
Los esclavos eSPI pueden usar el maestro eSPI como proxy para realizar operaciones de flasheo en un esclavo de memoria flash SPI estándar en nombre del esclavo eSPI solicitante. [ 27 ]
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. [ 27 ]
El chipset Intel Z170 se puede configurar para implementar este bus o una variante del bus LPC que carece de su capacidad DMA de estilo ISA y está reducida a 24 MHz en lugar de los 33 MHz estándar . [ 29 ]
El bus eSPI también es adoptado por los chipsets AMD Ryzen .
Interoperabilidad con otros estándares
Microalambre
Microwire, [ 30 ] a menudo escrito μWire , es esencialmente un predecesor de SPI y una marca registrada de National Semiconductor . Es un subconjunto estricto de SPI: semidúplex y utiliza el modo SPI 0. Los chips Microwire tienden a necesitar frecuencias de reloj más bajas que las versiones más recientes de SPI; quizás 2 MHz frente a 20 MHz. Algunos chips Microwire también admiten un modo de tres hilos .
Microwire/Plus
Microwire/Plus [ 31 ] es una mejora de Microwire y cuenta con comunicación dúplex completa y soporte para los modos SPI 0 y 1. No se especificó ninguna mejora en la velocidad del reloj serie.
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 fiable a los pines de E/S desde un controlador externo con parámetros de retardo y desviación de señal menos precisos, mientras que SPI tiene muchas aplicaciones diversas. Si bien no es estrictamente una interfaz sensible al nivel, el protocolo JTAG admite la recuperación de violaciones de configuración y retención entre dispositivos JTAG reduciendo la frecuencia del reloj o cambiando sus ciclos de trabajo. En consecuencia, la interfaz JTAG no está diseñada para admitir velocidades de datos extremadamente altas. [ 32 ]
Herramientas de desarrollo
Ordenadores de placa única
Los ordenadores de placa única pueden proporcionar acceso a los pines de las unidades de hardware SPI. Por ejemplo, el conector J8 de la Raspberry Pi expone al menos dos unidades SPI que se pueden utilizar mediante controladores Linux o Python .
Adaptadores USB a SPI
Existen varios adaptadores USB que permiten que un ordenador de sobremesa o un smartphone con puerto USB se comunique con chips SPI (por ejemplo, basados en CH341A/B [ 33 ] o FT 221xs [ 34 ] ). Se utilizan para probar, programar y depurar sistemas embebidos, chips ( FPGA , ASIC y SoC ) y periféricos. Muchos de ellos también ofrecen capacidades de scripting o programación (por ejemplo, Visual Basic , C / C++ , VHDL ) y pueden utilizarse con programas de código abierto como flashrom , IMSProg, SNANDer o avrdude para la programación de memoria flash , EEPROM , gestor de arranque y BIOS .
Los parámetros clave de SPI son: la frecuencia máxima admitida para la interfaz serie, la latencia entre comandos y la longitud máxima de los comandos SPI. Actualmente, es posible encontrar adaptadores SPI en el mercado que admiten interfaces serie de hasta 100 MHz, con una longitud de acceso prácticamente ilimitada.
Dado que el protocolo SPI es 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 derive de SPI [ 35 ] ).
Analizadores de protocolo
Los analizadores lógicos son herramientas que recopilan, registran la hora , analizan, decodifican, almacenan y visualizan las formas de onda de alta velocidad para facilitar la depuración y el desarrollo. La mayoría de los analizadores lógicos tienen la capacidad de decodificar las señales del bus SPI en datos de protocolo de alto nivel con etiquetas legibles para el usuario.
Osciloscopios
Las formas de onda SPI se pueden ver en canales analógicos (y/o a través de canales digitales en osciloscopios de señal mixta ). [ 36 ] La mayoría de los fabricantes de osciloscopios ofrecen soporte opcional para el análisis del protocolo SPI (tanto SPI de 2, 3 y 4 hilos) con disparo.
Terminología alternativa
Se utilizan diversas abreviaturas alternativas para las cuatro señales SPI comunes. (Esta sección omite las barras superiores que indican nivel bajo activo).
- Reloj serie
- SCK, SCLK, CLK, SCL
- Maestro fuera, esclavo dentro (MOSI)
- SIMO, MTSR, SPID: corresponden a MOSI tanto en los dispositivos maestros como en los esclavos, y se conectan entre sí.
- SDI, DI, DIN, SI, SDA - en dispositivos esclavos; varias abreviaturas para datos serie en ; se conecta a MOSI en el maestro
- SDO, DO, DOUT, SO: en dispositivos maestros; varias abreviaturas para salida de datos en serie ; se conecta a MOSI en el dispositivo esclavo.
- COPI, PICO para periférico y controlador , [ 37 ] [ 38 ] o COTI para controlador y objetivo [ 39 ]
- Amo entra, esclavo sale (MISO)
- SOMI, MRST, SPIQ: corresponden a MISO tanto en los dispositivos maestro como esclavo, y se conectan entre sí.
- SDO, DO, DOUT, SO: en dispositivos esclavos; se conecta a MISO en el maestro.
- SDI, DI, DIN, SI: en los dispositivos maestros; se conecta a MISO en el dispositivo esclavo.
- CIPO, POCI, [ 37 ] [ 38 ] o CITO [ 39 ]
- Selección de esclavo (SS)
- Selección de chip (CS)
- CE (habilitación del chip)
- Histórico: SSEL, NSS, /SS, SS#
Microchip utiliza host y cliente , aunque mantiene las abreviaturas MOSI y MISO. [ 40 ]
Véase también
Notas
- ↑ La primera mención definitiva de una "Interfaz Periférica Serie" en los archivos de manuales de Motorola de Bitsavers data de 1983 (véase § Definición original ). Si bien algunas fuentes en la web afirman que Motorola introdujo la SPI cuando se lanzó el 68000 en 1979, muchas de ellas parecen ser especulaciones o mera conjeturas, y el manual del Motorola 68000 de 1983 no menciona la "Interfaz Periférica Serie", por lo que la supuesta fecha de 1979 no parece ser información fiable. Por favor, añada una fecha de diseño específica solo si dispone de una fuente definitiva de Motorola de esa época.
- ↑ Algunos esclavos requieren un flanco descendente de la señal de selección de esclavo para iniciar una acción. Un ejemplo es el convertidor analógico-digital Maxim MAX1242, que inicia la conversión con una transición de alto a bajo.
- 1 2 No confundir con la línea SDIO (E/S de datos serie) de la implementación semidúplex de SPI, a veces también llamada SPI de "3 hilos". Aquí, por ejemplo, MOSI (a través de una resistencia) y MISO (sin resistencia) de un maestro se conectan a la línea SDIO de un esclavo.
- ↑ Como por ejemplo con la interfaz de puerto serie multicanal, o McSPI, utilizada en los chips OMAP de Texas Instruments. ( https://www.ti.com/product/OMAP3530 )
- ↑ Como el controlador SPI en los chips Atmel AT91, como el at91sam9G20, que es mucho más simple que el McSPI de TI.
Referencias
- ↑ Stoicescu, Alin (2018). "Primeros pasos con SPI" (PDF) . Microchip .
- ↑ "¿Qué es la interfaz serie síncrona (SSI)?" . Consultado el 28 de enero de 2015 .
- 1 2 3 Mejor diseño de bus SPI en 3 pasos
- ↑ Guía de bloques SPI v3.06; Motorola/Freescale/NXP; 2003.
- 1 2 "AN991/D: Uso de la interfaz periférica serie para la comunicación entre múltiples microordenadores" (PDF) . NXP . 2004 [1994]. Archivado (PDF) del original el 4 de abril de 2023. Recuperado el 14 de octubre de 2021 .
- ↑ "Guía de referencia de la interfaz periférica serie TMS320x281x" . Texas Instruments . 2002. págs. 16–17 .
- ↑ Nota de aplicación 3947 de Maxim-IC: "Conexión en cadena de dispositivos SPI"
- 1 2 Gammon, Nick (23-03-2013). "Foro Gammon : Electrónica : Microprocesadores : Uso de un registro de desplazamiento de entrada 74HC165" . Foro Gammon . Archivado del original el 29-07-2023 . Recuperado el 03-08-2023 .
- 1 2 Gammon, Nick (31-01-2012). "Foro Gammon : Electrónica : Microprocesadores : Uso de un registro de desplazamiento de salida 74HC595 como expansor de puertos" . Foro Gammon . Archivado del original el 14-07-2023 . Recuperado el 03-08-2023 .
- ↑ Interfaces , 1977, págs. 80, 84
- ↑ "Multiplexor de control serie amplía las selecciones de chips SPI" (PDF) . Premier Farnell . 1 de julio de 2001. Archivado del original (PDF) el 19 de agosto de 2019.
- ↑ "AVR910 - Programación en sistema" (PDF) . Archivado del original (PDF) el 2 de marzo de 2011.
- ↑ componentes :: motorola :: dataBooks :: 1983 Motorola Microprocesador de 8 bits y datos periféricos .
- ↑ motorola :: dataBooks :: Datos del microordenador de un solo chip Motorola de 1984 .
- ↑ "Uso de la interfaz periférica serie para la comunicación entre múltiples microordenadores" (PDF) . Bitsavers .
- ↑ SafeSPI.org
- ↑ "Transmisión de SPI sobre interfaces LVDS" (PDF) . Texas Instruments . Consultado el 14 de febrero de 2021 .
- ↑ "Ejemplo de bucle de retorno maestro SPI" . Nordic Semiconductor . Consultado el 14 de febrero de 2021 .
- ↑ "Freescale Semiconductor, Inc. - QSM - Módulo serie en cola - Manual de referencia" (PDF) . NXP . 1996 [1991]. Archivado del original (PDF) el 24 de agosto de 2019.
- ↑ "Quad-SPI ofrece transmisión de datos paralela rápida" . Cadence Design Systems . 11 de enero de 2023. Archivado del original el 1 de junio de 2023. Consultado el 30 de junio de 2023 .
- 1 2 "W25Q16JV Memoria flash serial de 3 V y 16 Mbit con SPI dual/cuádruple" (PDF) (hoja de datos). Revisión D. Winbond . 12 de agosto de 2016. Recuperado el 10 de febrero de 2017 .
- 1 2 3 "D25LQ64 1.8V Uniform Sector Dual and Quad SPI Flash" (PDF) (hoja de datos). Versión 0.1. GigaDevice. 11 de febrero de 2011. Archivado del original (PDF) el 12 de febrero de 2017. Recuperado el 10 de febrero de 2017 .
- ↑ "QuadSPI flash: Modo Quad SPI vs. Modo QPI" . Foros de la comunidad NXP . Diciembre de 2014. Consultado el 10 de febrero de 2016 .
- ↑ "SST26VF032B / SST26VF032BA Memoria Flash de E/S Cuádruple Serie (SQI) de 32 Mbit y 2,5 V/3,0 V" (PDF) (Hoja de datos). Versión E. Microchip, Inc. 2017. Consultado el 10 de febrero de 2017 .
- ↑ Patterson, David (mayo de 2012). "Actualizaciones del módulo de interfaz periférica serie cuádruple (QuadSPI)" (PDF) (nota de aplicación). Freescale Semiconductor . Archivado del original (PDF) el 4 de agosto de 2016. Recuperado el 21 de septiembre de 2016 .
- ↑ Pell, Rich (13 de octubre de 2011). "Mejora del rendimiento mediante memoria flash NOR SPI-DDR" . EDN .
- 1 2 3 4 5 6 7 8 Especificación base de la interfaz de interfaz periférica serie mejorada (eSPI) (para plataformas cliente y servidor) (PDF) (Informe). Revisión 1.0. Intel. Enero de 2016. Número de documento 327432-004 . Recuperado el 5 de febrero de 2017 .
- ↑ Especificación de la interfaz Enhanced Serial Peripheral Interface (eSPI) (para plataformas cliente) (PDF) (Informe). Revisión 0.6. Intel. Mayo de 2012. Número de documento 327432-001EN . Consultado el 5 de febrero de 2017 .
- ↑ "Hoja de datos del chipset Intel Serie 100, familia PCH, vol. 1" (PDF) . Consultado el 15 de abril de 2015 .
- ↑ Interfaz serie MICROWIRE Nota de aplicación AN-452 de National Semiconductor
- ↑ Interfaz serie MICROWIRE/PLUS para la familia COP800 Nota de aplicación AN-579 de National Semiconductor
- ↑ IEEE 1149.1-2013
- ↑ "Controlador de puente USB CH341 con UART, SPI e I2C" . WCH . Consultado el 27 de febrero de 2025 .
- ↑ "Convertidor USB a SPI" . FTDI . 2 de agosto de 2020. Consultado el 14 de febrero de 2021 .
- ↑ SPI Storm – Adaptador de host de protocolo serie con soporte para protocolos serie personalizados, Byte Paradigm.
- ↑ "Activación y decodificación del protocolo I²C y SPI del N5391B para osciloscopios Infiniium" .
- 1 2 "SPI; OSHWA" . Archivado del original el 27-01-2021 . Recuperado el 02-06-2023 .
- 1 2 "Descripción general del producto: Conversión de voltajes para SPI" (PDF) . Archivado del original (PDF) el 17 de marzo de 2022.
- 1 2 "Dispositivos de interfaz periférica serial (SPI)" . NXP . Archivado del original el 1 de junio de 2023. Recuperado el 22 de julio de 2023 .
- ↑ Stoicescu, Alin. "Primeros pasos con la interfaz periférica serial (SPI)" . Microchip Technology . Archivado del original el 21 de diciembre de 2023. Consultado el 21 de diciembre de 2023 .
Enlaces externos
- Intel eSPI (Interfaz periférica serie mejorada)
- Tutorial de SPI
- Interfaces
- buses informáticos
- Estándares de hardware informático
- Autobuses en serie
