¿Cómo funcionan los buses de expansión de tu PC?

Desde los albores del ordenador personal, no con el IBM PC sino con el Altair del MITS que los ordenadores personales tienen diferentes de diferentes tipos y formas, pero todos bus de expansión sigue una serie de normas comunes en su funcionamiento independientemente del tipo de la interfaz de la que estemos hablando. Es por ello que os hemos hecho un artículo con las reglas comunes de los puertos de expansión.

Independientemente de si conectamos la impresora al puerto USB, la tarjeta gráfica al puerto PCI Express o el disco duro al puerto SATA, todos ellos siguen una serie de normas comunes que les permiten interactuar con el resto del sistema, las cuales os vamos a definir aquí, para que tengáis un mejor conocimiento de los puertos de expansión en general y no de uno solo en concreto.

1ª norma de un bus de expansión: serial o paralelo

puertos expansión series paralelo

Un puerto de expansión puede transmitir datos en serie o en paralelo. Cuando decimos que transmite datos en serie estamos diciendo que el puerto tiene un solo pin de datos que envía un bit de información por ciclo de reloj.

Un puerto de expansión en paralelo en cambio envía varios bits de manera simultánea, pero para ello requiere una mayor cantidad de pines y por tanto su interfaz es mucho más ancha. Por lo que la interfaz física de dicho puerto ocupará muchos más pines y por tanto un área mayor. ¿La consecuencia, chips más grandes al estar dichas interfaces en el perímetro externo.

Debido a que el consumo de la transferencia de datos aumenta exponencialmente con el ancho de banda, se suelen utilizar para altos anchos de banda interfaces en paralelo y pata bajos anchos de banda las seriales. No obstante todas las interfaces contienen una interfaz SerDes que la acompaña dentro del procesador, dicha interfaz convierte la señal de paralelo a serie y por tanto serializa y también el caso contrario. Esto ocurre dentro del procesador y antes de enviar o recibir la señales, dado que los consumos energéticos dentro de la CPU son mucho más bajos.

2ª norma de un bus de expansión: dirección

Duplex Simplex Puertos Expansión

Las primeras interfaces solían ir en general en una sola dirección, en especial para los periféricos de entrada donde se conectaban ratones y teclados. Al fin y al cabo un teclado no necesita procesar datos y lo mismo ocurría con los puertos de salida como era el de la salida de vídeo.

Pero para ciertos periféricos es necesario que exista la comunicación en ambos sentidos y resulta un malgasto enorme en espacio y complejidad del hardware el hecho de tener pines para envío de datos y pines para la recepción de datos. ¿La solución? Hacer que los pines puedan funciona en ambos sentidos, con ello se llegó a dos tipos de configuraciones llamadas Duplex, las cuales son las siguientes:

  • Half Duplex: los datos se transmiten en una sola dirección, la cual es marcado enviando una señal a uno o dos pines contiguos. Si se utiliza un solo pin para seleccionar entonces permite una sola dirección de los datos, si permite los dos entonces podemos copiar, es decir, transmitir datos en modo Full Duplex.
  • Algunas interfaces de comunicación transmiten datos siempre en ambas direcciones, estas son puramente Full Duplex, pero no hacen uso de ciertos pines para transmitir los datos.

Muchos de los sistemas del segundo tipo más avanzados suelen tener en cada extremo tanto un receptor como un emisor para poder comunicar los datos en ambas direcciones.

3ª norma de un bus de expansión: canales

USB-C Pinout

Y ya que hablamos de canales de datos, existen puertos de expansión que pueden transmitir varios flujos de datos diferentes a base de tener funcionando de manera simultánea varios transmisores (TX), receptores (RX) o transceptores en sus interfaces. Lo que les permite no enviar un flujo de datos, sino varios distintos al mismo tiempo.

Es el caso del USB-C Alt DP donde se pueden utilizar los diferentes canales de datos tanto para transmitir datos como para enviar vídeo a una entrada DisplayPort de un monitor. Otra de las ventajas que permite esto es la de poder crear concentradores que permitan a varios periféricos compartir la misma interfaz en común.

Forma de transmitir los datos

Sistema binario

El siguiente punto es la forma de transmitir los datos y esta cambia según la interfaz seleccionada. En algunas interfaces más simples lo que tenemos es un pin que cuando recibe la señal transmite los datos de una parte de la interfaz a otra de manera directa.  Muchas de las interfaces primitivas se basan en colocar los datos a partir de una dirección de memoria concreta y dejar que el hardware se encarga de transmitir los datos.

Pero a partir de que las CPUs en PC empezaron a utilizar direccionamiento virtual eso pasó a ser imposible de hacer, por lo que los sistemas de transferencia de datos con los periféricos al igual que con la memoria RAM necesitaron el añadido de las llamadas IOMMU, piezas que al igual que una MMU traducen en direcciones físicas las direcciones virtuales, pero esa vez con los periféricos.

A día de hoy la mayoría de interfaces funcionan como una interfaz de red. La IOMMU puede saber de manera directa cual es el periférico que comunica a partir de la naturaleza de cada paquete enviado. No obstante, no todos las salidas y entradas de datos pasan por la IOMMU como es el caso de la señal de vídeo por ejemplo, ya que son manejadas por la tarjeta gráfica en ese caso.

DMA para comunicar periféricos y memoria

Diagrama DMA

Una de las particularidades de la arquitectura x86 es que no tiene pines diferenciados para comunicar la memoria y los periféricos, por lo que los periféricos tienen asignados una serie de direcciones de memoria para la comunicación entre la CPU y los periféricos. ¿El problema? La interfaz de memoria se encuentra en la CPU. ¿Cómo lo hacen los periféricos para comunicarse con la RAM?

Pues a través de un mecanismo de acceso directo a la memoria o DMA, este mecanismo es una interfaz con la RAM para el periférico que desconecta temporalmente uno de los canales de memoria de la CPU a la RAM para asignarlo al periférico y poder escribir los datos a memoria o leerlos desde la misma. Esto es importante porque la CPU requiere que los datos estén en la RAM para poder operar con ellos.

¡Sé el primero en comentar!