banner
Hogar / Blog / PCIe para hackers: el preludio de Diffpair
Blog

PCIe para hackers: el preludio de Diffpair

Sep 10, 2023Sep 10, 2023

PCIe, también conocido como PCI-Express, es una interfaz muy potente. Entonces, veamos qué se necesita para piratear algo tan poderoso. PCIe es un poco intimidante al principio, sin embargo, es razonablemente simple comenzar a construir cosas PCIe, y la interfaz es bastante resistente para la tecnología de nivel de aficionado. Llegará un momento en el que querremos usar un chip PCIe en nuestros diseños, o tal vez, hacer uso de la conexión PCIe disponible en un determinado módulo de cómputo, y es bueno asegurarse de que estamos listos para eso.

PCIe está en todas partes ahora. Cada computadora moderna tiene un montón de dispositivos PCIe que realizan funciones cruciales, e incluso los iPhones usan PCIe internamente para conectar la CPU con los chips flash y WiFi. Puede obtener todo tipo de dispositivos PCIe: controladores Ethernet, tarjetas WiFi de alto rendimiento, gráficos y todas las unidades NVMe económicas que con gusto le brindan un montón de almacenamiento cuando se conecta a través de PCIe. Si está pirateando una computadora portátil o una computadora de placa única y desea agregar un dispositivo PCIe, puede obtener PCIe de uno de los zócalos portadores de PCIe, o simplemente acceder a un enlace PCIe existente si no hay enchufe para conectar. Han pasado dos décadas desde que comenzamos a obtener dispositivos PCIe; ahora, PCIe está en su revisión 5.0 y está claro que llegó para quedarse.

PCIe es un bus punto a punto que conecta dos dispositivos, a diferencia de PCI, un bus más antiguo, que podría conectar una cadena de dispositivos en su placa base. Un lado de un enlace PCIe es un dispositivo y el otro es un host. Por ejemplo, en una computadora portátil, su CPU tendrá múltiples puertos PCIe: algunos se usan para conectar la GPU, otros se usan para conectar una tarjeta WiFi, algunos se usan para Ethernet y otros se usan para una unidad NVMe.

Cada enlace PCIe consta de al menos tres pares diferenciales: uno es un reloj de 100 MHz, REFCLK, que (casi) siempre se requiere para un enlace, y dos pares que forman un carril PCIe, uno para transmitir y otro para recibir. Este es un enlace x: también puede tener enlaces 2x, 4x, 8x y 16x, con cuatro, ocho dieciséis y treinta y dos pares diferenciales respectivamente, más, nuevamente, REFCLK. ¡Cuanto más ancho sea el enlace, mayor será su rendimiento!

Ahora, los anchos de enlace en PCIe son un tema divertido con muchos aspectos interesantes, pero primero, sería bueno asegurarse de que estamos en la misma página cuando se trata de lo que significa "par diferencial" en el contexto de PCIe. Aquí en Hackaday, te hemos contado sobre el meollo de los pares diferenciales antes. ¡Revisa absolutamente ese artículo si quieres aprender sobre los pares diferenciales en profundidad! Aquí, lo refrescaré rápidamente sobre los conceptos básicos y luego le diré lo que necesita saber cuando trabaje con pares diferenciales para PCIe específicamente.

En pocas palabras, un par diferencial son dos señales, una siempre opuesta a la otra, una generalmente denominada positiva y otra negativa. Obtiene el nivel lógico del bit que se transmite al comparar las dos señales entre sí, en lugar de comparar el nivel lógico de cada señal individual a tierra como lo hacemos habitualmente, lo que se conoce como "extremo único". Con un par diferencial, las señales están cerca unas de otras e incluso se entrecruzan cuando se trata de cables y, como resultado, cualquier interferencia afecta a las señales por igual; dado que las señales se comparan entre sí para recibir información, esto significa que la información recibida no se ve afectado por el ruido superpuesto a ambas señales. Los pares diferenciales también hacen que los campos magnéticos de ambas señales se cancelen entre sí, lo que hace que el enlace sea menos ruidoso.

Como resultado, los pares diferenciales le permiten aumentar la velocidad de la transmisión sin generar ruido ni volverse susceptible al ruido. Como resultado, la gran mayoría de las interfaces de alta velocidad utilizan pares diferenciales: Ethernet, PCIe, HDMI, DisplayPort, LVDS e incluso USB, aunque USB 2 es solo pseudodiferencial, USB 3 es verdaderamente diferencial. Las interfaces resistentes como RS485 y CAN también usan pares diferenciales. Es fácil para un aficionado comenzar con pares diferenciales con interfaces como CAN, y USB 2 tampoco presenta ningún problema: en distancias cortas, funcionarán sin importar qué, a pesar de ser señales diferenciales y, en teoría, requieren un tratamiento especial.

