Interfaz periférica serial

Interfaz de comunicación serial sincrónica
Interfaz periférica serial (SPI)
Tipo Bus de comunicación en serie
Historial de producción
DiseñadorMotorola
DiseñadoA principios de los años 1980 [nota 1]
Fabricantevarios
Conexión en cadenaDepende de los dispositivos
ConectorNo especificado
Eléctrico
Voltaje máx.No especificado
Corriente máx.No especificado
Datos
Ancho1 bit (bidireccional)
Máximo de dispositivosMultidrop limitado por selección de chip. Conexión en cadena ilimitada.
Protocolo Serie dúplex completo
Distribución de pines
MOSIAmo fuera, esclavo dentro
MISOAmo entra, esclavo sale
CLICReloj en serie
CSSeleccionar chip (uno o más)
(los pines pueden tener nombres alternativos)

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 .

Operación

Figura 1: Conectividad SPI común con un solo sub.

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.

Abr.NombreDescripción
CS
selección de chip
Señal de selección de chip activo bajo
desde el dispositivo principal para habilitar la comunicación con un subdispositivo específico
CLIC
reloj serial
Señal de reloj de la red principal
MOSI
 salida principal , entrada  secundaria ( salida maestra, entrada esclava ) 
   
Datos en serie del bit principal, bit más significativo primero
MISO
entrada principal  , salida  secundaria ( entrada maestra, salida esclava ) 
   
Datos en serie del sub, bit más significativo primero

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.

Transmisión de datos

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 con el bit más significativo (MSB) primero. [nota 7] En el borde del reloj, tanto el receptor principal como el subreceptor desplazan un bit hacia su homólogo. En el siguiente borde del reloj, cada receptor muestrea el bit transmitido y lo almacena en el registro de desplazamiento como el nuevo bit menos significativo. 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]

Polaridad y fase del reloj

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 .

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

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

  • CPOL representa la polaridad del reloj. Las polaridades se pueden convertir con un simple inversor .
    • SCLK CPOL=0 es un reloj que funciona inactivo en el voltaje lógico bajo .
    • SCLK CPOL=1 es un reloj que funciona inactivo en el alto voltaje lógico.
  • CPHA representa la fase del ciclo de transmisión de cada bit de datos en relación con SCLK.
    • Para CPHA=0:
      • El primer bit de datos se emite inmediatamente cuando se activa CS .
      • Los bits subsiguientes se emiten cuando SCLK pasa a su nivel de voltaje inactivo.
      • El muestreo se produce cuando SCLK pasa de su nivel de voltaje inactivo.
    • Para CPHA=1:
      • El primer bit de datos se emite en el primer borde de reloj de SCLK después de que se activa CS .
      • Los bits subsiguientes se emiten cuando SCLK pasa de su nivel de voltaje inactivo.
      • El muestreo se produce cuando SCLK pasa a su nivel de voltaje inactivo.
    • La conversión entre estas dos fases no es trivial.
    • Nota: Las señales MOSI y MISO suelen ser estables (en sus puntos de recepción) durante el semiciclo hasta que comienza el ciclo de transmisión del siguiente bit, por lo que los dispositivos principales y secundarios SPI pueden muestrear datos en diferentes puntos de ese semiciclo, para mayor flexibilidad, a pesar de la especificación original.

Números de moda

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:

Modo SPIPolaridad del reloj
(CPOL)
Fase del reloj
(CPHA)
Los datos se desplazan hacia fueraLos datos se muestrean en
000cayendo SCLK, y cuando CS se activaSCLK en ascenso
101SCLK en ascensoSCLK cayendo
210SCLK en aumento y cuando CS se activaSCLK cayendo
311SCLK cayendoSCLK en ascenso

Notas:

  • Otra notación comúnmente utilizada representa el modo como una tupla (CPOL, CPHA); por ejemplo, el valor '(0, 1)' indicaría CPOL=0 y CPHA=1.
  • En el modo Full Duplex, el dispositivo principal puede transmitir y recibir en diferentes modos. Por ejemplo, puede transmitir en modo 0 y recibir en modo 1 al mismo tiempo.
  • Diferentes proveedores pueden utilizar diferentes esquemas de nombres, como CKE para el borde del reloj o NCPHA para la inversión de CPHA.

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

