Este artículo trata sobre la interfaz periférica en serie (SPI, del inglés Serial Peripheral Interface) y de los retos que plantea la integridad de la señal, todos ellos derivados de la impedancia de la interfaz y de las pistas que transportan señales digitales. Antes de entrar en el tema principal de este artículo, quiero responder a mi propia pregunta:
Cuando digo que "no hay un requisito de impedancia para las pistas de las SPI" y "50 ohmios... no es obligatorio", me refiero a que las SPI no especifican ningún requisito de impedancia en particular. Si observas otras pautas de diseño que afirman algo como que "las SPI necesitan una impedancia controlada", en realidad verás que a menudo no indican ningún valor concreto para la impedancia. En el mejor de los casos, te indicarán un intervalo de 30 a 150 ohmios. Este es un intervalo bastante grande (y no muy útil).
Hace poco vi otra nota de aplicación de un importante fabricante de semiconductores que indicaba que las líneas de las SPI necesitan una impedancia controlada y de emparejamiento de longitud, aparentemente ignorando los tiempos de configuración y la naturaleza full-duplex (dúplex completo o integral) de esta interfaz. Tampoco se mencionaba ningún valor para la impedancia ni para el valor de la tolerancia de desajuste de la longitud. En mi opinión, no es una directriz que sirva de mucho.
La realidad, es que las líneas de SPI solo necesitan un control de impedancia cuando la longitud de la interconexión es muy larga. Y, al no haber ningún requisito de impedancia específico en el bus, eso te da algo de libertad en el diseño y la terminación del canal. Entonces, ¿qué quiere decir exactamente "muy largo" y cuándo se necesita algún método de terminación? Lo explicaremos en este artículo.
La topología de una SPI es muy simple. Utiliza tres líneas con un único enlace periférico del controlador, o cuatro líneas donde hay varios esclavos en el bus. El controlador ascendente puede enviar y recibir datos a través de un par de líneas a una velocidad de hasta 60 Mbps, y es posible que los datos se envíen a través de un cable a otra placa o dispositivo. A continuación, se muestra la topología de un bus SPI típico.
Así pues, ¿qué ocurre en la PCB? Si observas las hojas de datos de un componente con una interfaz SPI, encontrarás valores mínimos de tiempo de subida de hasta 1 ns para componentes avanzados. Para algunos componentes, el tiempo de subida podría ser mucho más largo, de unos 20 ns o más. Evidentemente, un bus lento como la SPI puede seguir teniendo un comportamiento de señal de alta velocidad aunque la velocidad de datos y la velocidad de reloj sean bajas, ¡pero no hay ninguna especificación para la impedancia! ¿Cuál será, entonces, el mejor enfoque para los diseños de SPI?
Este problema en las SPI suele estar mal explicado y es uno de los escollos clásicos en el diseño de PCB de alta velocidad. Puesto que nos encontramos en una situación en la que necesitamos determinar si un enlace SPI es "rápido" o "lento", en términos del tiempo de subida, lo primero que tenemos que hacer es entender qué es que contribuye exactamente al tiempo de subida.
El primer paso es buscar en las hojas de datos el componente maestro que controlará el bus SPI. Si este componente está bien documentado, entonces se especificará el tiempo de subida en la interfaz SPI para una determinada capacidad de carga observada en el bus. Ten en cuenta que la "capacidad de carga" supone una inductancia cero en la conexión entre la salida SPI y la carga de prueba, de modo que puedes tratar este valor de tiempo de subida como una constante de tiempo RC en una primera aproximación.
Los valores del ejemplo anterior con alta capacidad de carga no son los habituales en la mayoría de los componentes, pero ilustran el aspecto principal: el tiempo de subida está determinado por la capacidad del bus. En este ejemplo, si tomamos el tiempo de subida de entre 10%-90% indicado anteriormente y lo equiparamos a un RC de 2,2 (el estándar utilizado para determinar los valores de la constante de tiempo), obtendríamos R = 113,6 como la resistencia observada en el bus. Esto significa que, si añadimos algo de resistencia al controlador (ver más abajo), podemos ralentizar el tiempo de subida y a la vez emparejar la impedancia.
Ten presentes estos puntos, porque más adelante los usaremos para entender por qué es posible utilizar la terminación de resistencia en serie para ralentizar el bus SPI. Ahora que conocemos el tiempo de subida del bus como se ve en el receptor, podemos determinar en qué casos el bus será "largo".
En una primera aproximación, podemos comparar la distancia que recorre la señal durante el tiempo de subida con la longitud total. Otro enfoque, es utilizar una estimación del ancho de banda del tiempo de subida (35 MHz en el ejemplo anterior) para determinar cuándo la impedancia de entrada del bus se desvía demasiado de una impedancia de carga, tal como he descrito en este artículo. La forma más sencilla de obtener una estimación aproximada es comparar la distancia recorrida por la señal durante su tiempo de subida con el retardo de la propagación de la interconexión.
Yo prefiero utilizar un límite conservador del 10% para estimar en qué momento el bus empieza a resultar largo. Si el retardo de la propagación es inferior a aproximadamente el 10% de la distancia recorrida durante el tiempo de subida de la señal, entonces el bus se considera corto y no necesitamos preocuparnos por eliminar la impedancia del bus:
Ten en cuenta que otras directrices establecen el límite entre el 10% y el 50%. No existe un valor exacto en el que, de repente, el bus se vuelva "largo", sino que es una cuestión de criterio. Por ejemplo, para una señal de SPI de 10 ns en una capa de PCB con Dk = 4, el valor límite del 10% es de 0,15 metros (15 cm). Esto significa que cualquier ruta de SPI con una señal de 10 ns inferior a 15 cm será considerada como un bus corto, lo que ocurre en muchas situaciones.
Si tienes un bus SPI lento, existen algunas directrices muy sencillas que puedes seguir para evitar algunos problemas básicos de integridad de la señal. Algunas de estas directrices sencillas que puedes utilizar para reducir simultáneamente la inductancia (que deriva en oscilaciones), la diafonía y las emisiones radiadas son:
Para mejorar el rendimiento, yo recomiendo no usar dos capas y en vez de ello empezar con un apilado (stackup) de PCB compatible con diseños digitales de alta velocidad.
En los casos en los que las líneas de la SPI deban tener una impedancia concreta, hay una buena razón para establecer que 50 ohmios sean la impedancia objetivo. Irónicamente, no creo que, en general, se sepa del todo cuál es la ventaja de hacerlo, pero terminan tomando la decisión correcta por las razones equivocadas.
Si 50 ohmios es el objetivo de impedancia característica para un bus SPI eléctricamente largo, es probable que haya otras pistas de impedancia controlada en la placa que también tengan como objetivo una impedancia característica de 50 ohmios. Tener un único objetivo de impedancia le permite al fabricante controlarla más fácilmente. Si tienes que intercambiar materiales en el apilado para alcanzar el objetivo de impedancia, es mucho más fácil de hacer si hay un objetivo único en el apilado.
Partiendo de lo que hemos visto antes, en la gran mayoría de las situaciones prácticas con una pista de SPI, no hay necesidad de tener terminación en el controlador o en el receptor. Si la hubiera, encontrarías alguna especificación de impedancia en las hojas de datos de los componentes, en la especificación de la SPI o en ambas. Además, es probable que los componentes tengan una terminación incorporada para la impedancia objetivo, por lo que no tendrías que preocuparte de colocar una resistencia.
La respuesta es bastante sencilla: ralentizar la señal emitida por el controlador. La resistencia también tiene la ventaja adicional de que amortigua las oscilaciones en la salida. Ten en cuenta que la selección de la resistencia, en este caso, no tiene nada que ver con la adaptación de la impedancia en casos con una línea eléctricamente corta.
Si el controlador es un componente avanzado, como una FPGA, y representa una instancia de interfaz SPI en ese controlador, el tiempo de subida puede ser muy corto porque la estructura física del dispositivo por sí misma ya garantiza tiempos de subida muy rápidos. Como resultado, puede ser conveniente reducir la velocidad de la señal, para que no tengas una señal rápida que genere diafonía. En ese caso, debes colocar la resistencia cerca del controlador.
No ralentices demasiado el tiempo de subida, de lo contrario, la señal será demasiado lenta para alternar la E/S en la carga y esta podría no leerse correctamente. También puedes incumplir los tiempos de configuración si el tiempo de subida es demasiado largo. Existe un sencillo modelo RLC que puede simularse para determinar el valor adecuado de la resistencia en serie.
El modelo real para un bus SPI es más complejo. Incluye los siguientes factores:
El bus corto básicamente se parece a este modelo LC:
La impedancia de origen es idealmente de 0 ohmios, aunque en realidad podría ser un valor bajo de entre 10 y 30 ohmios. La capacidad de carga debe especificarse en la hoja de datos del receptor.
Howard Johnson habla de esto en el sitio web de SigCon; se trata de un bus que puede exhibir una oscilación subamortiguada si se estimula con una señal rápida y si hay demasiada inductancia. También es posible simularlo en SPICE. En este caso, añadir una resistencia de serie aumenta la amortiguación, lo que reducirá el tiempo de subida.
Fíjate que he dejado la resistencia de la pista fuera de esta lista. La resistencia de la pista será muy pequeña, con lo que las pérdidas y amortiguación que provocará serán insignificantes. Esto se debe a que la resistencia de la pista es del orden de los miliohmios y la resistencia aproximada que rige el tiempo de subida puede ser de 10 a 100 ohmios, lo que hace que la resistencia de la pista sea insignificante.
En el caso de un bus largo (algo muy infrecuente), debes hacer coincidir la línea de la SPI con una impedancia objetivo (se recomiendan 50 ohmios). En este caso, simplemente comparando la oscilación de la señal en la E/S del SPI con la corriente, obtendrás un valor de resistencia para la señal en el estado ON. En este caso, la resistencia en serie necesaria para alcanzar un objetivo de 50 ohmios suele ser de 22 o de 33 de ohmios. Colócalo cerca del controlador para igualar la impedancia y reducir la velocidad de la señal tal como se describe aquí.
Otra razón para hacerlo es cuando se tienen varios componentes esclavos en el bus. En ese caso, igualarás la impedancia de entrada en cada tramo del bus y podrás ralentizar el tiempo de subida lo suficiente como para tener que preocuparte menos de la impedancia de entrada en las divisiones del bus. En general, es mejor dividir la línea más cercana al controlador, porque la impedancia de entrada de cada sección estará más próxima a la impedancia característica de la línea.
Algo que no hemos tratado en este artículo es el formato de señalización en la SPI. Si quieres más información sobre este aspecto del protocolo SPI, puedes leer este excelente resumen de Mark Harris:
Tanto si necesitas aplicar un requisito de impedancia a las pistas del SPI como si no, puedes crear las mejores placas gracias a las funciones de diseño y enrutamiento de PCB de 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.