Dicho esto, los pares diferenciales, de hecho, requieren un poco más de cuidado al enrutar una PCB o colocarlos a través de cables. Si no tiene cuidado, corre el riesgo de fallas misteriosas o de que las interfaces no funcionen. Vamos a repasar estos requisitos.

En primer lugar, desea mantener las dos señales del par cerca una de la otra a lo largo de su duración. Cuanto más cerca estén las dos señales, mejor funcionará la cancelación de la interferencia externa y menos ruido irradiarán; dado que, a menudo, varios pares diferenciales se ejecutan uno al lado del otro, esto también ayudará a la integridad de la señal de otros pares. Hablando de ejecutar pares de diferenciales separados uno al lado del otro, querrá mantenerlos alejados entre sí y otras cosas, ya sean rellenos de tierra en la misma capa, señales de alta frecuencia. Una gran regla general es la regla de 5W, que dice que debe tener al menos un espacio libre de cinco trazos de ancho entre el centro de trazo de un par diferencial y otras señales. No siempre tienes tanto espacio, pero es bueno adherirse a esto tanto como sea posible.

También querrá asegurarse de que haya una ruta de tierra ininterrumpida justo debajo de estas señales, junto con todo el par; tener un relleno de tierra es ideal. Aunque el receptor compara las dos señales entre sí, cada señal aún se comporta como una señal de un solo extremo con respecto a la corriente de retorno. Además, un poco de protección adicional ciertamente no hace daño. Si está colocando PCIe en un conector personalizado, asegúrese de que haya al menos un pin GND entre cada par. Por último, pero no menos importante, asegúrese de que ambas pistas dentro de un par tengan la misma longitud. Si su par cambia su ángulo, una de sus dos pistas se vuelve ligeramente más corta, y su herramienta de par diferencial del editor de PCB debería permitirle agregar un 'meneo' a esa pista para asegurarse de que ambas longitudes de pista sean iguales.

Luego, está el asunto del que se habla poco: la coincidencia de impedancia. Si está obteniendo un par diferencial del punto A al B, querrá asegurarse de obtener la impedancia correcta, y los conceptos básicos son más simples de lo que piensa. La impedancia es como la resistencia, pero para señales que cambian. Cada parte de la ruta de viaje del par diferencial tiene su propia impedancia: el receptor y el transmisor dentro de los circuitos integrados utilizados, los pines del circuito integrado, las trazas de PCB y cualquier conector o cable en el medio si coloca el par diferencial a través de estos. En cualquier punto donde cambia la impedancia de la señal, una parte de la señal se refleja desde el punto de desajuste, y si el cambio de impedancia es lo suficientemente significativo, esto arruinará su señal a medida que se recibe.

Ahora, esto significa que debe asegurarse de que la impedancia de su enlace PCIe sea buena a lo largo de todo su recorrido, lo que, en la práctica, significa elegir los conectores adecuados y ajustar los anchos y espacios de los trazos de su PCB. El hardware PCIe se construye principalmente con una impedancia de 85 Ω en mente. Cosas como receptores, transmisores y conectores destinados a PCIe están fuera de su control, y para que la impedancia de toda la ruta sea razonablemente uniforme, debe ajustar las partes bajo su control al mismo valor. Para empezar, si tiene que usar conectores para su enlace PCIe, elija aquellos que no tengan una falta de coincidencia de impedancia demasiado significativa. Una buena apuesta es usar conectores de alta velocidad o conectores creados con señales similares a PCIe: PCIe de tamaño completo, M.2, mPCIe, USB3, USB-C y muchas familias de conectores de alta velocidad de varios fabricantes.

Ahora a ajustar la impedancia de las trazas de PCB de su par diferencial. La impedancia del par diferencial depende de muchas variables en realidad, pero si eres un hacker que está comenzando, hay calculadoras simplificadas que te ayudan a llegar hasta allí. Esta es mi favorita. Desplácese hacia abajo hasta "Microbanda de superficie acoplada al borde", deje la altura de la pista en 35 para enrutar pares de diferencias en capas de cobre de 1 oz, deje la constante dieléctrica en 4,3 a menos que su fábrica de PCB le dé un valor diferente. Luego, configure la altura de aislamiento a la distancia de sus pares diferenciales; para obtener eso, vaya a la información del fabricante de su PCB y busque la información de apilamiento de PCB. Digamos que sus pares diferenciales están en la capa superior y el suelo está en la capa justo debajo de ellos. Para eso, busque el espesor de "preimpregnado" entre la capa superior de cobre y la capa debajo de ella; ese valor será su altura de aislamiento. Luego, juegue con los anchos y espacios de las pistas, buscando una impedancia diferencial de 85 ohmios. ¡La especificación te da un rango de 70 a 100 ohmios, incluso!

