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).
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:
Claramente, el protocolo I2c y SPI son muy similares. Tienen algunas diferencias importantes, que se resumen en la siguiente tabla:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
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:
Si buscas en Octopart y usas las funcionalidades de filtro, podrás localizar algunas memorias de alta capacidad que usan cualquiera de las interfaces.
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:
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.
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.
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.