Interrupciones

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.

De principal a secundario

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.

Del subtítulo al principal

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

Diseño de software

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 .

Bit-banging el protocolo

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.

  • Inicialice SCLK como bajo y CS como alto
  • Tire CS hacia abajo para seleccionar el sub
  • Bucle para cualquier número de bytes a transferir: [nota 9]
    • Inicializar byte_outcon el siguiente byte de salida a transmitir
    • Repetir 8 veces:
    • byte_inAhora contiene ese byte recibido recientemente y se puede usar como se desee.
  • Tire CS hacia arriba para deseleccionar el sub

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.

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 usando configuraciones multidrop, en cadena o expansor.

Configuración multidrop

Bus SPI multipunto

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]

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

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

Pros y contras

Ventajas

  • Comunicación full duplex en la versión predeterminada de este protocolo
  • Los controladores push-pull (a diferencia del drenaje abierto ) proporcionan una integridad de señal relativamente buena y alta velocidad.
  • Mayor rendimiento que I²C o SMBus
    • El protocolo SPI no tiene una velocidad de reloj máxima, sin embargo:
      • Los dispositivos individuales especifican frecuencias de reloj aceptables
      • El cableado y la electrónica limitan la frecuencia
  • Flexibilidad total del protocolo para los bits transferidos
    • No se limita a símbolos de 8 bits
    • Elección arbitraria del tamaño, contenido y propósito del mensaje.
  • Hardware y interfaz sencillos
    • La implementación de hardware para subwoofers solo requiere un registro de desplazamiento seleccionable
      • Los subwoofers utilizan el reloj principal y, por lo tanto, no necesitan osciladores de precisión.
      • Los subtítulos no necesitan una dirección única  , a diferencia de I²C , GPIB o SCSI
      • La red eléctrica solo requiere además la generación de señales de reloj y CS
      • Resultados en una implementación de software simple y con bits banged
    • Utiliza solo cuatro pines en paquetes de CI y cables en diseños de placa o conectores, muchos menos que las interfaces paralelas.
      • Como máximo una señal única por dispositivo ( CS ); todas las demás son compartidas
        • Nota: la configuración en cadena no necesita más de un CS compartido
    • Por lo general, los requisitos de energía son menores que los de I²C o SMBus debido a que tienen menos circuitos (incluidas resistencias pull-up)
    • Un solo bus principal significa que no hay arbitraje de bus (y modos de falla asociados), a diferencia del bus CAN
    • No se necesitan transceptores, a diferencia del bus CAN
    • Las señales son unidireccionales, lo que permite un fácil aislamiento galvánico.

Desventajas

  • Requiere más pines en paquetes IC que I²C , incluso en variantes de tres cables
  • Sólo maneja distancias cortas en comparación con RS-232 , RS-485 o CAN-bus (aunque la distancia se puede ampliar con el uso de transceptores como RS-422 )
  • La extensibilidad se reduce severamente cuando se requieren múltiples subs que utilizan diferentes modos SPI
    • El acceso se ralentiza cuando el servidor principal necesita reinicializarse con frecuencia en diferentes modos
  • No existe ningún estándar formal
    • Por lo tanto, no es posible validar la conformidad.
    • Muchas variaciones existentes complican el soporte.
  • No hay soporte de protocolo integrado para algunas conveniencias:

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

Variaciones

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.

Definición original

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]

AN991

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.

Variaciones de tiempo

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.

Tamaño de transmisión

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.

Sin selección de chip

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.

Conectores

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.

Control de flujo

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

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.

Modificaciones de alta confiabilidad

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]

Controladores SPI inteligentes

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]

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

Microalambre/Plus

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.

Tres cables

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.

Doble SPI

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]

  • Los comandos de lectura dual envían y direccionan desde el principal en modo único y devuelven los datos en modo dual.
  • Los comandos de E/S duales envían el comando en modo simple y luego envían la dirección y devuelven los datos en modo dual.

SPI cuádruple

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

SQI Tipo 1
Los comandos se envían en una sola línea, pero las direcciones y los datos se envían en cuatro líneas
SQI Tipo 2
Los comandos y direcciones se envían en una sola línea, pero los datos se envían/reciben en cuatro líneas