Ejercicio práctico: veamos la acumulación de 4 capas de OSHPark. Su constante dieléctrica (dk) es 3,6, y nuestro ancho y espaciado de traza mínimos son ambos de 5 mil, que es 0,127 mm, o 127 μm para los propósitos de la calculadora; el espesor del preimpregnado es de 202 μm. Ingrese la constante dieléctrica y los espesores de preimpregnado en la calculadora, luego juegue con los valores.

Descubrirá que al aumentar el ancho de la pista disminuye la impedancia, al igual que al reducir el espaciado de la pista; ajústelo al mínimo posible. Como verá, si elige ceñirse a 85 ohmios, puede optar por pares de 0,3/0,127 (ancho/espaciado) y obtener 84,8 ohmios, mucho más que lo suficientemente cerca. si no puede pagar pistas tan anchas, use 0.2/0.127 para llegar a 106 Ω, un poco fuera del rango recomendado, pero si es necesario, ¡también está bien!

Lo último: mantenga su enrutamiento limpio. No coloque los pares diferenciales a través de vías a diferentes capas si puede evitarlo: cada par de vías agrega algo de inductancia a la señal, lo que puede interferir con las señales de alta velocidad. Por lo general, los puntos final e inicial de su enlace PCIe están en la capa superior; manténgalo así tanto como pueda. Si debe cambiar de capa, agregue algunas vías conectadas a tierra cerca de los pares diferenciales. Además, mantenga otras señales ruidosas o de alta velocidad que cambien rápidamente lo más lejos posible de los pares diferenciales. Si tiene conexiones de alta potencia, de par diferencial y de un solo extremo en sus proyectos, primero diseñe los pares diferenciales.

Entonces, cinco cosas importantes: enrute los pares diferenciales con señales cerca uno del otro, mantenga la conexión a tierra debajo de ellos, use los conectores adecuados, ajuste el ancho y el espacio de la pista diferencial para la impedancia PCIe y mantenga su enrutamiento limpio. Estos son los conceptos básicos: es lo que se espera que hagas si quieres que tus pares diferenciales te sirvan bien.

Ahora, si alguna vez ha jugado con PCIe, es posible que se haya topado con algún conocimiento prohibido: en la práctica, realmente no tiene que hacer todo lo anterior.

Es posible que haya escuchado que PCIe se ejecuta sobre una cadena húmeda: la primera referencia conocida a esto se encuentra en una presentación de 2016 sobre la piratería de consolas en 33C3. Esta es la forma bravuconada de los piratas informáticos de hablar sobre PCIe: puede equivocarse con muchas de las pautas antes mencionadas al conectar dispositivos PCIe, y seguirá funcionando. Y, como era de esperar, hay una gran parte de la verdad: PCIe seguirá funcionando en condiciones subóptimas, ¡y hay un ejemplo tras otro en los mundos de los piratas informáticos y los consumidores! Quizás el ejemplo más ampliamente disponible de abuso de PCIe es pasar un enlace PCIe 1x usando cableado USB3, algo que hacen los elevadores PCIe de "minería", lo que significa que puede ir a su tienda de accesorios de computadora y comprar un producto que solo es posible gracias a algún abuso de PCIe.

Otra cosa que quizás hayas visto y olvidado como un mal sueño es [TobleMiner] colocando un enlace PCIe x8, estremeciendo, creando prototipos de cables, con el fin de probar una idea de adaptador para tarjetas de red de alta velocidad baratas de servidores HP. , no es compatible con las ranuras PCIe regulares tanto en lo que respecta al pinout como mecánicamente. ¡Esa configuración de creación de prototipos le permitió diseñar una versión adecuada del adaptador, que luego cubrimos aquí en Hackaday! Puede colocar un enlace PCIe a través de un FPC para una conexión de placa a placa rápida y sucia, los extensores de eGPU también han usado cables HDMI para esto, y es probable que pueda hacerlo funcionar con un cable magnético. Aquí hay un experimento de Linus Tech Tips en el que siguieron apilando extensores PCIe y alcanzaron una cadena de cinco metros de largo antes de que la conexión comenzara a volverse inestable.

