stringtranslate.com

Interfaz Periférica Serial

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]

Operación

(Nota: la sección de variaciones describe el funcionamiento de variantes no estándar).

Figura 1: Configuración básica de SPI usando un solo principal y un solo sub. Cada dispositivo utiliza internamente un registro de desplazamiento para la comunicación en serie, que juntos forman un búfer circular entre chips .

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.

Transmisión de datos

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 se repite el proceso. 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]

Polaridad y fase del reloj.

Además de configurar la frecuencia del reloj, el principal también debe configurar la polaridad y la fase del reloj con respecto a los datos. Motorola [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.

Diagrama de tiempos SPI para polaridades y fases del reloj. Los bits de datos se emiten en líneas azules si CPHA=0, o en líneas rojas si CPHA=1, y la muestra en líneas de colores opuestos. Los números identifican bits de datos. Z indica alta impedancia .

El diagrama de tiempos SPI que se muestra se describe con más detalle a continuación:

Números de modo

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:

Comunicaciones válidas

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).

Interrumpe

Las interrupciones están fuera del alcance de SPI; su uso no está prohibido ni especificado, por lo que opcionalmente puede implementarse.

De principal a secundario

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.

De sub a principal

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 ).

Diseño de software

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 .

Modificando el protocolo

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.

El 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.

Topologías de bus

Aunque la sección de operación anterior se centró en una interfaz básica con un solo sub, SPI puede comunicarse con múltiples subs mediante configuraciones multipunto, en cadena o expansor.

Configuración multipunto

Bus SPI multipunto

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, para 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]

Configuración en cadena tipo margarita

SPI en cadena

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.

Configuraciones de expansor

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]

Pros y contras

Ventajas

Desventajas

Aplicaciones

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 un subsistema de un host, como principal para 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.

Variaciones

SPI es un estándar de facto . Sin embargo, la falta de un estándar formal se refleja en una amplia variedad de opciones de protocolo. Algunos dispositivos son 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.

Definición original

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]

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 en 2002 [5] ) sirve informalmente como el documento "oficial" que define SPI.

Variaciones de tiempo

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.

Tamaño de transmisión

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.

Sin selección de chip

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.

Conectores

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.

Control de flujo

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).

SeguroSPI

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.

Modificaciones de alta confiabilidad.

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]

Controladores SPI inteligentes

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 características 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]

microalambre

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.

Microalambre/Plus

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.

tres hilos

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.

SPI doble

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]

SPI cuádruple

Quad SPI ( QSPI ; diferente pero tiene la misma abreviatura que Queued-SPI descrito en § Controladores SPI inteligentes) va más allá del SPI dual, 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]

ICS 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.
ICS tipo 2
Comandos y direcciones enviados en una sola línea pero datos enviados/recibidos en cuatro líneas

QPI/ICS

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.

Doble velocidad de transmisión de datos

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]

JTAG

Aunque existen algunas similitudes entre SPI y el protocolo JTAG (IEEE 1149.1-2013), no son intercambiables. JTAG está diseñado específicamente para proporcionar acceso de prueba confiable a los pines de E/S desde un controlador externo con parámetros de 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

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.

Interfaz periférica serie mejorada de Intel

Intel ha desarrollado un sucesor de su bus Low Pin Count (LPC) al que llama bus Enhanced Serial Peripheral Interface (eSPI) . Intel tiene como objetivo reducir la cantidad de pines 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]

Herramientas de desarrollo

Computadoras de placa única

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 .

Adaptadores USB a SPI

Hay una serie de adaptadores USB que permiten que una PC de escritorio o un teléfono inteligente con USB se comunique con chips SPI (por ejemplo, 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] ). .

Analizadores de protocolos

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.

Osciloscopios

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.

Terminología alternativa

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]

Ver también

