Hoy en día existen muchas variantes de USB en el mercado, desde variaciones del propio protocolo hasta variaciones dentro del mismo. En este artículo examinaremos la interfaz ULPI (interfaz UTMI+ con pocos pines), que se encuentra en los PHY de los USB de alta velocidad (HS).
En comparación con la especificación y la interfaz de UTMI+, como su nombre indica, ULPI es una variante con un número inferior de pines de este bus. Esto nos ayuda como ingenieros de diseño de PCB, ya que no necesitamos enrutar y emparejar la longitud de tantas pistas. Esto es beneficioso para los diseños con restricciones de espacio, así como por razones de EMI.
ULPI es una interfaz de alta velocidad que permite que la aplicación final de USB HS alcance una tasa de bits máxima definida de 480 Mbps. Así pues, debemos tener cuidado con el enrutamiento para evitar problemas de EMI y SI.
Encontrarás un análisis más detallado sobre la interfaz ULPI en este vídeo.
Un PHY USB HS es, en pocas palabras, un punto de transición entre una interfaz ULPI y un par diferencial USB que capta un conector USB. La interfaz ULPI está expuesta a un CI compatible, como un microcontrolador avanzado, FPGA o sistema en chip (SoC).
La interfaz ULPI se compone de un bus de datos bidireccional de 8 bits de ancho (DATA[7:0]), una señal de reloj (CLK) a una frecuencia de 60 MHz y varias señales de control (DIR, STP, NXT).
Aunque la frecuencia de reloj de 60 Mhz puede parecer baja, debemos recordar que no nos preocupa necesariamente la frecuencia de reloj, sino los tiempos de subida y bajada.
Esto se debe al hecho de que esos flancos de nuestra señal digital de onda (casi) cuadrada contienen la mayoría de la información de alta frecuencia. Sin un análisis detallado, esto se ve fácilmente al observar la serie de fourier de una onda cuadrada, que se compone de la frecuencia fundamental (en nuestro caso, 60 MHz) y los armónicos impares que se extienden hasta el infinito con niveles de potencia decrecientes.
Lamentablemente, los tiempos de subida y bajada suelen ser difíciles de encontrar en la hoja de datos de un fabricante y deben extraerse a través de archivos IBIS. Por lo general, las hojas de datos solo nos ofrecen los tiempos de subida y bajada para "el mejor de los casos", lo que no resulta muy útil.
En cualquier caso, debido a este contenido de armónicos de alta frecuencia, así como a las restricciones de tiempo impuestas por la interfaz ULPI, debemos tener cuidado al enrutar.
Las señales ULPI requieren de control de la impedancia, ya que en las frecuencias en cuestión, y para las pistas más largas, estas actuarán como líneas de transmisión. Por lo tanto, la impedancia debe emparejarse con el conductor y el receptor.
Por lo general, necesitamos que las pistas de ULPI tengan una impedancia controlada de 50 ohmios. El cálculo de la impedancia para las pistas no forma parte de este artículo, sin embargo, Altium Designer tiene incorporada una calculadora de campo 2D muy práctica.
Tendrás que conocer la estructura de tu PCB e introducir esta información en el "Layer Stack Manager" de Altium Designer. A continuación, podrás ir a la pestaña "Impedancia" y dejar que Altium Designer calcule el ancho de la pista necesario para una impedancia determinada.
Resumiendo, el par diferencial USB de alta velocidad debe enrutarse con una impedancia diferencial de 90 ohmios.
Además de controlar la impedancia de las pistas, también debemos ajustar su retardo. La especificación ULPI, en combinación con las especificaciones de temporización de la hoja de datos PHY, se puede utilizar para determinar el balance de temporización.
Si nunca antes has calculado un balance de temporización, consulta la guía del usuario UG863 de Xilinx y, en particular, la sección USB2.0. Esto te dará los cálculos de la longitud máxima permitida para la pistas, así como las variaciones de retardo máximas entre las pistas de la señal ULPI y la pista CLK.
En cualquier situación en la que debas ajustar los retardos, recuerda tener en cuenta los retardos de los pines del encapsulado del controlador. En ocasiones, los retardos en los pines y encapsulados, como ocurría con las subidas y bajadas, pueden ser bastante difíciles de conseguir. Sin embargo, estos retardos de los encapsulados pueden ser del orden de centenas de picosegundos, lo que puede echar por tierra el balance de temporización en determinados casos.
Además, se debe tener en cuenta el retardo de la vía. Un método de enrutamiento sencillo que te permite ignorar el retardo de la vía es enrutar todas las pistas por igual. En esencia, esto significa usar el mismo número de vías y las mismas transiciones de capa para todas las señales ULPI.
Recuerda tener planos de referencia sólidos (preferiblemente, planos de 0 V) directamente adyacentes a tus pistas de señal. Preferiblemente, con un dieléctrico delgado en el medio. Además, no enrutes pistas ULPI sobre divisiones o vacíos en el plano de referencia.
Por último, siempre que haya una transición entre referencias y capas con una vía de señal, asegúrate de colocar una vía de "transición" (a 0 V) cerca de la vía de señal. Esto permite que, durante la transición del eje Z, la ruta de retorno siga estando bien definida y garantice una buena transición del plano de referencia.
El enrutamiento ULPI requiere atención cuando se trata de diseño y enrutamiento de PCB. Sin embargo, con algunas ideas y siguiendo las pautas de este artículo, también puedes crear diseños de ULPI que funcionen, al tiempo que evitas problemas de EMI y SI.
Altium Designer puede ayudarte a lograrlo con su avanzada calculadora de campos 2D para cálculos de impedancia, así como con sus herramientas de ajuste de las longitudes y retardos.