PCIe es un poco más indulgente que muchas otras interfaces, por ejemplo, USB3. Existen mecanismos de entrenamiento de enlaces: cuando se establece una conexión PCIe, el receptor y el transmisor juegan con sus parámetros internos, ajustándolos hasta que alcanzan la velocidad más alta posible mientras mantienen la tasa de error baja, utilizando estos parámetros para toda la conexión después. También hay retransmisiones de paquetes que no se recibieron. PCIe tiene una estabilidad excepcional en la práctica.

Está claro que el entrenamiento de enlace PCIe tiene algunas partes únicas; por ejemplo, para ayudarlo a mejorar su diseño, PCIe también le permite invertir cualquier par diferencial, excepto REFCLK, intercambiando las señales negativas y positivas, y esto será detectado y perfectamente compensado durante el entrenamiento del enlace. Otras tecnologías como USB3, HDMI o DisplayPort no son compatibles con estas características de calidad de vida de ingeniería. Otras interfaces a menudo requieren que varios carriles tengan la misma longitud, lo que garantiza que los datos en un conjunto de pares no lleguen más rápido que en el otro. Sin embargo, PCIe también está bien con los desajustes entre pares, y también los detecta y compensa durante el entrenamiento del enlace. Estos dos no están destinados a ser características de resiliencia tanto como características de facilidad de diseño destinadas a ayudarlo a diseñar PCB más rápido y mejor, pero sin duda ayuda que estén allí.

¿Esta resiliencia ayuda a los piratas informáticos? Sí, por supuesto: estas dos funciones fáciles de diseñar se utilizan básicamente en cualquier diseño de PCIe profesional y, si se encuentra en condiciones menos estériles, puede impulsar PCIe aún más bajo su propio riesgo. Por otro lado, no se limite a eludir todas las reglas porque haya visto a alguien hacer eso: haga un esfuerzo de buena fe para seguir estas cinco pautas, incluso si está limitado a una PCB de dos capas y es posible que nunca obtenga la valor de la impedancia perfecta. Seguir estas reglas no solo le enseñará algo de disciplina de par diferencial para proyectos posteriores, sino que hará que sus señales PCIe sean más resistentes y sin errores, y que sus dispositivos PCIe sean más felices. Puede sentirse bien descartar todas o algunas de estas pautas, ya que a veces puede funcionar, pero la media hora adicional calculando la impedancia adecuada en su placa lo ayudará a asegurarse de que su PCB no necesite una segunda revisión y se mantenga fiel a sus intereses a lo largo de toda su vida.

Entonces, aquí hay una guía: trate sus pares diferenciales PCIe con respeto. Si está utilizando una placa de circuito impreso de dos capas y está haciendo un prototipo económico y desea un tiempo de respuesta rápido, no renuncie a la impedancia porque las trazas tendrían que ser demasiado anchas para alcanzar los 85 ohmios. abra la calculadora y vea cuánto puede reducir la impedancia de todos modos. Reducir la altura de aislamiento reduce la impedancia, así que considere optar por una PCB de 0,8 mm si los aspectos mecánicos de su proyecto se lo permiten. Mueva sus componentes si eso ayuda a que sus pistas PCIe sigan un mejor camino, con menos ruido en el camino. Tal vez el entrenamiento de enlaces derribe un enlace imperfecto por una generación o dos, pero eso es mejor que no lograr un enlace estable en absoluto. Pon tu mejor esfuerzo siguiendo estas pautas con lo que te dan, y los pares diferenciales respetarán tus intenciones a cambio.

Por ejemplo, si está utilizando KiCad, aquí hay una demostración simple sobre cómo obtener un enlace PCIe 1x de un punto a otro, enrutando pares diferenciales mientras se ocupa de la impedancia, las holguras y la unión de vías.

Ahora, verá lo que se necesita para enrutar pares diferenciales PCIe en una placa, y estas pautas se aplicarán a todo tipo de otras interfaces basadas en pares diferenciales. La próxima vez, le contaré más sobre los significados de la señal PCIe, los anchos de enlace y el rendimiento: los conceptos básicos, así como todas las sorpresas agradables que PCIe puede ofrecerle. Y, si está buscando profundizar en lo que hace que PCIe funcione, consulte este artículo anterior nuestro: ¡es perfecto si lo que está buscando es fabricar sus propios dispositivos PCIe con FPGA!