SPI vs I2C: Cómo elegir el mejor protocolo para tus chips de memoria

Creado: February 9, 2018
Actualizado: November 1, 2023
protocolo SPI vs. protocolo i2C

El SPI y el I2C son, probablemente, los protocolos digitales más utilizados para conectar circuitos integrados en una amplia gama de productos. Tanto el protocolo SPI como el I2C son protocolos digitales en serie fáciles de usar (y difíciles de averiar), y son bastante sencillos de enrutar desde el punto de vista de la integridad de la señal. A diferencia de los protocolos serie diferenciales de alta velocidad controlados por impedancia, estos dos protocolos no tienen una especificación de impedancia y suelen considerarse eléctricamente cortos. Esto significa que, en la PCB, los requisitos de diseño son relativamente sencillos y sigue habiendo cierta libertad dentro del estándar para ajustar el rendimiento como se desee.

Una de las aplicaciones habituales de los protocolos SPI e I2C en un diseño de PCB es como protocolo de lectura y escritura en una memoria flash externa. Los chips flash son un componente muy común en los sistemas integrados y pueden ofrecer altas capacidades de memoria no volátil, llegando hasta valores de gigabytes. A la hora de elegir un chip de memoria, es conveniente que los requisitos de la aplicación y la funcionalidad coincidan con la velocidad de bus necesaria para las operaciones de lectura y escritura en el chip de memoria. También está la cuestión del tipo de memoria flash a la que necesitarás acceder (NOR frente a NAND).

Comparación entre los protocolos SPI e I2C

Los protocolos Serial Peripheral Interface (SPI) e Inter-Integrated Circuit (I2C) son protocolos digitales serie sencillos que operan a velocidades de bajas a moderadas. Estas dos interfaces tienen algunas características comunes:

  • Usan más de un cable para enviar/recibir datos.
  • El reloj está sincronizado con la fuente, lo que significa que hay una sola pista que lleva la línea del reloj.
  • Otros chips en el bus son direccionables o conmutables.
  • La mayoría de los microcontroladores tendrán una o ambas interfaces integradas.
  • El nivel de señal se puede establecer por la tensión del núcleo dado al chip.
  • Ninguna de estas interfaces tiene un requisito de impedancia.

Claramente, el protocolo I2c y SPI son muy similares. Tienen algunas diferencias importantes, que se resumen en la siguiente tabla:

 

I2C

SPI

Nombres de red

- Datos en serie (SDA)

- Reloj en serie (SCL)

- Master-in, slave-out (MISO)

- Master-out, slave-in (MOSI)

- Reloj en serie (SCK o SCLK)

- Selección de chip (CS, opcional)

Topología

- Topología del bus de transmisión

- MISO/MOSI/SCK compartidos

- Estrella para pines CS

Velocidad de datos

- Modo estándar: hasta 100 kbps

- Modo rápido: hasta 400 kbps

- Modo rápido plus: hasta 1 Mbps

- Modo de alta velocidad: hasta 3,4 Mbps

- Fijado por tiempo de ventana de reloj, alcanza hasta 60 Mbps.

Tiempos de subida/bajada

- Depende de la capacitancia del bus y de los valores de resistencia de extracción (utilizar la constante de tiempo RC).

- Especificado para una impedancia de carga determinada.

Se dirige a

- Pines de dirección fijados en cada componente.

- Pines CS utilizados en el controlador principal para conmutar los chips (se pueden conmutar con los GPIO o con pines CS dedicados).

Direccionalidad - Semidúplex - Dúplex integral
Conducción de señal - Open-drain - Push-pull (con búfer CMOS).

 

El estándar SPI ofrece tasas de datos más altas y puede ejecutarse con frecuencias de flanco mucho más rápidas en comparación con el protocolo I2C. Debido al uso de los pull-up en el I2C, a la capacitancia de bus habitualmente alta y al hecho de que el método de conducción sea open-drain, los buses I2C pueden tener tiempos de subida de cientos de nanosegundos. Los buses SPI pueden tener tiempos de subida tan bajos como 1 ns para componentes avanzados que manejan capacitancias de carga baja, lo que significa que pueden presentar una oscilación transitoria durante la conmutación. Las líneas SPI también tienen muchas más probabilidades de producir diafonía, porque su velocidad de conmutación es muy rápida. Para obtener más información sobre estos dos protocolos y la integridad de la señal en los buses SPI, lee los recursos a continuación.

Consideraciones importantes al elegir entre los protocolos SPI e I2C para chips de memoria

Acceso a memorias flash NAND vs. NOR

