La Interfaz de periféricos en serie ( SPI ) es una especificación de interfaz de comunicación en serie síncrona que se utiliza para comunicaciones de corta distancia, principalmente en sistemas integrados . La interfaz fue desarrollada por Motorola a mediados de la década de 1980 y se ha convertido en un estándar de facto . Las aplicaciones típicas incluyen tarjetas Secure Digital y pantallas de cristal líquido .
Tipo | Bus de comunicación serial | ||
---|---|---|---|
Historial de producción | |||
Diseñador | Motorola | ||
Diseñado | 1979 | ||
Datos | |||
Protocolo | Serie , dúplex completo |
Los dispositivos SPI se comunican en modo dúplex completo utilizando una arquitectura maestro-esclavo , generalmente con un solo maestro (aunque algunos dispositivos Atmel admiten cambios de roles sobre la marcha dependiendo de un pin externo (SS)). El dispositivo maestro (controlador) origina el marco para lectura y escritura. Se pueden admitir varios dispositivos esclavos mediante la selección con selección de chip individual (CS), a veces llamadas líneas de selección esclava (SS).
A veces, SPI se denomina bus en serie de cuatro cables , en contraste con los buses en serie de tres , dos y un cable . El SPI puede describirse con precisión como una interfaz serie síncrona, [1] pero es diferente del protocolo de interfaz serie síncrona (SSI), que también es un protocolo de comunicación serie síncrona de cuatro cables. El protocolo SSI emplea señalización diferencial y proporciona solo un canal de comunicación simplex . Para cualquier transacción dada, SPI es una comunicación maestra y múltiples esclavas.
Interfaz
El bus SPI especifica cuatro señales lógicas:
- SCLK: reloj serial (salida del maestro)
- MOSI: Master Out Slave In (salida de datos del maestro)
- MISO: Master In Slave Out (salida de datos del esclavo)
- CS / SS: Selección de chip / esclavo (a menudo activo bajo , salida del maestro para indicar que se están enviando datos)
MOSI en un maestro se conecta a MOSI en un esclavo. MISO en un maestro se conecta a MISO en un esclavo. Slave Select tiene la misma funcionalidad que la selección de chip y se utiliza en lugar de un concepto de direccionamiento.
Nota: en un dispositivo solo esclavo, MOSI puede etiquetarse como SDI (entrada de datos en serie) y MISO puede etiquetarse como SDO (salida de datos en serie)
Los nombres de las señales anteriores se pueden usar para etiquetar los pines del dispositivo maestro y esclavo, así como las líneas de señal entre ellos, de manera inequívoca, y son los más comunes en los productos modernos. Los nombres de los pines siempre están en mayúscula, por ejemplo, "Selección de chip", no "Selección de chip".
Muchos productos pueden tener nombres de pin SPI no estándar:
Reloj serial:
- SCK
Salida maestra → Entrada esclava (MOSI):
- SIMO, MTSR: corresponden a MOSI en dispositivos maestros y esclavos, se conectan entre sí
- SDI, DI, DIN, SI - en dispositivos esclavos; se conecta a MOSI en el maestro oa las conexiones siguientes
- SDO, DO, DOUT, SO - en dispositivos maestros; se conecta a MOSI en esclavo, oa conexiones anteriores
Entrada maestra ← Salida esclava (MISO):
- SOMI, MRST: corresponden a MISO en los dispositivos maestro y esclavo, se conectan entre sí
- SDO, DO, DOUT, SO - en dispositivos esclavos; se conecta a MISO en el maestro oa las conexiones siguientes
- SDI, DI, DIN, SI - en dispositivos maestros; se conecta a MISO en esclavo, oa conexiones anteriores
Selección de esclavo:
- SS, SS , SSEL, nSS, / SS, SS # (selección de esclavo)
- CS, CS (selección de chip)
- CSN (selección / habilitación de chip)
- CE (habilitación de chip)
Operación
El bus SPI puede operar con un solo dispositivo maestro y con uno o más dispositivos esclavos.
Si se utiliza un solo dispositivo esclavo, el pin SS puede fijarse en lógica baja si el esclavo lo permite. Algunos esclavos 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 alta → baja. Con varios dispositivos esclavos, se requiere una señal SS independiente del maestro para cada dispositivo esclavo.
La mayoría de los dispositivos esclavos tienen salidas de tres estados, por lo que su señal MISO se vuelve de alta impedancia ( desconectada eléctricamente ) cuando el dispositivo no está seleccionado. Los dispositivos sin salidas de tres estados no pueden compartir segmentos de bus SPI con otros dispositivos sin utilizar un búfer de tres estados externo.
Transmisión de datos
Para comenzar la comunicación, el bus maestro configura el reloj, usando una frecuencia admitida por el dispositivo esclavo, típicamente hasta unos pocos MHz. El maestro luego selecciona el dispositivo esclavo con un nivel lógico 0 en la línea de selección. Si se requiere un período de espera, como para una conversión de analógico a digital, el maestro debe esperar al menos ese período de tiempo antes de emitir ciclos de reloj.
Durante cada ciclo de reloj SPI, se produce una transmisión de datos full-duplex. El maestro envía un bit en la línea MOSI y el esclavo lo lee, mientras que el esclavo envía un bit en la línea MISO y el maestro lo lee. Esta secuencia se mantiene incluso cuando solo se pretende la transferencia de datos unidireccional.
Las transmisiones normalmente involucran dos registros de desplazamiento de un tamaño de palabra dado, como ocho bits, uno en el maestro y otro en el esclavo; están conectados en una topología de anillo virtual. Los datos generalmente se desplazan con el bit más significativo primero. En el borde del reloj, tanto el maestro como el esclavo se desplazan un poco y lo envían a la línea de transmisión a la contraparte. En el siguiente borde del reloj, en cada receptor, se muestrea el bit de la línea de transmisión y se establece como un nuevo bit menos significativo del registro de desplazamiento. Una vez que los bits de registro se han desplazado hacia afuera y hacia adentro, el maestro y el esclavo 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 maestro deja de alternar la señal del reloj y, por lo general, anula la selección del esclavo.
Las transmisiones suelen constar de 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 analógico a analógico. -convertidores digitales. También se pueden conectar en cadena varios dispositivos SPI para conservar los pines.
Cada esclavo en el bus que no ha sido activado usando su línea de selección de chip debe ignorar el reloj de entrada y las señales MOSI y no debe manejar MISO (es decir, debe tener una salida triestado ) aunque algunos dispositivos necesitan búferes triestado externos para implementar esto.
Polaridad y fase del reloj
Además de configurar la frecuencia del reloj, el maestro también debe configurar la polaridad y la fase del reloj con respecto a los datos. La Guía de bloques SPI de Motorola [2] nombra estas dos opciones como CPOL y CPHA (para c lock pol arity y pha se) respectivamente, una convención que la mayoría de los proveedores también han adoptado.
El diagrama de tiempos se muestra a la derecha. La sincronización se describe con más detalle a continuación y se aplica tanto al dispositivo maestro como al esclavo.
- CPOL determina la polaridad del reloj. Las polaridades se pueden convertir con un simple inversor .
- CPOL = 0 es un reloj que está inactivo en 0 y cada ciclo consta de un pulso de 1. Es decir, el borde anterior es un borde ascendente y el borde posterior es un borde descendente.
- CPOL = 1 es un reloj que está inactivo en 1, y cada ciclo consta de un pulso de 0. Es decir, el borde anterior es un borde descendente y el borde posterior es un borde ascendente.
- CPHA determina la sincronización (es decir, la fase) de los bits de datos en relación con los pulsos de reloj. La conversión entre estas dos formas no es trivial.
- Para CPHA = 0, el lado "fuera" cambia los datos en el borde de salida del ciclo de reloj anterior, mientras que el lado "dentro" captura los datos en (o poco después) del borde de entrada del ciclo de reloj. El lado exterior contiene los datos válidos hasta el borde de salida del ciclo de reloj actual. Para el primer ciclo, el primer bit debe estar en la línea MOSI antes del borde del reloj principal.
- Una forma alternativa de considerarlo es decir que un ciclo CPHA = 0 consiste en un medio ciclo con el reloj inactivo, seguido de un medio ciclo con el reloj activado.
- Para CPHA = 1, el lado "fuera" cambia los datos en el borde anterior del ciclo del reloj actual, mientras que el lado "dentro" captura los datos en (o poco después) el borde posterior del ciclo del reloj. El lado exterior contiene los datos válidos hasta el borde de entrada del siguiente ciclo de reloj. Para el último ciclo, el esclavo mantiene la línea MISO válida hasta que se anula la selección de esclavo.
- Una forma alternativa de considerarlo es decir que un ciclo CPHA = 1 consiste en un medio ciclo con el reloj activado, seguido de un medio ciclo con el reloj inactivo.
Las señales MOSI y MISO suelen ser estables (en sus puntos de recepción) durante el medio ciclo hasta la siguiente transición de reloj. Los dispositivos maestro y esclavo SPI pueden muestrear datos en diferentes puntos de ese medio ciclo.
Esto agrega más flexibilidad al canal de comunicación entre el maestro y el esclavo.
Números de modo
Las combinaciones de polaridad y fases a menudo se denominan modos que se numeran comúnmente de acuerdo con la siguiente convención, con CPOL como bit de orden superior y CPHA como bit de orden inferior:
Para microcontroladores " Microchip PIC " / "basados en ARM" (tenga en cuenta que NCPHA es la inversión de CPHA):
Modo SPI | Polaridad de reloj (CPOL / CKP) | Fase de reloj (CPHA) | Borde de reloj (CKE / NCPHA) |
---|---|---|---|
0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
2 | 1 | 0 | 1 |
3 | 1 | 1 | 0 |
Para PIC32MX: el modo SPI configura los bits CKP, CKE y SMP. Configure el bit SMP y CKP, CKE dos bits configurados como en la tabla anterior.
Para otros microcontroladores:
Modo | CPOL | CPHA |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
Otra notación de uso común representa la moda como una tupla (CPOL, CPHA); por ejemplo, el valor '(0, 1)' indicaría CPOL = 0 y CPHA = 1.
Tenga en cuenta que en la operación Full Duplex, el dispositivo maestro podría transmitir y recibir con diferentes modos. Por ejemplo, podría transmitir en el Modo 0 y recibir en el Modo 1 al mismo tiempo.
Configuración esclava independiente
En la configuración de esclavo independiente, hay una línea de selección de chip independiente para cada esclavo. Esta es la forma en que se usa normalmente SPI. El maestro afirma solo una selección de chip a la vez.
Se recomiendan las resistencias pull-up entre la fuente de alimentación y las líneas de selección de chip para sistemas en los que los pines de selección de chip del maestro pueden estar predeterminados en un estado indefinido. [3] Cuando las rutinas de software independientes inicializan cada selección de chip y se comunican con su esclavo, las resistencias pull-up evitan que otros esclavos no inicializados respondan.
Dado que los pines MISO de los esclavos 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 esclavo no está seleccionado. Los dispositivos esclavos que no admiten tri-estado se pueden usar en una configuración esclava independiente agregando un chip de búfer de tres estados controlado por la señal de selección de chip. [3] (Dado que solo se necesita triestar una sola línea de señal por esclavo, se puede usar un chip lógico estándar típico que contiene cuatro búferes triestado con entradas de compuerta independientes para conectar hasta cuatro dispositivos esclavos a un bus SPI).
Configuración de conexión en cadena
Algunos productos que implementan SPI pueden conectarse en una configuración en cadena , la primera salida esclava está conectada a la segunda entrada esclava, etc. El puerto SPI de cada esclavo está diseñado para enviar durante el segundo grupo de pulsos de reloj una copia exacta de los datos que recibió durante el primer grupo de pulsos de reloj. Toda la cadena actúa como un registro de cambios de comunicación ; La conexión en cadena se realiza a menudo con registros de desplazamiento para proporcionar un banco de entradas o salidas a través de SPI. Cada esclavo copia la entrada a la salida en el siguiente ciclo de reloj hasta que la línea SS baja activa pasa a nivel alto. Esta característica solo requiere una única línea SS del maestro, en lugar de una línea SS separada para cada esclavo. [4]
Otras aplicaciones que potencialmente pueden interoperar con SPI que requieren una configuración en cadena incluyen SGPIO , JTAG , [5] y Two Wire Interface .
Configuración del expansor
Otra variación usa exactamente dos selecciones de chips. La selección de un chip controla un bloque de lógica de selección, el otro es enrutado por la lógica de selección. La aplicación es lo suficientemente común como para que haya multiplexores controlados en serie disponibles. [6] Esto puede estandarizar y preparar un conector para el futuro, de modo que un controlador pueda admitir muchos dispositivos con un cambio de software. Una aplicación similar empareja un multiplexor controlado en serie con un controlador de USB a SPI comercial, [7] controlado por una PC o un teléfono inteligente. Esto permite que muchos tipos de dispositivos electrónicos "tontos" sean controlados por computadoras económicas fabricadas en serie.
Modificaciones de alta confiabilidad
En entornos eléctricamente ruidosos, el estándar SPI tiene pocas señales y puede resultar económico reducir los efectos del ruido de modo común adaptando SPI para usar señalización diferencial de bajo voltaje . [8] Otra ventaja es que los dispositivos controlados pueden diseñarse para realizar un bucle para probar la integridad de la señal. [9]
Comunicaciones válidas
Algunos dispositivos esclavos están diseñados para ignorar cualquier comunicación SPI en la que el número de pulsos de reloj sea mayor que el especificado. A otros no les importa, ignoran las entradas adicionales y continúan cambiando 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 digital emitiendo una palabra de comando de un tamaño (quizás 32 bits) y luego obteniendo una respuesta de un tamaño diferente (quizás 153 bits, uno para cada pin en esa cadena de exploración).
Interrupciones
Los dispositivos SPI a veces usan otra línea de señal para enviar una señal de interrupción a una CPU host. Los ejemplos incluyen interrupciones de lápiz hacia abajo de 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 , [10] e inserciones de conectores de auriculares desde el códec de sonido en un teléfono celular. Las interrupciones no están cubiertas por el estándar SPI; su uso no está prohibido ni especificado por la norma. En otras palabras, las interrupciones están fuera del alcance del estándar SPI y, opcionalmente, se implementan independientemente de él.
Ejemplo de bit-banging del protocolo maestro
A continuación se muestra un ejemplo de bit-banging del protocolo SPI como maestro SPI con CPOL = 0, CPHA = 0 y ocho bits por transferencia. El ejemplo está escrito en el lenguaje de programación C. Debido a que este es CPOL = 0, el reloj debe bajarse antes de que se active la selección de chip. La línea de selección de chip debe estar activada, lo que normalmente significa estar bajada, para el periférico antes del inicio de la transferencia, y luego desactivada. La mayoría de los periféricos permiten o requieren varias transferencias mientras la línea seleccionada es baja; esta rutina se puede llamar varias veces antes de deseleccionar el chip.
/ * * Simultáneamente transmite y recibe un byte en el SPI. * * Se supone que la polaridad y la fase son ambas 0, es decir: * - los datos de entrada se capturan en el flanco ascendente de SCLK. * - los datos de salida se propagan en el flanco descendente de SCLK. * * Devuelve el byte recibido. * / uint8_t SPI_transfer_byte ( uint8_t byte_out ) { uint8_t byte_in = 0 ; uint8_t bit ; for ( bit = 0x80 ; bit ; bit >> = 1 ) { / * Desplazar un poco a la línea MOSI * / write_MOSI (( byte_out & bit ) ? HIGH : LOW ); / * Retraso durante al menos el tiempo de configuración del par * / retraso ( SPI_SCLK_LOW_TIME ); / * Elevar la línea del reloj * / write_SCLK ( HIGH ); / * Desplazar un poco desde la línea MISO * / if ( read_MISO () == HIGH ) byte_in | = bit ; / * Retraso de al menos el tiempo de espera del par * / delay ( SPI_SCLK_HIGH_TIME ); / * Baja la línea del reloj * / write_SCLK ( LOW ); } return byte_in ; }
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) brindan una buena integridad de la señal y alta velocidad
- Mayor rendimiento que I²C o SMBus . No se limita a ninguna velocidad máxima de reloj, lo que permite una velocidad potencialmente alta
- Completa flexibilidad de protocolo para los bits transferidos
- No limitado a palabras de 8 bits
- Elección arbitraria del tamaño, el contenido y el propósito del mensaje
- Interfaz de hardware extremadamente simple
- Requerimientos de energía típicamente más bajos que I²C o SMBus debido a menos circuitos (incluyendo resistencias pull up)
- Sin arbitraje o modos de falla asociados, a diferencia del bus CAN
- Los esclavos usan el reloj maestro y no necesitan osciladores de precisión.
- Los esclavos no necesitan una única dirección - a diferencia de I²C o GPIB o SCSI
- No se necesitan transceptores, a diferencia del bus CAN
- Utiliza solo cuatro pines en paquetes de IC y cables en diseños de placa o conectores, mucho menos que las interfaces paralelas
- Como máximo una señal de bus única por dispositivo (selección de chip); todos los demás son compartidos
- Las señales son unidireccionales, lo que permite un fácil aislamiento galvánico.
- Implementación de software simple
Desventajas
- Requiere más pines en paquetes IC que I²C , incluso en la variante de tres cables
- Sin direccionamiento en banda; Se requieren señales de selección de chip fuera de banda en buses compartidos
- La extensibilidad se reduce considerablemente cuando se requieren varios esclavos que utilizan diferentes modos SPI. El acceso se ralentiza cuando el maestro necesita reinicializar con frecuencia en diferentes modos.
- No hay control de flujo de hardware por parte del esclavo (pero el maestro puede retrasar el siguiente borde del reloj para reducir la velocidad de transferencia)
- Sin reconocimiento de esclavo de hardware (el maestro podría estar transmitiendo a ninguna parte y no saberlo)
- Por lo general, solo admite un dispositivo maestro (depende de la implementación del hardware del dispositivo)
- No se define ningún protocolo de verificación de errores
- Sin un estándar formal, no es posible validar la conformidad
- Solo maneja distancias cortas en comparación con RS-232 , RS-485 o CAN-bus . (Su distancia se puede ampliar con el uso de transceptores como RS-422 ).
- Los optoaisladores en la ruta de la señal limitan la velocidad del reloj para la transferencia MISO debido a los retrasos adicionales entre el reloj y los datos.
- Muchas variaciones existentes, lo que dificulta encontrar herramientas de desarrollo como adaptadores de host que admitan esas variaciones.
- SPI no admite el intercambio en caliente (agregar nodos dinámicamente).
- Las interrupciones deben implementarse con señales fuera de banda o falsificarse mediante sondeo periódico de manera similar a USB 1.1 y 2.0.
- Algunas variantes como dual SPI , SPI quad y buses en serie de tres hilos definidos a continuación son medio-duplex.
Aplicaciones
Los ahorros de espacio en la placa en comparación con un bus de E / S en paralelo son significativos y le han otorgado a SPI un papel sólido en los sistemas integrados. Eso 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 y con otros microcontroladores como AVR , PIC y MSP430 . Estos chips generalmente incluyen controladores SPI capaces de funcionar en modo maestro o esclavo. Los controladores AVR programables en el sistema (incluidos los en blanco) se pueden programar mediante una interfaz SPI. [11]
Los diseños basados en chips o FPGA a veces usan SPI para comunicarse entre componentes internos; los bienes raíces en chip pueden ser tan costosos como sus primos a bordo.
La capacidad de dúplex completo hace que SPI sea muy simple y eficiente para aplicaciones de un solo maestro / esclavo. Algunos dispositivos utilizan el modo dúplex completo para implementar un flujo de datos eficiente, rápido para aplicaciones tales como audio digital , procesamiento de señal digital , o canales de telecomunicaciones , pero la mayoría off-the-shelf virutas se adhieren a los protocolos de petición / respuesta semidúplex.
SPI se utiliza para hablar con una variedad de periféricos, como
- Sensores: temperatura, presión, ADC , pantallas táctiles, controladores de videojuegos
- Dispositivos de control: códecs de audio , potenciómetros digitales, DAC
- Lentes de la cámara: montura de lente Canon EF
- Comunicaciones: Ethernet , USB , USART , CAN , IEEE 802.15.4 , IEEE 802.11 , videojuegos portátiles
- Memoria: flash y EEPROM
- Relojes en tiempo real
- LCD , a veces incluso para gestionar datos de imágenes
- Cualquier tarjeta MMC o SD (incluida la variante SDIO [10] )
Para los sistemas de alto rendimiento, los FPGA a veces usan SPI para interactuar como esclavo de un host, como maestro de los sensores o para la memoria flash que se usa para arrancar si están basados en SRAM.
Aunque existen algunas similitudes entre el bus SPI y el protocolo JTAG (IEEE 1149.1-2013), no son intercambiables. El bus SPI está diseñado para la inicialización a bordo de dispositivos periféricos de alta velocidad, mientras que el protocolo JTAG está diseñado para proporcionar acceso de prueba confiable a los pines de E / S desde un controlador externo con parámetros de desviación y retardo de señal menos precisos. 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. [12]
SGPIO es esencialmente otra pila de aplicaciones (incompatible) para SPI diseñada para actividades particulares de administración de backplane. [ cita requerida ] SGPIO utiliza mensajes de 3 bits.
Estándares
El bus 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. Son comunes los diferentes tamaños de palabras. Cada dispositivo define su propio protocolo, incluso si admite comandos. Algunos dispositivos son de solo transmisión; otros son solo de recepción. Las selecciones de chips son a veces activas altas en lugar de activas bajas. Algunos protocolos envían primero el bit menos significativo.
SPI Bus fue originalmente definido por Motorola. El documento definitorio original fue Motorola Application Node AN991. Cuando Freescale se separó de Motorola, la responsabilidad de AN991 fue con Freescale. Cuando NXP adquirió Freescale, NXP también asumió la responsabilidad de AN991, que fue revisado por última vez en enero de 2002 como AN991 / D [13] y todavía sirve como el documento de definición "oficial" para SPI Bus.
Algunos dispositivos incluso tienen variaciones menores de los modos CPOL / CPHA descritos anteriormente. El envío de datos de esclavo a maestro puede utilizar el borde del reloj opuesto como maestro a esclavo. 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.
Algunos dispositivos requieren una señal de control de flujo adicional del esclavo al maestro, que indica cuando los datos están listos. Esto conduce a un protocolo de 5 hilos en lugar del habitual 4. Dicha señal de listo o habilitado suele estar 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 de los casos para el tiempo de respuesta del esclavo. 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. (Muchos maestros SPI no admiten esa señal directamente y, en cambio, dependen de retrasos fijos).
Muchos chips SPI solo admiten mensajes que son múltiplos de 8 bits. Dichos chips no pueden interoperar con los protocolos JTAG o SGPIO , o cualquier otro protocolo que requiera mensajes que no sean múltiplos de 8 bits.
También existen diferencias a nivel de hardware. Algunos chips combinan MOSI y MISO en una sola línea de datos (SI / SO); esto a veces se denomina señalización de "tres cables" (en contraste con el SPI normal de "cuatro cables"). Otra variación de SPI elimina la línea de selección de chip, administrando la entrada / salida de la máquina de estado del protocolo utilizando otros métodos. Cualquiera que necesite un conector externo para SPI define el suyo: UEXT , conector JTAG , zócalo de tarjeta Secure Digital , etc. Los niveles de señal dependen completamente de los chips involucrados.
SafeSPI [14] es un estándar industrial para SPI en aplicaciones automotrices. Su enfoque principal es la transmisión de datos de sensores entre diferentes dispositivos.
Herramientas de desarrollo
Al desarrollar o solucionar problemas de sistemas que utilizan SPI, la visibilidad a nivel de señales de hardware puede ser importante.
Adaptadores de host
Hay una serie de soluciones de hardware USB para proporcionar computadoras, que ejecutan Linux , Mac o Windows , capacidades de maestro o esclavo SPI. Muchos de ellos también proporcionan capacidades de programación o scripting (Visual Basic, C / C ++, VHDL, etc.).
Un adaptador de host SPI permite al usuario desempeñar el papel de maestro en un bus SPI directamente desde una PC. Se utilizan para sistemas integrados, chips (FPGA, ASIC y SoC) y pruebas, programación y depuración de periféricos.
Los parámetros clave de SPI son: la frecuencia máxima admitida para la interfaz en serie, la latencia de comando a comando y la longitud máxima de los comandos SPI. Es posible encontrar adaptadores SPI en el mercado hoy en día que admitan interfaces seriales de hasta 100 MHz, con una longitud de acceso prácticamente ilimitada.
Al ser el protocolo SPI 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, compatibilidad con el protocolo quad-SPI u otro protocolo serial personalizado que se derive de SPI [15] ) .
Analizadores de protocolo
Los analizadores de protocolo SPI son herramientas que muestrean un bus SPI y decodifican las señales eléctricas para proporcionar una vista de mayor nivel de los datos que se transmiten en un bus específico.
Osciloscopios
La mayoría de los proveedores de osciloscopios ofrecen disparo basado en osciloscopio y decodificación de protocolo para SPI. La mayoría admite SPI de 2, 3 y 4 cables. La capacidad de activación y decodificación se ofrece normalmente como un extra opcional. Se puede acceder a las señales SPI a través de canales de osciloscopio analógico o con canales digitales MSO. [dieciséis]
Analizadores lógicos
Al desarrollar o solucionar problemas del bus SPI, el examen de las señales de hardware puede ser muy importante. Los analizadores lógicos son herramientas que recopilan, analizan, decodifican y almacenan señales para que las personas puedan ver las formas de onda de alta velocidad en su tiempo libre. Los analizadores lógicos muestran marcas de tiempo de cada cambio de nivel de señal, lo que puede ayudar a encontrar problemas de protocolo. La mayoría de los analizadores lógicos tienen la capacidad de decodificar señales de bus en datos de protocolo de alto nivel y mostrar datos ASCII.
Términos relacionados
Controladores SPI inteligentes
Una interfaz de periféricos en serie en cola ( QSPI ; consulte también Quad SPI) es un tipo de controlador SPI que utiliza una cola de datos para transferir datos a través del bus SPI. [17] 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 asignados en memoria . Esta característica es útil en aplicaciones tales como control de un convertidor A / D . Otras características programables en QSPI son la selección de chips y la duración / retardo de la transferencia.
Los controladores SPI de diferentes proveedores admiten diferentes conjuntos de funciones; tales colas 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 ). [18] La mayoría de los controladores maestros SPI integran soporte para hasta cuatro selecciones de chip, [19] aunque algunos requieren que las selecciones de chip se gestionen por separado a través de líneas GPIO.
Microalambre
Microwire, [20] a menudo escrito como μWire , es esencialmente un predecesor de SPI y una marca comercial de National Semiconductor . Es un subconjunto estricto de SPI: semidúplex y utiliza el modo SPI 0. Los chips de microcableo 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 [21] es una mejora de Microwire y presenta comunicación full-duplex y soporte para los modos SPI 0 y 1. No hubo una mejora especificada en la velocidad del reloj serial.
Buses seriales de tres hilos
Como se mencionó, una variante de SPI usa una sola línea de datos bidireccional (salida esclava / entrada esclava, llamada SISO o salida maestra / entrada maestra, llamada MOMI) en lugar de dos unidireccionales (MOSI y MISO). Esta variante está restringida a un modo semidúplex. Suele utilizarse para piezas de menor rendimiento, como EEPROM pequeñas que se utilizan solo durante el inicio del sistema y ciertos sensores y Microwire. Pocos controladores maestros SPI admiten este modo; aunque a menudo se puede alterar fácilmente en el software.
SPI doble
Para los casos en los que no se usa la naturaleza full-duplex de SPI, una extensión usa 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 aún se transmiten en msbit 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: [22] [23]
- Los comandos de lectura dual aceptan el envío y la dirección del maestro en modo único y devuelven los datos en modo dual.
- Los comandos de E / S duales envían el comando en modo único, luego envían la dirección y devuelven los datos en modo dual.
Quad SPI
Quad SPI ( QSPI ; consulte también SPI en cola) va más allá de la 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. Una vez más, 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. [22] [23]
SQI Tipo 1: comandos enviados en una sola línea, pero direcciones y datos enviados en cuatro líneas
SQI tipo 2: comandos y direcciones enviados en una sola línea, pero datos enviados / recibidos en cuatro líneas
QPI / SQI
Ampliando aún más el cuádruple SPI, algunos dispositivos admiten un modo "cuádruple todo" en el que toda la comunicación se realiza en 4 líneas de datos, incluidos los comandos. [24] Esto se llama "QPI" [23] (no debe confundirse con Intel QuickPath Interconnect ) o "E / S cuádruple en serie" (SQI) [25]
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 mediante la transmisión de datos a doble velocidad . [26] [27]
Bus de interfaz periférica serie mejorada de Intel
Intel ha desarrollado un sucesor de su bus Low Pin Count (LPC) al que llama Bus de interfaz periférica serial mejorada, o eSPI para abreviar. Intel tiene como objetivo permitir la reducción en la cantidad de pines requeridos en las placas base en comparación con los sistemas que usan LPC, tener más rendimiento disponible que 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 que los periféricos LPC usaran concentradores de firmware), canaliza los pines fuera de banda anteriores a través del bus eSPI y permite a los diseñadores de sistemas compensar el costo y el rendimiento. [28] [29]
El bus eSPI puede compartirse con dispositivos SPI para guardar pines o separarse del bus SPI para permitir un mayor rendimiento, especialmente cuando los dispositivos eSPI necesitan usar dispositivos flash SPI. [28]
Este estándar define una señal de Alerta # que es utilizada por un esclavo eSPI para solicitar el servicio del maestro. En un diseño orientado al rendimiento o en un diseño con solo un esclavo eSPI, cada esclavo eSPI tendrá su pin de alerta # conectado a un pin de alerta # en el maestro eSPI que está dedicado a cada esclavo, lo que permite que el maestro eSPI otorgue baja latencia servicio porque el maestro eSPI sabrá qué esclavo eSPI necesita servicio y no necesitará sondear a todos los esclavos para determinar qué dispositivo necesita servicio. En un diseño de presupuesto con más de un esclavo eSPI, todos los pines de alerta # de los esclavos están conectados a un pin de alerta # en el maestro eSPI en una conexión con cable O , lo que requerirá que el maestro interrogue a todos los esclavos para determinar cuáles necesitan servicio cuando la señal de Alerta # es bajada por uno o más periféricos que necesitan servicio. Solo después de que se hayan reparado todos los dispositivos, la señal de Alerta # se elevará debido a que ninguno de los esclavos eSPI necesita servicio y, por lo tanto, la señal de Alerta # será baja. [28]
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 permitir a los diseñadores compensar el rendimiento y el costo. [28]
Todas las comunicaciones que estaban fuera de banda del bus LPC, como entrada / salida de propósito general (GPIO) y System Management Bus (SMBus), se canalizan a través del bus eSPI a través de ciclos de cables virtuales y ciclos de mensajes fuera de banda, respectivamente, en para eliminar esos pines de los diseños de la placa base mediante eSPI. [28]
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 de todo el rendimiento y el tiempo del bus en sobrecarga. El ciclo de memoria estándar permite una longitud de 1 byte a 4 kilobytes para permitir que su sobrecarga más grande se amortice en una transacción grande. Los esclavos eSPI pueden iniciar versiones maestras de bus de todos los ciclos de memoria. Los ciclos de E / S de bus maestro, que fueron introducidos por la especificación del bus LPC, y el DMA estilo ISA, incluida la variante de 32 bits introducida por la especificación del bus LPC, no están presentes en eSPI. Por lo tanto, los ciclos de memoria del maestro de bus son los únicos DMA permitidos en este estándar. [28]
Los esclavos eSPI pueden utilizar el maestro eSPI como proxy para realizar operaciones flash en un esclavo de memoria flash SPI estándar en nombre del esclavo eSPI solicitante. [28]
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. [28]
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 del estándar de 33 MHz. [30]
Ver también
- Lista de buses de la red
Referencias
- ^ "¿Qué es la interfaz síncrona en serie (SSI)?" . Consultado el 28 de enero de 2015 .
- ^ Guía de bloques SPI v3.06; Motorola / Freescale / NXP; 2003.
- ^ a b Mejor diseño de bus SPI en 3 pasos
- ^ Nota de aplicación Maxim-IC 3947: "Dispositivos SPI de conexión en cadena"
- ^ Interfaces , 1977, págs. 80, 84
- ^ "El multiplexor controlado en serie expande los puertos SPI" . Diseño Electrónico . Consultado el 14 de febrero de 2021 .
- ^ "Convertidor de USB a SPI" . FTDI . Consultado el 14 de febrero de 2021 .
- ^ "Transmisión de SPI sobre interfaces LVDS" (PDF) . Texas Instruments . Consultado el 14 de febrero de 2021 .
- ^ "Ejemplo de bucle invertido maestro SPI" . Semiconductor nórdico . Consultado el 14 de febrero de 2021 .
- ^ a b No debe confundirse con la línea SDIO (E / S de datos en serie) de la implementación semidúplex del bus SPI, a veces también llamado "bus SPI de 3 cables". Aquí, por ejemplo, MOSI (a través de una resistencia) y MISO (sin resistencia) de un maestro está conectado a la línea SDIO de un esclavo.
- ^ "AVR910 - Programación en el sistema" (PDF) . Archivado desde el original (PDF) en 2011-03-02.
- ^ IEEE 1149.1-2013
- ^ [1]
- ^ SafeSPI.org
- ^ SPI Storm - Adaptador de host de protocolo serie con soporte de protocolos serie personalizados, Byte Paradigm.
- ^ "N5391B I²C y protocolo SPI Disparo y decodificación para osciloscopios Infiniium" .
- ^ Manual de referencia del módulo serie en cola , Freescale Semiconductor (ahora NXP)
- ^ Por ejemplo, con la interfaz de puerto serie multicanal , o McSPI, que se utiliza en los chips OMAP de Texas Instruments.
- ^ Como el controlador SPI en chips Atmel AT91 como el at91sam9G20, que es mucho más simple que el McSPI de TI.
- ^ Nota de aplicación de semiconductores nacionales de interfaz serie MICROWIRE AN-452
- ^ Interfaz en serie MICROWIRE / PLUS para la nota de aplicación nacional de semiconductores de la familia COP800 AN-579
- ^ a b "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 .
- ^ a b c "D25LQ64 1.8V Uniform Sector Dual y 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 .
- ^ "Flash QuadSPI: modo Quad SPI frente al modo QPI" . Foros de la comunidad NXP . Diciembre de 2014 . Consultado el 10 de febrero de 2016 .
- ^ "SST26VF032B / SST26VF032BA 2.5V / 3.0V 32 Mbit Serial Quad I / O (SQI) Flash Memory" (PDF) (Hoja de datos). versión E. Microchip, Inc. 2017 . Consultado el 10 de febrero de 2017 .
- ^ Patterson, David (mayo de 2012). "Actualizaciones del módulo de interfaz periférica serie cuádruple (QuadSPI)" (PDF) (nota de aplicación). Semiconductor de Freescale . Consultado el 21 de septiembre de 2016 .
- ^ Pell, Rich (13 de octubre de 2011). "Mejora del rendimiento mediante memoria flash SPI-DDR NOR" . EDN .
- ^ a b c d e f g h Especificación básica de interfaz de interfaz periférica en serie mejorada (eSPI) (para plataformas 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 .
- ^ Especificación de interfaz de interfaz periférica serie 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 .
- ^ "Hoja de datos PCH de la familia de chipsets Intel® serie 100, Vol. 1" (PDF) . Consultado el 15 de abril de 2015 .
enlaces externos
- Intel eSPI (interfaz periférica serial mejorada)
- Introducción a los protocolos SPI e I2C
- Página de información de buses seriales
- Introducción a SPI
- Tutorial de SPI