Notas

  1. ^ La primera mención definitiva de una "Interfaz periférica en serie" en los archivos de bitsavers de los manuales de Motorola es de 1983 (ver § Definición original). Si bien algunas fuentes en la web alegan que Motorola introdujo SPI cuando se introdujo el 68000 en 1979, muchos de ellos parecen ser citogénesis o especulación, y el manual 68000 de Motorola de 1983 no menciona la "Interfaz periférica en serie", por lo que la supuesta fecha de 1979 no No parece ser información confiable. Agregue solo una fecha de diseño específica si tiene una fuente definitiva de Motorola en esa fecha.
  2. ^ La sección § Terminología alternativa brinda más detalles sobre la terminología alternativa propuesta. Consulte la página de discusión para ver una discusión en curso.
  3. ^ Para cualquier transacción determinada, solo un dispositivo es el principal. Sin embargo, algunos dispositivos admiten el cambio de funciones principales y secundarias sobre la marcha. La mayoría de los microcontroladores pueden reconfigurar fácilmente la función de su SPI, y algunos dispositivos Atmel y Silabs pueden cambiar las funciones dependiendo de un pin externo.
  4. ^ Si bien la interfaz serie síncrona (SSI) también es un protocolo de comunicación serie síncrono de cuatro hilos, el protocolo SSI emplea señalización diferencial y proporciona un solo canal de comunicación simplex .
  5. ^ Algunos subs requieren un flanco descendente de la señal de selección de chip para iniciar una acción. Un ejemplo es el ADC Maxim MAX1242, que inicia la conversión en una transición alto-bajo.
  6. ^ Las transmisiones suelen consistir en palabras de ocho bits. Sin embargo, también son comunes otros tamaños de palabras, 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 formatos de digital a analógico o de analógico a analógico. -convertidores digitales.
  7. ^ La especificación original tiene un LSBFE ("LSB-First Enable") para controlar si los datos se transfieren primero (LSB) o el bit más significativo (MSB).
  8. ^ ab No debe confundirse con la línea SDIO (E/S de datos en serie) de la implementación semidúplex de SPI, a veces también llamada SPI de "3 cables". Aquí, por ejemplo, MOSI (a través de una resistencia) y MISO (sin resistencia) de una red principal están conectados a la línea SDIO de un sub.
  9. ^ Los periféricos pueden permitir o requerir una cantidad particular (o cualquier cantidad) de bytes de transferencia mientras están seleccionados, como se especifica en su hoja de datos.
  10. ^ Se utilizan desplazamientos a la izquierda porque SPI normalmente transmite primero el bit más significativo. En cambio, los desplazamientos a la derecha podrían usarse para transferir primero el bit menos significativo.
  11. ^ Como con la interfaz de puerto serie multicanal, o McSPI, utilizada en los chips OMAP de Texas Instruments. (https://www.ti.com/product/OMAP3530)
  12. ^ Como el controlador SPI en chips Atmel AT91 como el at91sam9G20, que es mucho más simple que el McSPI de TI.

Referencias

  1. ^ Dhaker, Piyu (2018). "Introducción a la interfaz SPI". Diálogo analógico . Archivado desde el original el 25 de mayo de 2023 . Consultado el 21 de julio de 2023 .
  2. ^ "¿Qué es la interfaz síncrona en serie (SSI)?" . Consultado el 28 de enero de 2015 .
  3. ^ abc Mejor diseño de bus SPI en 3 pasos
  4. ^ Guía de bloques SPI v3.06; Motorola/Freescale/NXP; 2003.
  5. ^ ab "AN991/D: uso de la interfaz periférica serie para comunicarse entre varias microcomputadoras" (PDF) . NXP . 2004 [1994]. Archivado (PDF) desde el original el 4 de abril de 2023 . Consultado el 14 de octubre de 2021 .
  6. ^ "Guía de referencia de la interfaz periférica serie TMS320x281x". Instrumentos Texas . 2002. págs. 16-17.
  7. ^ Nota de aplicación 3947 de Maxim-IC: "Dispositivos SPI en cadena"
  8. ^ ab Gammon, Nick (23 de marzo de 2013). "Foro Gammon: Electrónica: Microprocesadores: uso de un registro de desplazamiento de entrada 74HC165". Foro de Gamón . Archivado desde el original el 29 de julio de 2023 . Consultado el 3 de agosto de 2023 .
  9. ^ ab Gammon, Nick (31 de enero de 2012). "Foro Gammon: Electrónica: Microprocesadores: uso de un registro de desplazamiento de salida 74HC595 como expansor de puerto". Foro de Gamón . Archivado desde el original el 14 de julio de 2023 . Consultado el 3 de agosto de 2023 .
  10. ^ Interfaces, 1977, págs.80, 84
  11. ^ "El multiplexor de control en serie amplía las selecciones de chips SPI" (PDF) . Primer Ministro Farnell . 2001-07-01. Archivado desde el original (PDF) el 19 de agosto de 2019.
  12. ^ "AVR910: programación en el sistema" (PDF) . Archivado desde el original (PDF) el 2 de marzo de 2011.
  13. ^ componentes :: motorola :: dataBooks :: 1983 Microprocesador Motorola de 8 bits y datos periféricos.
  14. ^ motorola :: dataBooks :: 1984 Datos de microcomputadora de un solo chip Motorola.
  15. ^ "Uso de la interfaz periférica serie para comunicarse entre varias microcomputadoras" (PDF) . Ahorradores de bits .
  16. ^ SafeSPI.org
  17. ^ "Transmisión de SPI a través de interfaces LVDS" (PDF) . Instrumentos Texas . Consultado el 14 de febrero de 2021 .
  18. ^ "Ejemplo de bucle invertido maestro SPI". Semiconductor nórdico . Consultado el 14 de febrero de 2021 .
  19. ^ "Freescale Semiconductor, Inc. - QSM - Módulo serie en cola - Manual de referencia" (PDF) . NXP . 1996 [1991]. Archivado desde el original (PDF) el 24 de agosto de 2019.
  20. ^ "Quad-SPI ofrece una rápida transmisión de datos en paralelo". Sistemas de diseño de cadencia . 2023-01-11. Archivado desde el original el 1 de junio de 2023 . Consultado el 30 de junio de 2023 .
  21. ^ Nota de aplicación de semiconductores nacionales de interfaz serie MICROWIRE AN-452
  22. ^ Interfaz serie MICROWIRE/PLUS para la nota de aplicación de semiconductores nacionales de la familia COP800 AN-579
  23. ^ ab "Memoria flash en serie W25Q16JV 3V 16M-bit con SPI dual/cuádruple" (PDF) (hoja de datos). Revisión D. Winbond . 12 de agosto de 2016 . Consultado el 10 de febrero de 2017 .
  24. ^ abc "D25LQ64 1.8V Uniform Sector Dual y Quad SPI Flash" (PDF) (hoja de datos). versión 0.1. GigaDispositivo. 11 de febrero de 2011. Archivado desde el original (PDF) el 12 de febrero de 2017 . Consultado el 10 de febrero de 2017 .
  25. ^ "Flash QuadSPI: modo Quad SPI frente a modo QPI". Foros de la comunidad NXP . Diciembre de 2014 . Consultado el 10 de febrero de 2016 .
  26. ^ "Memoria flash SST26VF032B / SST26VF032BA 2,5 V/3,0 V 32 Mbit Serial Quad I/O (SQI)" (PDF) (Hoja de datos). versión E. Microchip, Inc. 2017 . Consultado el 10 de febrero de 2017 .
  27. ^ Patterson, David (mayo de 2012). "Actualizaciones del módulo de interfaz periférica serie cuádruple (QuadSPI)" (PDF) (Nota de aplicación). Semiconductores de escala libre . Consultado el 21 de septiembre de 2016 .
  28. ^ Pell, Rich (13 de octubre de 2011). "Mejora del rendimiento utilizando la memoria flash SPI-DDR NOR". EDN .
  29. ^ IEEE 1149.1-2013
  30. ^ Especificación básica de la interfaz de interfaz periférica serie mejorada (eSPI) de abcdefgh (para plataformas cliente y servidor) (PDF) (Reporte). Revisión 1.0. Intel. Enero de 2016. Número de documento 327432-004 . Consultado el 5 de febrero de 2017 .
  31. ^ Especificación de interfaz de interfaz periférica serie mejorada (eSPI) (para plataformas de cliente) (PDF) (Reporte). Revisión 0.6. Intel. Mayo de 2012. Número de documento 327432-001EN . Consultado el 5 de febrero de 2017 .
  32. ^ "Hoja de datos PCH de la familia de chipsets Intel® serie 100, vol. 1" (PDF) . Consultado el 15 de abril de 2015 .
  33. ^ "Convertidor de USB a SPI". FTDI . 2 de agosto de 2020 . Consultado el 14 de febrero de 2021 .
  34. ^ SPI Storm: adaptador de host de protocolo serie compatible con protocolos serie personalizados, Byte Paradigm.
  35. ^ "Activación y decodificación del protocolo N5391B I²C y SPI para osciloscopios Infiniium".
  36. ^ ab SPI; OSHWA.
  37. ^ ab https://www.ti.com/lit/an/scea091a/scea091a.pdf
  38. ^ ab "Dispositivos de interfaz periférica serie (SPI)". NXP . Archivado desde el original el 1 de junio de 2023 . Consultado el 22 de julio de 2023 .
  39. ^ Stoicescu, Alin. "Introducción a la interfaz periférica serie (SPI)". Tecnología de microchips . Archivado desde el original el 21 de diciembre de 2023 . Consultado el 21 de diciembre de 2023 .

enlaces externos