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 integrados para comunicación por cable de corta distancia entre circuitos integrados .
SPI utiliza una arquitectura maestro-esclavo , descrita aquí con los términos "principal" y "sub", [nota 2] [1] donde un dispositivo principal [nota 3] organiza la comunicación con una cierta cantidad de dispositivos (sub) periféricos impulsando el señal de reloj y señal(es) de selección de chip .
La especificación original de Motorola (principios de la década de 1980) utiliza cuatro cables para realizar una comunicación dúplex completa . A veces se le llama bus serie de cuatro cables para contrastar con las variantes de tres cables que son semidúplex y con los buses serie I²C de dos cables y de 1 cable .
Las aplicaciones típicas incluyen la interfaz de microcontroladores con chips periféricos para tarjetas Secure Digital , pantallas de cristal líquido , convertidores analógico-digital y digital-analógico , memoria flash y EEPROM y varios chips de comunicación.
SPI puede describirse con precisión como una interfaz serie síncrona, [2] pero es diferente del protocolo de interfaz serie síncrona (SSI). [nota 4]
(Nota: la sección de variaciones describe el funcionamiento de variantes no estándar).
SPI tiene cuatro señales lógicas (que pueden tener nombres alternativos):
MOSI en una salida principal a MOSI en un sub. MISO en un sub salidas a MISO en un principal.
SPI opera con un solo dispositivo que actúa como principal y con uno o más dispositivos secundarios.
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 subs sin salidas de tres estados no pueden compartir un cable MISO con otros subs sin usar un búfer de tres estados externo.
Para comenzar la comunicación, el SPI principal primero selecciona un dispositivo secundario 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 para una conversión de analógico a digital, el 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 sólo se pretende una transferencia de datos unidireccional.
La transmisión utilizando un solo sub (Figura 1) implica un registro de desplazamiento en el registro principal y un registro de desplazamiento en el sub, ambos de un tamaño de palabra determinado (por ejemplo, 8 bits), [nota 6] conectados en una topología de anillo virtual . Los datos generalmente se transfieren primero con el bit más significativo (MSB). [nota 7] En el borde del reloj, tanto el principal como el secundario se desplazan un poco hacia 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. Después de que todos los bits se hayan desplazado hacia afuera y hacia adentro, 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 dispositivo secundario, su pin CS puede fijarse en lógica baja si el subdispositivo lo permite. Con múltiples dispositivos secundarios, una configuración multipunto requiere una señal CS independiente del principal para cada dispositivo secundario, mientras que una configuración en cadena solo requiere una señal CS .
Cada sub del bus que no haya sido seleccionado debe ignorar el reloj de entrada y las señales MOSI. Y para evitar conflictos por MISO, los subs no seleccionados deben utilizar salida triestado . Los subs que aún no son triestado necesitarán buffers externos triestado para garantizar esto. [3]
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 [4] [5] nombró estas dos opciones como CPOL y CPHA (para polaridad de bloqueo y fase de bloqueo ) respectivamente, una convención que la mayoría de los proveedores también han adoptado.
El diagrama de tiempos 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 entradas adicionales y continúan desplazando el mismo bit de salida. Es común que diferentes dispositivos usen comunicaciones SPI con diferentes longitudes, como, por ejemplo, cuando se usa SPI para acceder a la cadena de escaneo de un IC emitiendo una palabra de comando de un tamaño (quizás 32 bits) y luego obteniendo una respuesta de un tamaño diferente. tamaño (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, por lo que opcionalmente puede implementarse.
Los microcontroladores configurados como subdispositivos pueden tener soporte de hardware para generar señales de interrupción para ellos mismos cuando se reciben palabras de datos o se produce un desbordamiento en un buffer 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 está baja o baja. alto.
Los subs SPI a veces usan una señal fuera de banda (otro cable) para enviar una señal de interrupción a una red principal. Los ejemplos incluyen interrupciones de lápiz desde 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 [nota 8] e inserciones de conectores de audio para un códec de audio . Las interrupciones en main también se pueden falsificar mediante el uso de sondeo (de manera similar a USB 1.1 y 2.0 ).
SPI se presta a un diseño de software de "conductor de autobús". El software para dispositivos conectados está escrito para llamar a un "controlador de bus" que maneja el hardware SPI de bajo nivel real. Esto permite que el código del controlador de los dispositivos conectados se transfiera fácilmente a otro hardware o a una implementación de software potente .
El pseudocódigo siguiente describe una implementación de software (" bit-banging ") del protocolo SPI como principal con salida y entrada simultáneas. Este pseudocódigo es para CPHA=0 y CPOL=0, por lo tanto, SCLK se baja antes de que se active CS y los bits se ingresan 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 para transmitirbyte_out
MOSIbyte_in
byte_in
ahora contiene ese byte recibido recientemente y se puede utilizar como se deseeEl protocolo de bit banging de un submarino es similar pero diferente al anterior. Una implementación podría implicar una espera ocupada a que CS caiga o desencadenar una rutina de interrupción cuando CS cae, y luego cambiar bits de entrada y salida cuando el SCLK recibido cambia apropiadamente por más tiempo que dure el tamaño de 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 mediante configuraciones multipunto, en cadena o expansor.
En la configuración del 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 normalmente se utiliza SPI.
Dado que los pines MISO de los subs están conectados entre sí, se requiere que sean pines de tres estados (alta, baja o alta impedancia), donde la salida de alta impedancia debe aplicarse cuando el sub no está seleccionado. Los subdispositivos que no admiten triestado se pueden usar en configuración multipunto agregando un chip buffer de triestado controlado por su señal CS . [3] (Dado que solo es necesario triplicar una línea de señal por sub, se puede usar un chip lógico estándar típico que contiene cuatro buffers triestado con entradas de puerta independientes para interconectar hasta cuatro subdispositivos a un bus SPI)
Advertencia: Todas las señales CS deben comenzar en nivel alto (para indicar que no hay chips seleccionados) antes de enviar mensajes de inicialización a cualquier sub, de modo que otros subs no inicializados ignoren los mensajes que no están dirigidos a ellos. Esto es preocupante si el principal usa pines de entrada/salida de propósito general (GPIO) (que pueden tener un estado indefinido de manera predeterminada) para CS y si el principal usa bibliotecas de software separadas para inicializar cada dispositivo. Una solución es configurar todos los GPIO utilizados para CS para generar un alto voltaje para todos los subs antes de ejecutar el código de inicialización desde 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 de CS sean inicialmente altas. [3]
Algunos productos que implementan SPI pueden conectarse en una configuración en cadena , donde la salida del primer sub está conectada a la entrada del segundo sub, y así sucesivamente con los subsiguientes, hasta el sub final, cuya salida está conectada nuevamente a la entrada del principal. Esto fusiona efectivamente los registros de desplazamiento de comunicación individuales de cada sub 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 desde el principal, en lugar de una línea CS separada para cada sub. [7]
Además de usar subs específicos de SPI, el SPI conectado en cadena puede incluir registros de desplazamiento discretos para más pines de entradas (por ejemplo, usando la entrada en paralelo y salida en serie 74 xx165) [8] o salidas (por ejemplo, usando la entrada en serie en paralelo). out 74 xx595) [9] encadenado 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 chips.
Por ejemplo, se puede usar una CS para transmitir a un demultiplexor controlado por SPI un número de índice que controla sus señales seleccionadas, mientras que otra 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 usan ARM , MIPS o PowerPC , como con microcontroladores de gama baja, como AVR , PIC y MSP430 . Estos chips generalmente incluyen controladores SPI capaces de ejecutarse 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; Los bienes inmuebles integrados en el chip pueden ser tan costosos como sus primos integrados. Y para los sistemas de alto rendimiento, los FPGA a veces usan SPI para interconectarse como sub a un host, como principal a los sensores o como memoria flash utilizada para arrancar si están basados en SRAM.
La capacidad full-duplex hace que SPI sea muy simple y eficiente para aplicaciones principales y secundarias únicas. 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 disponibles en el mercado se adhieren a protocolos de solicitud/respuesta semidúplex.
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 sólo de transmisión; otros son sólo de 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 oficial que las define y pueden considerarse protocolos separados pero relacionados.
Motorola en 1983 enumeró [13] tres microcomputadoras 6805 de 8 bits que tienen una "Interfaz periférica en serie" 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 serie para comunicarse entre múltiples microcomputadoras" [15] (ahora bajo NXP , última revisión en 2002 [5] ) sirve informalmente como el documento "oficial" que define SPI.
Algunos dispositivos tienen variaciones de sincronización con respecto a los modos CPOL/CPHA de Motorola. El envío de datos del secundario al principal puede utilizar el borde del reloj opuesto como principal al secundario. Los dispositivos a menudo requieren un tiempo de inactividad adicional del reloj 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.
Son comunes diferentes tamaños de palabras de transmisión. Muchos chips SPI sólo 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 la selección de chip y, en cambio, administran la entrada/salida de la máquina de estado del protocolo mediante otros métodos.
Quien 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.
Algunos dispositivos requieren una señal de control de flujo adicional desde el secundario al principal, que indica cuando los datos están listos. Esto conduce a un protocolo de 5 cables en lugar de los 4 habituales. Esta señal de listo o habilitado suele estar activa-baja y debe habilitarse en puntos clave, como después de 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 necesiten insertar bytes ficticios, para adaptarse al peor de los casos para el tiempo de subrespuesta. 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).
SafeSPI [16] es un estándar industrial para SPI en aplicaciones automotrices. Su objetivo principal es la transmisión de datos de sensores entre diferentes dispositivos.
En entornos eléctricamente ruidosos, 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 conectarse en bucle para probar la integridad de la señal. [18]
Una interfaz periférica en serie en cola ( QSPI ; diferente pero tiene 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 funciones programables en Queued SPI son la selección de chip y la duración/retraso de la transferencia.
Los controladores SPI de diferentes proveedores admiten diferentes conjuntos de funciones; Este tipo de colas de acceso directo a memoria (DMA) no son infrecuentes, aunque pueden estar asociadas con motores DMA separados en lugar del controlador SPI en sí, como el que utiliza 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 el SPI en cola es diferente del SPI cuádruple , 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 que utiliza el modo SPI 0. Los chips de microcables 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 presenta comunicación full-duplex y soporte para los modos SPI 0 y 1. No se especificó ninguna mejora en la velocidad del reloj en serie.
Las variantes de SPI de tres cables restringidas a un modo semidúplex utilizan una única 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 pequeñas EEPROM que se usan solo durante el inicio del sistema, ciertos 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 (E/S serie 0) y transporta bits pares, mientras que la línea MISO se convierte en SIO1 y transporta bits impares. Los datos todavía se transmiten primero el bit más significativo, pero SIO1 lleva los bits 7, 5, 3 y 1 de cada byte, mientras que SIO0 lleva 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 tiene la misma abreviatura que Queued-SPI descrito en § Controladores SPI inteligentes) va más allá del SPI dual, agrega 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. [23] [24]
Ampliando aún más el SPI cuádruple, algunos dispositivos admiten un modo "cuádruple todo" donde toda la comunicación se realiza a través de 4 líneas de datos, incluidos los comandos. [25] Esto se denomina "QPI" [24] (no debe confundirse con Intel QuickPath Interconnect ) o "E/S cuádruple en serie" (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 varias líneas para E/S, algunos dispositivos aumentan la velocidad de transferencia utilizando una transmisión de doble velocidad de datos . [27] [28]
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 retardo y desviación 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 violaciones 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 soportar velocidades de datos extremadamente altas. [29]
SGPIO es esencialmente otra pila de aplicaciones (incompatible) para SPI diseñada para actividades particulares de administración del backplane. [ cita necesaria ] 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 tiene como objetivo 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 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 periféricos LPC), canalizar pines anteriores fuera de banda a través de eSPI y permitir a los diseñadores de sistemas compensar costo y rendimiento. [30] [31]
Un bus eSPI se puede compartir con dispositivos SPI para guardar pines o estar separado de un bus SPI para permitir un mayor rendimiento, especialmente cuando los dispositivos eSPI necesitan usar dispositivos flash SPI. [30]
Este estándar define una señal de alerta# que es utilizada por un sub eSPI para solicitar 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 eSPI principal que está dedicado a cada sub, lo que permite que el eSPI principal otorgue baja latencia. servicio, porque el eSPI principal sabrá qué sub eSPI necesita servicio y no necesitará sondear todos los subs para determinar qué dispositivo necesita servicio. En un diseño de presupuesto 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 unos necesitan servicio cuando uno o más periféricos que necesitan servicio reducen la señal Alert#. Solo después de que todos los dispositivos hayan recibido servicio, la señal de alerta n.° se elevará debido a que ninguno de los subs eSPI necesita servicio y, por lo tanto, la señal de alerta n.° será baja. [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 aún más compensar rendimiento y costo. [30]
Todas las comunicaciones que estaban fuera de banda de LPC, como entrada/salida de propósito general (GPIO) y System Management Bus (SMBus), se canalizan a través de eSPI a través de ciclos de cables virtuales y ciclos de mensajes fuera de banda, respectivamente, para eliminarlas. pines de diseños de placas 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 byte. , 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 maestras del bus de todos los ciclos de memoria. Los ciclos de E/S del maestro de 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 maestra del bus son el único DMA permitido en este estándar. [30]
Los subs eSPI pueden usar 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 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 al que le falta su capacidad DMA estilo ISA y tiene una frecuencia de reloj inferior a 24 MHz en lugar de los 33 MHz estándar. [32]
Las computadoras de placa única pueden proporcionar acceso mediante pin a las 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 .
Hay 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 secuencias de comandos (por ejemplo, Visual Basic , C / C++ , VHDL ).
Los parámetros clave de SPI son: la frecuencia máxima admitida para la interfaz serie, la latencia de comando a comando y la longitud máxima para los comandos SPI. Hoy en día es posible encontrar adaptadores SPI en el mercado que admitan interfaces serie 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 admitir otros protocolos más allá del SPI tradicional de 4 cables (por ejemplo, soporte del protocolo SPI cuádruple u otro protocolo serial personalizado que se deriva de SPI [34] ). .
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 del bus SPI en datos de protocolo de alto nivel con etiquetas legibles por humanos.
Las formas de onda SPI se pueden ver en canales analógicos (y/o mediante 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 disparo.
El término "maestro" se utiliza comúnmente para identificar el dispositivo principal y "esclavo" para los (sub)dispositivos periféricos. Estos términos reflejan cómo el dispositivo principal es responsable de controlar el reloj en serie e iniciar la comunicación: los dispositivos periféricos solo pueden comunicarse cuando el dispositivo principal controla el reloj.
Se han propuesto varios nombres alternativos más contemporáneos para cada una de las cuatro señales:
Microchip utiliza "Host" y "Cliente", aunque mantiene las abreviaturas MOSI y MISO. [39]