En esta sección no quiero entrar en los detalles de las memorias flash NAND vs. NOR, sino que quiero centrarme en cómo se accede a cada una con un protocolo serie. Se puede acceder a ambos tipos de chips flash con un bus SPI o I2C, si se adquiere el componente de memoria adecuado:

  • Flash NOR: Se accede a ellos mayoritariamente a través del protocolo SPI, incluso en chips flash más pequeños y lentos. Existen chips más lentos a los que se puede acceder mediante el protocolo I2C.
  • Flash NAND: Se accede a ellos mayoritariamente a través de un bus paralelo, pero los chips con buses I2C y SPI están disponibles en aproximadamente el mismo número.

Si buscas en Octopart y usas las funcionalidades de filtro, podrás localizar algunas memorias de alta capacidad que usan cualquiera de las interfaces.

Puente de interfaz I2C a SPI para memorias

Si necesitas alternar entre una interfaz I2C y una SPI, puedes usar un puente de interfaz. Estos componentes convierten el formato de los datos entre estas interfaces, por lo que un componente que solo pueda tener un bus SPI puede acceder a componentes periféricos que solo tengan un bus I2C. Esto incluye los chips de memoria, aunque si el controlador solo utiliza I2C y la memoria utiliza SPI, la velocidad podría ser limitada y el componente receptor podría no funcionar debido a los largos tiempos de subida.

Para superar esta limitación con I2C, es mejor usar un controlador con SPI y luego usar el puente de interfaz para acceder a un periférico que solo tenga I2C. Ten en cuenta que el lado SPI tendrá que sincronizarse más bajo para garantizar que se pueda usar a velocidades I2C. Esto se haría con la siguiente topología:

Puente de interfaz SPI vs. I2C
Configuración preferente donde se necesita un puente de interfaz SPI a I2C.

Conversión de nivel

Otro requisito común en los protocolos serie open-drain y push-pull (donde el nivel de señal está establecido por la tensión del núcleo) es el desplazamiento de nivel. La forma más sencilla de construir una PCB es con una sola fuente de alimentación regulada hasta la tensión del núcleo deseado, por ejemplo, con un LDO. En realidad, es posible que tengas algunos periféricos que funcionen a una tensión más alta (por ejemplo, 3,3 V), mientras que el controlador principal funciona a una tensión más baja con múltiples rieles (2,5 V, 1,8 V, etc.). Si tu MCU funciona a 3V3 pero tu memoria funciona a 1V8 (esta es una situación común), tendrás que enrutar tus señales SPI o I2C a través de un convertidor de nivel. Ten en cuenta que algunos puentes de interfaz incluirán un convertidor de nivel que se conecta a dos rieles de alimentación. La topología se muestra a continuación.

Conversión de nivel protocolo SPI vs. I2C
Topología usada en las divisiones de nivel.

Una vez que localizados los componentes para tu diseño de PCB, ¿cómo decidir entre una interfaz SPI o I2C? Aquí hay algunos puntos que te ayudarán en la decisión:

Velocidad: Cuando transfieres datos de forma masiva o tienes una ventana estrecha para verificar la entrada del usuario con los datos almacenados en un chip de memoria, cada microsegundo cuenta. Si necesitas capacidad de lectura y escritura repetida en tiempo real con el resto del sistema, utiliza el protocolo SPI. Si el controlador solo necesita leer o escribir ocasionalmente desde la memoria, usa el protocolo I2C.

Controlador: Si utilizas un MCU o un periférico muy pequeño y tienes muy pocos pines de sobra, entonces deberías optar por la interfaz I2C. De hecho, probablemente no tendrás otra opción con algunos microcontroladores. Por ejemplo, los MCU ATTiny clásicos solo tienen I2C, por lo que si necesitan datos de una memoria externa, tendrás que encontrar un chip de memoria que admita I2C.

Energía: Si estás diseñando un dispositivo con batería que necesita acceder repetidamente a los datos, puedes optar por SPI, ya que la interfaz utilizará menos energía (de media) que una interfaz I2C.

Si la velocidad importa, elige el protocolo SPI.
Si la velocidad importa, elige SPI.

Los enrutamientos SPI e I2C son mucho más fáciles cuando se utiliza el conjunto completo de funcionalidades de diseño y enrutamiento de PCB en Altium Designer®. Cuando hayas terminado el diseño y desees enviar los archivos al fabricante, la plataforma Altium 365 te facilitará la colaboración y el uso compartido de los proyectos.

Esto es solo una muestra de todo lo que es posible hacer con Altium Designer en Altium 365. Empieza hoy mismo tu prueba gratuita de Altium Designer + Altium 365.

Recursos Relacionados

Documentación técnica relacionada

Volver a la Pàgina de Inicio
Thank you, you are now subscribed to updates.