Índice de calidad de rendimiento (ICP) y Índice de calidad de seguridad (ICS)

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.

Doble velocidad de datos

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]

JTAG

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

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.

Interfaz periférica serial 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 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 .

Herramientas de desarrollo

Computadoras de placa única

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 .

Adaptadores USB a SPI

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

Analizadores de protocolo

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.

Osciloscopios

Las formas de onda SPI se pueden ver en canales analógicos (y/o a través de canales digitales en osciloscopios de señal mixta ). [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.

Terminología alternativa

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

  • Reloj serial
    • SCK, SCLK, CLK, SCL
  • Salida principal, entrada secundaria (MOSI)
    • SIMO, MTSR, SPID: corresponden a MOSI en los dispositivos principales y secundarios y se conectan entre sí.
    • SDI, DI, DIN, SI, SDA - en subdispositivos; varias abreviaturas para datos seriales en ; se conecta a MOSI en el principal
    • SDO, DO, DOUT, SO - en dispositivos principales; varias abreviaturas para salida de datos en serie ; se conecta a MOSI en sub
    • COPI, PICO para periféricos y controladores , [36] [37] o COTI para controladores y objetivos [38]
  • Entrada principal, salida secundaria (MISO)
    • SOMI, MRST, SPIQ: corresponden a MISO tanto en los dispositivos principales como en los secundarios y se conectan entre sí
    • SDO, DO, DOUT, SO - en dispositivos secundarios; se conecta a MISO en el principal
    • SDI, DI, DIN, SI - en dispositivos principales; se conecta a MISO en sub
    • CIPO, POCI, [36] [37] o CITO [38]
  • Selección de chip (CS)
    • CE (habilitación con chip)
    • Histórico: SS (selección de esclavo), SSEL, NSS, /SS, SS# (selección de sub)

Microchip utiliza host y cliente aunque mantiene las abreviaturas MOSI y MISO. [39]

Véase también

Notas

  1. ^ La primera mención definitiva de una "Interfaz periférica serial" en los archivos de manuales de Motorola de bitsavers es de 1983 (ver § Definición original). Si bien algunas fuentes en la web afirman que Motorola introdujo la SPI cuando se presentó el 68000 en 1979, muchas de ellas parecen ser citogénesis o especulación, y el manual del 68000 de Motorola de 1983 no menciona la "Interfaz periférica serial", por lo que la supuesta fecha de 1979 no parece ser una información confiable. Agregue una fecha de diseño específica solo si tiene una fuente definitiva de Motorola de esa época.
  2. ^ El uso de main y sub permite mantener las mismas letras iniciales para permanecer sincronizado con los nombres de las líneas. Por ejemplo, MISO podría expandirse como "main in, sub out"
  3. ^ 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.
  4. ^ Para cualquier transacción dada, solo un dispositivo es el principal. Sin embargo, algunos dispositivos admiten el cambio de funciones principal y secundaria 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 de función según un pin externo.
  5. ^ Algunos subwoofers 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 de alto a bajo.
  6. ^ Las transmisiones suelen constar de palabras de ocho bits. Sin embargo, también son comunes otros tamaños de palabra, por ejemplo, palabras de dieciséis bits para controladores de pantalla táctil o códecs de audio, como el TSC2101 de Texas Instruments, o palabras de doce bits para muchos convertidores de digital a analógico o de analógico a digital.
  7. ^ La especificación original tiene un LSBFE ("LSB-First Enable") para controlar si los datos se transfieren primero el bit menos significativo (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 half-duplex 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 un circuito principal se conectan a la línea SDIO de un subwoofer.
  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, se podrían utilizar desplazamientos a la derecha para transferir primero el bit menos significativo.
  11. ^ Como ocurre 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 los 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". Analog Dialogue . Archivado desde el original el 2023-05-25 . Consultado el 2023-07-21 .
  2. ^ "¿Qué es la interfaz síncrona serial (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 serial para comunicarse entre múltiples microcomputadoras" (PDF) . NXP . 2004 [1994]. Archivado (PDF) desde el original el 2023-04-04 . Consultado el 2021-10-14 .
  6. ^ "Guía de referencia de la interfaz periférica serial TMS320x281x". Texas Instruments . 2002. págs. 16-17.
  7. ^ Nota de aplicación Maxim-IC 3947: "Conexión en cadena de dispositivos SPI"
  8. ^ ab Gammon, Nick (23 de marzo de 2013). "Foro Gammon: Electrónica: Microprocesadores: Uso de un registro de desplazamiento de entrada 74HC165". Foro Gammon . 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 Gammon . 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. ^ "Multiplexor de control en serie amplía la selección de chips SPI" (PDF) . Premier Farnell . 2001-07-01. Archivado desde el original (PDF) el 2019-08-19.
  12. ^ "AVR910 - Programación en el sistema" (PDF) . Archivado desde el original (PDF) el 2 de marzo de 2011.
  13. ^ componentes :: motorola :: dataBooks :: Microprocesador y datos periféricos de 8 bits Motorola 1983.
  14. ^ motorola :: dataBooks :: Datos de microcomputadoras de un solo chip de Motorola de 1984.
  15. ^ "Uso de la interfaz periférica serial para comunicarse entre múltiples microcomputadoras" (PDF) . Bitsavers .
  16. ^ SafeSPI.org
  17. ^ "Transmisión de SPI a través de interfaces LVDS" (PDF) . Texas Instruments . Consultado el 14 de febrero de 2021 .
  18. ^ "Ejemplo de bucle invertido SPI Master". Nordic Semiconductor . Consultado el 14 de febrero de 2021 .
  19. ^ "Freescale Semiconductor, Inc. - QSM - Queued Serial Module - Reference Manual" (PDF) . NXP . 1996 [1991]. Archivado desde el original (PDF) el 24 de agosto de 2019.
  20. ^ "Quad-SPI ofrece una transmisión rápida de datos en paralelo". Cadence Design Systems . 2023-01-11. Archivado desde el original el 2023-06-01 . Consultado el 2023-06-30 .
  21. ^ Nota de aplicación AN-452 de National Semiconductor sobre interfaz serial MICROWIRE
  22. ^ Interfaz serial MICROWIRE/PLUS para la familia COP800 Nota de aplicación AN-579 de National Semiconductor
  23. ^ ab "W25Q16JV 3V 16M-bit serial flash memory with Dual/Quad SPI" (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 and Quad SPI Flash" (PDF) (hoja de datos). versión 0.1. GigaDevice. 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 de 2,5 V/3,0 V y 32 Mbit con E/S cuádruple serial (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 Quad Serial Peripheral Interface (QuadSPI)" (PDF) (nota de aplicación). Freescale Semiconductor . Consultado el 21 de septiembre de 2016 .
  28. ^ Pell, Rich (13 de octubre de 2011). "Mejora del rendimiento utilizando memoria flash SPI-DDR NOR". EDN .
  29. ^ IEEE 1149.1-2013
  30. ^ abcdefgh Enhanced Serial Peripheral Interface (eSPI) Interface Base Specification (para plataformas de cliente y servidor) (PDF) (Informe). 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 serial mejorada (eSPI) (para plataformas cliente) (PDF) (Informe). Revisión 0.6. Intel. Mayo de 2012. Número de documento 327432-001EN . Consultado el 5 de febrero de 2017 .
  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 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 con soporte de protocolos serie personalizados, Byte Paradigm.
  35. ^ "Disparo y decodificación de protocolo N5391B I²C y SPI para osciloscopios Infiniium".
  36. ^ desde SPI; OSHWA.
  37. ^ ab https://www.ti.com/lit/an/scea091a/scea091a.pdf [ URL básica PDF ]
  38. ^ ab "Dispositivos de interfaz periférica serial (SPI)". NXP . Archivado desde el original el 2023-06-01 . Consultado el 2023-07-22 .
  39. ^ Stoicescu, Alin. "Introducción a la interfaz periférica serial (SPI)". Microchip Technology . Archivado desde el original el 2023-12-21 . Consultado el 2023-12-21 .
  • Intel eSPI (Interfaz periférica serial mejorada)
  • Tutorial de SPI
Obtenido de "https://es.wikipedia.org/w/index.php?title=Interfaz_periférica_serie&oldid=1252144801"