La interfaz periférica en serie ( SPI ) es un estándar de facto (con muchas variantes) para la comunicación en serie sincrónica , utilizada principalmente en sistemas integrados para la comunicación por cable de corta distancia entre circuitos integrados .
SPI sigue una arquitectura maestro-esclavo , [1] denominada aquí principal-sub , [nota 2] [nota 3] donde un [nota 4] dispositivo principal organiza la comunicación con uno o más dispositivos secundarios (periféricos) al controlar las señales de reloj y selección de chip .
La especificación original de Motorola (de principios de los años 1980) utiliza cuatro señales lógicas , también conocidas como líneas o cables, para admitir la comunicación full duplex . A veces se lo denomina bus serial de cuatro cables para contrastarlo con las variantes de tres cables que son half duplex y con los buses seriales de dos cables I²C y 1-Wire .
Las aplicaciones típicas incluyen la interfaz de microcontroladores 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.
Aunque SPI es una interfaz serial sincrónica, [2] es diferente de la Interfaz serial sincrónica (SSI). SSI emplea señalización diferencial y proporciona solo un único canal de comunicación simplex .
Por lo general, SPI tiene cuatro señales lógicas. Las variaciones pueden utilizar nombres diferentes o tener señales diferentes. Los términos históricos se muestran entre paréntesis.
MOSI en una salida principal a MOSI en un subwoofer. MISO en una salida secundaria a MISO en una salida principal.
Cada dispositivo utiliza internamente un registro de desplazamiento para la comunicación serial, que en conjunto forman un búfer circular entre chips .
Los subdispositivos deben utilizar salidas triestado de modo que su señal MISO se vuelva de alta impedancia (desconectada eléctricamente) cuando el dispositivo no esté seleccionado. Los subdispositivos sin salida triestado no pueden compartir una línea MISO con otros subdispositivos sin utilizar un búfer triestado externo.
Para iniciar la comunicación, el SPI principal selecciona primero un subdispositivo bajando su CS . (Nota: la barra sobre 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 por ejemplo para una conversión de analógico a digital, el controlador principal debe esperar al menos ese período de tiempo antes de emitir ciclos de reloj. [nota 5]
Durante cada ciclo de reloj SPI, se produce una 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 solo se pretende una transferencia de datos unidireccional.
La transmisión mediante un único subreceptor (figura 1) implica un registro de desplazamiento en el receptor principal y un registro de desplazamiento en el subreceptor, ambos de un tamaño de palabra determinado (p. ej., 8 bits), [nota 6] conectados en una topología de anillo virtual . Los datos se desplazan normalmente hacia fuera con el bit más significativo (MSB) primero. [nota 7] En el flanco del reloj, tanto el receptor principal como el subreceptor desplazan un bit hacia fuera a su homólogo. 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 todos los bits se han desplazado hacia fuera y hacia dentro, el receptor principal y el subreceptor han intercambiado valores de registro. Si es necesario intercambiar más datos, los registros de desplazamiento se vuelven a cargar y el proceso se repite. La transmisión puede continuar durante cualquier número de ciclos de reloj. Cuando se completa, el receptor principal deja de alternar la señal de reloj y, normalmente, deselecciona el subreceptor.
Si se utiliza un único subdispositivo, su pin CS puede fijarse en lógica baja si el subdispositivo lo permite. Con varios subdispositivos, una configuración multipunto requiere una señal CS independiente del dispositivo principal para cada subdispositivo, mientras que una configuración en cadena solo requiere una señal CS .
Todos los subs del bus que no hayan sido seleccionados deben ignorar el reloj de entrada y las señales MOSI. Y para evitar conflictos en MISO, los subs no seleccionados deben utilizar la salida triestado . Los subs que aún no sean triestado necesitarán buffers triestado externos para garantizar esto. [3]
Además de configurar la frecuencia del reloj, el controlador principal también debe configurar la polaridad y la fase del reloj con respecto a los datos. Motorola [4] [5] denominó estas dos opciones como CPOL y CPHA (por clock pol arity y clock phase ) respectivamente, una convención que la mayoría de los proveedores también han adoptado .
El diagrama de sincronización SPI que se muestra se describe con más detalle a continuación:
Las combinaciones de polaridad y fases se denominan mediante estos números de "modo SPI", con CPOL como bit de orden superior y CPHA como bit de orden inferior:
Notas:
Algunos subdispositivos están diseñados para ignorar cualquier comunicación SPI en la que el número de pulsos de reloj sea mayor que el especificado. A otros no les importa, ignoran las entradas adicionales y continúan desplazando el mismo bit de salida. Es común que diferentes dispositivos utilicen comunicaciones SPI con diferentes longitudes, como, por ejemplo, cuando se utiliza SPI para acceder a la cadena de escaneo de un CI mediante la emisión de una palabra de comando de un tamaño (quizás 32 bits) y luego se obtiene una respuesta de un tamaño diferente (quizás 153 bits, uno para cada pin en esa cadena de escaneo).
Las interrupciones están fuera del alcance de SPI; su uso no está prohibido ni especificado y, por lo tanto, pueden implementarse de forma opcional.
Los microcontroladores configurados como subdispositivos 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 configurar una rutina de interrupción cuando su línea de entrada de selección de chip se pone baja o alta.
Los subwoofers SPI a veces usan una señal fuera de banda (otro cable) para enviar una señal de interrupción a un circuito principal. Algunos ejemplos incluyen interrupciones por pulsación de lápiz desde sensores de pantalla táctil , alertas de límite térmico desde sensores de temperatura , alarmas emitidas por chips de reloj en tiempo real , SDIO [nota 8] e inserciones de conector de audio para un códec de audio . Las interrupciones al circuito principal también se pueden falsificar mediante sondeo (de manera similar a USB 1.1 y 2.0 ).
SPI se presta a un diseño de software de "controlador de bus". El software para dispositivos conectados se escribe para llamar a un "controlador de bus" que maneja el hardware SPI de bajo nivel real. Esto permite que el código del controlador para dispositivos conectados se transfiera fácilmente a otro hardware o a una implementación de software que utilice bits .
El pseudocódigo que se muestra a continuación describe una implementación de software (" bit-banging ") del protocolo SPI como una señal principal con entrada y salida simultáneas. Este pseudocódigo es para CPHA=0 y CPOL=0, por lo que SCLK se pone a nivel bajo antes de que se active CS y los bits se introducen en el flanco ascendente de SCLK mientras que los bits se emiten en el flanco descendente de SCLK.
byte_out
con el siguiente byte de salida a transmitirbyte_out
MOSIbyte_in
byte_in
Ahora contiene ese byte recibido recientemente y se puede usar como se desee.El protocolo de bit banging de un sub es similar pero diferente al anterior. Una implementación podría implicar una espera intensa a que el CS caiga o activar una rutina de interrupción cuando el CS cae, y luego cambiar de entrada y salida de bits cuando el SCLK recibido cambia de manera apropiada durante el tiempo que dure la transferencia.
Aunque la sección de operación anterior se centró en una interfaz básica con un solo sub, SPI puede comunicarse con múltiples subs usando configuraciones multidrop, en cadena o expansor.
En la configuración de bus multipunto , cada sub 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 se utiliza normalmente SPI.
Dado que los pines MISO de los subwoofers están conectados entre sí, se requiere que sean pines triestado (alta, baja o alta impedancia), donde la salida de alta impedancia se debe aplicar cuando el subwoofer no está seleccionado. Los subdispositivos que no admiten triestado se pueden utilizar en una configuración multidrop agregando un chip de búfer triestado controlado por su señal CS . [3] (Dado que solo se necesita triestado una sola línea de señal por subwoofer, se puede utilizar un chip lógico estándar típico que contiene cuatro búferes triestado con entradas de compuerta independientes para interconectar hasta cuatro subdispositivos a un bus SPI)
Advertencia: todas las señales CS deben comenzar altas (para indicar que no se han seleccionado chips) antes de enviar mensajes de inicialización a ningún sub, de modo que otros subs no inicializados ignoren los mensajes que no estén dirigidos a ellos. Esto es un problema si el dispositivo principal utiliza pines de entrada/salida de propósito general (GPIO) (que pueden tener un estado predeterminado indefinido) para CS y si el dispositivo principal utiliza bibliotecas de software independientes para inicializar cada dispositivo. Una solución es configurar todos los GPIO utilizados para CS para que emitan un voltaje alto para todos los subs 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 CS para garantizar que todas las señales CS sean inicialmente altas. [3]
Algunos productos que implementan SPI pueden conectarse en una configuración en cadena , donde la salida del primer subwoofer se conecta a la entrada del segundo subwoofer, y así sucesivamente con los subwoofers subsiguientes, hasta el subwoofer final, cuya salida se conecta nuevamente a la entrada del principal. Esto fusiona efectivamente los registros de desplazamiento de comunicación individuales de cada subwoofer para formar un único registro de desplazamiento combinado más grande que desplaza los datos a través de la cadena. Esta configuración solo requiere una única línea CS del principal, en lugar de una línea CS separada para cada subwoofer. [7]
Además de utilizar subs específicos de SPI, el SPI en cadena puede incluir registros de desplazamiento discretos para más pines de entradas (por ejemplo, utilizando la salida serial de entrada paralela 74 xx165) [8] o salidas (por ejemplo, utilizando la salida paralela de entrada serial 74 xx595) [9] encadenadas indefinidamente. Otras aplicaciones que potencialmente pueden interoperar con SPI en cadena incluyen SGPIO , JTAG , [10 ] e I 2 C.
Las configuraciones de expansor utilizan unidades de direccionamiento controladas por SPI (por ejemplo, decodificadores binarios , demultiplexores o registros de desplazamiento) para agregar selecciones de chip.
Por ejemplo, un CS se puede utilizar para transmitir a un demultiplexor controlado por SPI un número de índice que controla sus señales de selección, mientras que otro CS se enruta a través de ese demultiplexor de acuerdo con ese índice para seleccionar el sub deseado. [11]
SPI se utiliza para comunicarse con una variedad de periféricos, como
Los ahorros en espacio en la placa y cableado en comparación con un bus paralelo son significativos y le han otorgado a SPI un papel sólido en los sistemas integrados. Esto 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 utilizan ARM , MIPS o PowerPC como con microcontroladores de gama baja como AVR , PIC y MSP430 . Estos chips suelen incluir controladores SPI capaces de funcionar en modo principal o secundario. Los controladores AVR programables en el sistema (incluidos los en blanco) se pueden programar utilizando SPI. [12]
Los diseños basados en chips o FPGA a veces utilizan SPI para comunicarse entre componentes internos; el espacio en el chip puede ser tan costoso como su primo incorporado. Y para sistemas de alto rendimiento, los FPGA a veces utilizan SPI para interactuar como subwoofer con un host, como principal con sensores o para la memoria flash utilizada para el arranque si están basados en SRAM.
La capacidad de dúplex completo hace que la SPI sea muy sencilla y eficiente para aplicaciones con un solo circuito principal y un solo circuito secundario. 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 comerciales se adhieren a los protocolos de solicitud/respuesta semidúplex.
Las implementaciones de SPI tienen una amplia variedad de variaciones de protocolo. Algunos dispositivos son de solo transmisión, mientras que otros son de solo recepción. Las selecciones de chip a veces son activas en alto en lugar de activas en bajo. Algunos dispositivos envían primero el bit menos significativo. Los niveles de señal dependen completamente de los chips involucrados. Y 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 tienen un documento de definición oficial y pueden considerarse protocolos separados pero relacionados.
En 1983, Motorola enumeró [13] tres microcomputadoras 6805 de 8 bits que tienen una "Interfaz Periférica Serial" integrada, cuya funcionalidad se describe en un manual de 1984. [14]
El nodo de aplicación AN991 de Motorola de 1987 "Uso de la interfaz periférica en serie para comunicarse entre múltiples microcomputadoras" [15] (ahora bajo NXP , última revisión en 2002 [5] ) sirve informalmente como el documento de definición "oficial" para SPI.
Algunos dispositivos tienen variaciones de tiempo con respecto a los modos CPOL/CPHA de Motorola. El envío de datos desde el subsistema al principal puede utilizar el flanco de reloj opuesto al principal al subsistema. Los dispositivos suelen requerir 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 funcionan desde la línea de selección del chip.
Son comunes los distintos tamaños de palabra de transmisión. Muchos chips SPI solo admiten mensajes que sean 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.
Algunos dispositivos no utilizan selección de chip y, en su lugar, gestionan la entrada/salida de la máquina de estados del protocolo utilizando otros métodos.
Cualquiera que necesite un conector externo para SPI define su propio conector o utiliza otra conexión estándar como: UEXT , Pmod , varios conectores JTAG , zócalo de tarjeta Secure Digital , etc.
Algunos dispositivos requieren una señal de control de flujo adicional del subwoofer al principal, que indica cuándo los datos están listos. Esto conduce a un protocolo de 5 cables en lugar de los 4 habituales. Dicha señal de listo o habilitado a menudo es activa-baja y debe habilitarse en puntos clave, como después de los comandos o entre palabras. Sin dicha señal, es posible que sea necesario reducir significativamente las velocidades de transferencia de datos o que los protocolos deban tener bytes ficticios insertados para adaptarse al peor caso para el tiempo de respuesta del subwoofer. Los ejemplos incluyen iniciar una conversión ADC, direccionar la página correcta de la memoria flash y procesar una cantidad suficiente de un comando 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).
SafeSPI [16] es un estándar industrial para SPI en aplicaciones automotrices. Su principal objetivo es la transmisión de datos de sensores entre diferentes dispositivos.
En entornos con ruido eléctrico, dado que SPI tiene pocas señales, puede resultar económico reducir los efectos del ruido de modo común adaptando SPI para utilizar señalización diferencial de bajo voltaje . [17] Otra ventaja es que los dispositivos controlados pueden diseñarse para realizar un bucle de retorno para probar la integridad de la señal. [18]
Una interfaz periférica serial 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 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 característica es útil en aplicaciones como el control de un convertidor A/D . Otras características programables en Queued SPI son las selecciones de chip 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 poco comunes, aunque pueden estar asociadas con motores DMA separados en lugar del controlador SPI en sí, como el utilizado por el puerto serie con búfer multicanal ( MCBSP ). [nota 11] La mayoría de los controladores principales SPI integran soporte para hasta cuatro selecciones de chip, [nota 12] aunque algunos requieren que las selecciones de chip se administren por separado a través de líneas GPIO.
Tenga en cuenta que Queued SPI es diferente de Quad SPI , y algunos procesadores incluso permiten, de manera confusa, que una única interfaz "QSPI" funcione en modo cuádruple o en cola. [20]
Microwire, [21] 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 velocidades de reloj más lentas que las versiones SPI más nuevas; quizás 2 MHz frente a 20 MHz. Algunos chips Microwire también admiten un modo de tres cables.
Microwire/Plus [22] es una mejora de Microwire y cuenta con comunicación full-duplex y soporte para los modos SPI 0 y 1. No hubo ninguna mejora especificada en la velocidad del reloj serial.
Las variantes de tres cables de SPI restringidas a un modo semidúplex utilizan una única línea de datos bidireccional denominada SISO (sub out/sub in) o MOMI (main out/main in) en lugar de las dos líneas unidireccionales de SPI (MOSI y MISO). Los tres cables suelen utilizarse para componentes de menor rendimiento, como EEPROM pequeñas que se utilizan solo durante el arranque del sistema, determinados sensores y Microwire. Pocos controladores SPI admiten este modo, aunque se puede modificar fácilmente mediante software.
En los casos en los que no se utiliza la naturaleza full-duplex de SPI, una extensión utiliza ambos pines de datos en una configuración half-duplex para enviar dos bits por ciclo de reloj. Normalmente, 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 (serial I/O 0) y transporta bits pares, mientras que la línea MISO se convierte en SIO1 y transporta bits impares. Los datos se siguen transmitiendo con el bit más significativo primero, 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: [23] [24]
Quad SPI ( QSPI ; diferente pero con 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 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 en sí se envía en modo simple. [23] [24]
Para ampliar aún más el SPI cuádruple, algunos dispositivos admiten un modo "cuádruple todo", en el que toda la comunicación se realiza a través de cuatro líneas de datos, incluidos los comandos. [25] Esto se denomina "QPI" [24] (que no debe confundirse con Intel QuickPath Interconnect ) o "E/S cuádruple serial" (SQI) [26].
Esto requiere programar un bit de configuración en el dispositivo y requiere cuidado después del reinicio para establecer la comunicación.
Además de utilizar múltiples líneas para E/S, algunos dispositivos aumentan la tasa de transferencia mediante el uso de transmisión de datos de doble velocidad . [27] [28]
Aunque existen algunas similitudes entre el protocolo SPI y el protocolo JTAG (IEEE 1149.1-2013), no son intercambiables. El JTAG está específicamente diseñado para proporcionar un acceso de prueba confiable 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 el SPI tiene muchas aplicaciones variadas. 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 al reducir la frecuencia 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. [29]
SGPIO es esencialmente otra pila de aplicaciones (incompatible) para SPI diseñada para actividades particulares de administración de placa base. [ cita requerida ] SGPIO utiliza mensajes de 3 bits.
Intel ha desarrollado un sucesor de su bus Low Pin Count (LPC) al que llama bus Enhanced Serial Peripheral Interface (eSPI) . Intel pretende reducir la cantidad de pines necesarios 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 que los periféricos LPC utilizaran concentradores de firmware), canalizar los pines fuera de banda anteriores a través de eSPI y permitir que los diseñadores de sistemas equilibren el costo y el rendimiento. [30] [31]
Un bus eSPI se puede compartir con dispositivos SPI para ahorrar pines o estar separado de un bus SPI para permitir un mayor rendimiento, especialmente cuando los dispositivos eSPI necesitan usar dispositivos flash SPI. [30]
Esta norma define una señal Alert# que utiliza un subwoofer eSPI para solicitar servicio al dispositivo principal. En un diseño orientado al rendimiento o un diseño con un solo subwoofer eSPI, cada subwoofer eSPI tendrá su pin Alert# conectado a un pin Alert# en el dispositivo principal eSPI que está dedicado a cada subwoofer, lo que permite que el dispositivo principal eSPI otorgue un servicio de baja latencia, porque el dispositivo principal eSPI sabrá qué subwoofer eSPI necesita servicio y no necesitará sondear a todos los subwoofers para determinar qué dispositivo necesita servicio. En un diseño económico con más de un subwoofer eSPI, todos los pines Alert# de los subwoofers están conectados a un pin Alert# en el dispositivo principal eSPI en una conexión OR cableada , lo que requiere que el dispositivo principal sondee a todos los subwoofers para determinar cuáles necesitan servicio cuando la señal Alert# se baja por uno o más periféricos que necesitan servicio. Solo después de que todos los dispositivos reciban servicio, la señal Alert# se activará debido a que ninguno de los subwoofers eSPI necesita servicio y, por lo tanto, baja la señal Alert#. [30]
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 equilibrar aún más el rendimiento y el costo. [30]
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), deberían canalizarse a través de eSPI mediante ciclos de cable virtual y ciclos de mensajes fuera de banda respectivamente para eliminar esos pines de los diseños de placa base que utilizan eSPI. [30]
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 del 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 de bus master de todos los ciclos de memoria. Los ciclos de E/S de bus master, que se introdujeron con la especificación de bus LPC, y el DMA de estilo ISA, incluida la variante de 32 bits introducida por la especificación de bus LPC, no están presentes en eSPI. Por lo tanto, los ciclos de memoria del maestro de bus son los únicos DMA permitidos en este estándar. [30]
A los subs eSPI se les permite utilizar el eSPI principal como proxy para realizar operaciones flash en un subs de memoria flash SPI estándar en nombre del subs eSPI solicitante. [30]
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. [30]
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á subclockeado a 24 MHz en lugar de los 33 MHz estándar. [32]
El bus eSPI también está adaptado en los chipsets AMD Ryzen .
Las computadoras de placa única pueden proporcionar acceso a pines a unidades de hardware SPI. Por ejemplo, el encabezado J8 de Raspberry Pi expone al menos dos unidades SPI que se pueden usar a través de controladores de Linux o Python .
Existen varios adaptadores USB que permiten que una PC de escritorio o un teléfono inteligente con USB se comuniquen con chips SPI (por ejemplo, FT 221xs [33] ). 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 proporcionan capacidades de programación o scripting (por ejemplo, Visual Basic , C / C++ , VHDL ).
Los parámetros SPI clave son: la frecuencia máxima admitida para la interfaz serial, la latencia entre comandos y la longitud máxima de los comandos SPI. Actualmente, es posible encontrar en el mercado adaptadores SPI que admiten interfaces seriales de hasta 100 MHz, con una longitud de acceso prácticamente ilimitada.
Como el protocolo SPI es un estándar de facto, algunos adaptadores de host SPI también tienen la capacidad de soportar otros protocolos más allá del SPI tradicional de 4 cables (por ejemplo, soporte del protocolo quad-SPI u otro protocolo serial personalizado que deriva de SPI [34] ).
Los analizadores lógicos son herramientas que recopilan, marcan la hora , analizan, decodifican, almacenan y visualizan 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 para humanos.
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 ). [35] La mayoría de los proveedores de osciloscopios ofrecen soporte opcional para el análisis del protocolo SPI (SPI de 2, 3 y 4 cables) con activación.
Se utilizan varias abreviaturas alternativas para las cuatro señales SPI comunes. (En esta sección se omiten las barras que indican nivel bajo de actividad).
Microchip utiliza host y cliente aunque mantiene las abreviaturas MOSI y MISO. [39]