La interconexión de componentes periféricos ( PCI ) [ 3 ] es un bus local de computadora para conectar dispositivos de hardware en una computadora y forma parte del estándar PCI Local Bus . El bus PCI admite las funciones que se encuentran en un bus de procesador , pero en un formato estandarizado que es independiente del bus nativo de cualquier procesador en particular . Los dispositivos conectados al bus PCI aparecen para un maestro de bus como si estuvieran conectados directamente a su propio bus y se les asignan direcciones en el espacio de direcciones del procesador . [ 4 ] Es un bus paralelo , síncrono con un único reloj de bus .
Los dispositivos conectados pueden adoptar la forma de un circuito integrado montado en la placa base (denominado dispositivo planar en la especificación PCI) o una tarjeta de expansión que se inserta en una ranura. El bus local PCI se implementó por primera vez en ordenadores compatibles con IBM PC , donde sustituyó la combinación de varias ranuras ISA ( Industry Standard Architecture ) lentas y una ranura VESA Local Bus (VLB) rápida como configuración de bus. Posteriormente, se adoptó para otros tipos de ordenadores. Las tarjetas PCI típicas utilizadas en los PC incluyen: tarjetas de red , tarjetas de sonido , módems , puertos adicionales como USB (Universal Serial Bus ) o serial , tarjetas sintonizadoras de TV y adaptadores de host para discos duros . Las tarjetas de vídeo PCI sustituyeron a las tarjetas ISA y VLB hasta que las crecientes necesidades de ancho de banda superaron las capacidades de PCI. La interfaz preferida para las tarjetas de vídeo pasó entonces a ser el puerto de gráficos acelerados (AGP), un superconjunto de PCI, antes de dar paso a PCI Express . [ 5 ]
La primera especificación PCI fue desarrollada por Intel , pero el desarrollo posterior del estándar pasó a ser responsabilidad del Grupo de Interés Especial PCI ( PCI-SIG ). [ 6 ] La primera versión de PCI que se encontró en las computadoras de escritorio comerciales era un bus de 32 bits que utilizaba unReloj de bus de 33 MHz ySeñalización de 5 V , aunque el estándar PCI 1.0 también contemplaba una variante de 64 bits . [ 7 ] Estas tienen una muesca de localización en la tarjeta. La versión 2.0 del estándar PCI introdujo ranuras de 3,3 V, distinguidas físicamente por un conector físico invertido para evitar la inserción accidental de tarjetas de 5 V. Las tarjetas universales, que pueden funcionar con cualquiera de los dos voltajes, tienen dos muescas. La versión 2.1 del estándar PCI introdujo la operación opcional de 66 MHz. Una variante de PCI orientada a servidores, PCI Extended ( PCI-X ), operaba a frecuencias de hasta 133 MHz para PCI-X 1.0 y hasta 533 MHz para PCI-X 2.0. En la versión 2.2 de la especificación PCI se introdujo un conector interno para tarjetas de portátiles, llamado Mini PCI . El bus PCI también se adoptó como estándar de conector externo para portátiles : CardBus . [ 8 ]
PCI y PCI-X a veces se denominan PCI paralelo o PCI convencional [ 9 ] para distinguirlos tecnológicamente de su sucesor más reciente, PCI Express, que adoptó una arquitectura serial basada en carriles. [ 10 ] [ 11 ] El apogeo de PCI en el mercado de computadoras de escritorio fue aproximadamente de 1995 a 2005. [ 10 ] PCI y PCI-X se han vuelto obsoletos para la mayoría de los propósitos y han desaparecido en gran medida de muchas otras placas base modernas desde 2013; sin embargo, todavía son comunes en algunas computadoras de escritorio modernas a partir de 2020.Por motivos de compatibilidad con versiones anteriores y debido a su coste de producción relativamente bajo. Otra aplicación moderna común del PCI paralelo se encuentra en los ordenadores industriales , donde muchas tarjetas de expansión especializadas, utilizadas en este ámbito, nunca se adaptaron a PCI Express, al igual que algunas tarjetas ISA. Muchos tipos de dispositivos que antes estaban disponibles en tarjetas de expansión PCI ahora se integran habitualmente en las placas base o están disponibles en versiones USB y PCI Express.
Historia


El trabajo en PCI comenzó en los Laboratorios de Arquitectura de Intel (IAL, también conocidos como Laboratorio de Desarrollo de Arquitectura) alrededor de 1990. Un equipo compuesto principalmente por ingenieros de IAL definió la arquitectura y desarrolló un chipset y una plataforma de prueba de concepto (Saturn) en colaboración con equipos de los sistemas de PC de escritorio y las organizaciones de productos de lógica central de la compañía.
PCI se puso inmediatamente en uso en servidores, reemplazando la arquitectura Micro Channel (MCA) y la arquitectura Extended Industry Standard (EISA) como el bus de expansión de servidor preferido. En las PC convencionales, PCI tardó más en reemplazar a VLB y no logró una penetración de mercado significativa hasta finales de 1994 en las PC Pentium de segunda generación . Para 1996, VLB estaba prácticamente extinto y los fabricantes habían adoptado PCI incluso para las computadoras Intel 80486 (486). [ 12 ] EISA continuó usándose junto con PCI hasta el año 2000. Apple Computer adoptó PCI para las computadoras profesionales Power Macintosh (reemplazando NuBus ) a mediados de 1995 y para la línea de productos de consumo Performa (reemplazando LC Processor Direct Slot (PDS)) a mediados de 1996.
Fuera del mercado de servidores, la versión de 64 bits de PCI simple siguió siendo poco común en la práctica, [ 13 ] aunque fue utilizada, por ejemplo, por todos los ordenadores Power Macintosh G3 y G4 (posteriores al iMac) . [ 14 ]
Las revisiones posteriores de PCI añadieron nuevas funciones y mejoras de rendimiento, incluyendo un estándar de 66 MHz y 3,3 V y PCI-X de 133 MHz , así como la adaptación de la señalización PCI a otros formatos . Tanto PCI-X 1.0b como PCI-X 2.0 son retrocompatibles con algunos estándares PCI. Estas revisiones se utilizaron en hardware de servidores, pero el hardware de PC de consumo siguió siendo casi en su totalidad de 32 bits, 33 MHz y 5 voltios.
La PCI-SIG introdujo el estándar PCI Express serie alrededor de 2004. Desde entonces, los fabricantes de placas base han ido reduciendo o eliminando gradualmente las ranuras PCI en favor del nuevo estándar. Los adaptadores puente permiten utilizar tarjetas PCI antiguas con placas base PCI Express.
Configuración automática
PCI proporciona espacios de direcciones de memoria y de puertos de E/S mapeados en memoria independientes para la familia de procesadores x86 , de 64 y 32 bits respectivamente. Las direcciones en estos espacios se asignan mediante software. Un tercer espacio de direcciones, denominado Espacio de Configuración PCI , que utiliza un esquema de direccionamiento fijo, permite al software determinar la cantidad de memoria y espacio de direcciones de E/S que necesita cada dispositivo. Cada dispositivo puede solicitar hasta seis áreas de memoria o espacio de puertos de entrada/salida (E/S) a través de sus registros de espacio de configuración.
En un sistema típico, el firmware (o sistema operativo ) consulta todos los buses PCI al arrancar (a través del Espacio de Configuración PCI ) para determinar qué dispositivos están presentes y qué recursos del sistema (espacio de memoria, espacio de E/S, líneas de interrupción, etc.) necesita cada uno. A continuación, asigna los recursos e informa a cada dispositivo sobre su asignación.
El espacio de configuración PCI también contiene una pequeña cantidad de información sobre el tipo de dispositivo, lo que ayuda al sistema operativo a elegir los controladores de dispositivo adecuados o, al menos, a entablar un diálogo con el usuario sobre la configuración del sistema.
Los dispositivos pueden tener una memoria de solo lectura (ROM) integrada que contiene código ejecutable para procesadores x86 o PA-RISC , un controlador de firmware abierto o una ROM de opciones . Estas suelen ser necesarias para los dispositivos que se utilizan durante el arranque del sistema, antes de que el sistema operativo cargue los controladores del dispositivo.
Además, existen temporizadores de latencia PCI que permiten a los dispositivos PCI Bus-Mastering compartir el bus PCI de forma equitativa. En este caso, "equitativa" significa que los dispositivos no utilizarán una porción tan grande del ancho de banda disponible del bus PCI que otros dispositivos no puedan realizar las tareas necesarias. Cabe destacar que esto no se aplica a PCI Express.
El funcionamiento es el siguiente: cada dispositivo PCI que puede operar en modo maestro de bus debe implementar un temporizador, denominado temporizador de latencia, que limita el tiempo que dicho dispositivo puede mantener el control del bus PCI. El temporizador se inicia cuando el dispositivo obtiene el control del bus y cuenta hacia atrás a la velocidad del reloj PCI. Cuando el contador llega a cero, el dispositivo debe liberar el bus. Si ningún otro dispositivo está esperando el control del bus, puede simplemente volver a tomarlo y transferir más datos. [ 17 ]
Interrumpe
Los dispositivos deben seguir un protocolo para que las líneas de solicitud de interrupción (IRQ) puedan compartirse. El bus PCI incluye cuatro líneas de interrupción, INTA# a INTD#, todas disponibles para cada dispositivo. Hasta ocho dispositivos PCI comparten la misma línea IRQ (INTINA# a INTINH#) en sistemas x86 compatibles con APIC . Las líneas de interrupción no están cableadas en paralelo como las demás líneas del bus PCI. Las posiciones de las líneas de interrupción rotan entre ranuras, de modo que lo que un dispositivo ve como la línea INTA# es INTB# para el siguiente e INTC# para el siguiente. Los dispositivos de función única suelen usar su INTA# para la señalización de interrupciones, por lo que la carga del dispositivo se distribuye de manera bastante uniforme entre las cuatro líneas de interrupción disponibles. Esto soluciona un problema común al compartir interrupciones.
La asignación de las líneas de interrupción PCI a las líneas de interrupción del sistema, a través del puente host PCI, depende de la implementación. El firmware o el código del sistema operativo específicos de la plataforma deben conocer esta información y configurar el campo "línea de interrupción" en el espacio de configuración de cada dispositivo, indicando a qué IRQ está conectado.
Las líneas de interrupción PCI se activan por nivel . Se optó por este método en lugar del de activación por flanco para obtener una ventaja al atender una línea de interrupción compartida y por robustez: las interrupciones activadas por flanco son fáciles de pasar por alto.
Las revisiones posteriores de la especificación PCI añaden soporte para interrupciones señalizadas por mensaje . En este sistema, un dispositivo indica su necesidad de servicio mediante una escritura en memoria, en lugar de activar una línea dedicada. Esto mitiga el problema de la escasez de líneas de interrupción. Aunque los vectores de interrupción se siguen compartiendo, no se presentan los problemas de compartición de las interrupciones activadas por nivel. También resuelve el problema de enrutamiento, ya que la escritura en memoria no se modifica de forma impredecible entre el dispositivo y el host. Por último, dado que la señalización por mensaje se realiza dentro de la banda , resuelve algunos problemas de sincronización que pueden ocurrir con escrituras publicadas y líneas de interrupción fuera de banda .
PCI Express no tiene líneas de interrupción físicas. Utiliza exclusivamente interrupciones señalizadas por mensajes.
Especificaciones de hardware convencionales

Estas especificaciones representan la versión más común de PCI utilizada en ordenadores personales normales:
- Reloj de 33,33 MHz con transferencias síncronas.
- Velocidad de transferencia máxima de 133 MB /s (133 megabytes por segundo) para un ancho de bus de 32 bits (33,33 MHz × 32 bits ÷ 8 bits/byte = 133 MB/s ).
- Ancho de bus de 32 bits
- Espacio de direcciones de memoria de 32 o 64 bits (4 GiB o 16 EiB )
- Espacio para puertos de E/S de 32 bits
- Espacio de configuración de 256 bytes (por dispositivo)
- señalización de 5 voltios
- Conmutación por ondas reflejadas
La especificación PCI también ofrece opciones para señalización de 3,3 V, ancho de bus de 64 bits y reloj de 66 MHz, pero estas no se encuentran comúnmente fuera del soporte PCI-X en las placas base de servidores.
El árbitro del bus PCI realiza la arbitraje del bus entre varios maestros en el bus PCI. En el bus PCI puede residir cualquier número de maestros, así como solicitudes para el bus. A cada maestro del bus se le asigna un par de señales de solicitud y concesión.
Voltaje de la tarjeta y codificación

Las tarjetas PCI típicas tienen una o dos muescas de llave, según su voltaje de señalización. Las tarjetas que requieren 3,3 voltios tienen una muesca a 56,21 mm de la placa posterior en las posiciones de los pines 12 y 13; las que requieren 5 voltios tienen una muesca a 104,41 mm de la placa posterior en las posiciones de los pines 50 y 51. Esto permite que las tarjetas se instalen únicamente en ranuras con el voltaje que admiten. Las tarjetas universales, que aceptan ambos voltajes, tienen ambas muescas de llave.
Diagrama de pines del conector
El conector PCI se define como aquel que tiene 62 contactos a cada lado del conector de borde , pero dos o cuatro de ellos se reemplazan por muescas de llave, por lo que una tarjeta tiene 60 o 58 contactos a cada lado. El lado A se refiere al "lado de soldadura" y el lado B al "lado de componentes": si la tarjeta se sostiene con el conector hacia abajo, una vista del lado A mostrará la placa posterior a la derecha, mientras que una vista del lado B mostrará la placa posterior a la izquierda. La distribución de pines de los lados B y A es la siguiente, mirando hacia abajo dentro del conector de la placa base (los pines A1 y B1 son los más cercanos a la placa posterior). [ 16 ] [ 18 ] [ 19 ]
El PCI de 64 bits amplía esto con 32 contactos adicionales en cada lado que proporcionan AD[63:32], C/BE[7:4]#, la señal de paridad PAR64 y una serie de pines de alimentación y tierra.
La mayoría de las líneas están conectadas a cada ranura en paralelo. Las excepciones son:
- Cada ranura tiene su propia salida REQ# y una entrada GNT# del árbitro de la placa base.
- Cada ranura tiene su propia línea IDSEL, normalmente conectada a una línea AD específica.
- El TDO está conectado en cadena al TDI de la siguiente ranura. Las tarjetas sin soporte JTAG deben conectar el TDI al TDO para no romper la cadena.
- Los pines PRSNT1# y PRSNT2# de cada ranura tienen sus propias resistencias pull-up en la placa base. La placa base puede (pero no necesariamente) detectar estos pines para determinar la presencia de tarjetas PCI y sus requisitos de alimentación.
- Las señales REQ64# y ACK64# se activan individualmente en ranuras exclusivas de 32 bits.
- Los pines de interrupción INTA# a INTD# están conectados a todas las ranuras en diferentes órdenes. (INTA# en una ranura es INTB# en la siguiente y INTC# en la siguiente).
Notas:
- IOPWR es de +3,3 V o +5 V, según el backplane. Las ranuras también tienen una protuberancia en uno de dos puntos que impide la inserción de tarjetas que no tengan la muesca correspondiente, lo que indica compatibilidad con ese estándar de voltaje. Las tarjetas universales tienen ambas muescas y utilizan IOPWR para determinar sus niveles de señal de E/S.
- El PCI SIG recomienda encarecidamente la señalización PCI de 3,3 V, [ 16 ] exigiendo su compatibilidad desde la revisión estándar 2.3, [ 18 ] pero la mayoría de las placas base de PC utilizan la variante de 5 V. Por lo tanto, si bien muchas tarjetas PCI disponibles actualmente admiten ambas y tienen dos muescas clave para indicarlo, todavía existe una gran cantidad de tarjetas que solo admiten 5 V en el mercado.
- El pin M66EN es una conexión a tierra adicional en los buses PCI de 5 V presentes en la mayoría de las placas base de PC. Las tarjetas y placas base que no admiten el funcionamiento a 66 MHz también conectan este pin a tierra. Si todos los componentes admiten el funcionamiento a 66 MHz, una resistencia pull-up en la placa base eleva esta señal a un nivel alto y se habilita el funcionamiento a 66 MHz. El pin permanece conectado a tierra mediante condensadores de acoplamiento en cada tarjeta para preservar su función de apantallamiento de CA.
- El pin PCIXCAP es una conexión a tierra adicional en los buses y tarjetas PCI. Si todas las tarjetas y la placa base son compatibles con el protocolo PCI-X , una resistencia pull-up en la placa base eleva esta señal a un nivel alto y se habilita el funcionamiento de PCI-X. El pin permanece conectado a tierra mediante condensadores de acoplamiento en cada tarjeta para preservar su función de apantallamiento de CA.
- Al menos uno de los terminales PRSNT1# y PRSNT2# debe estar conectado a tierra mediante la tarjeta. La combinación elegida indica los requisitos de potencia totales de la tarjeta (25 W, 15 W o 7,5 W).
- SBO# y SDONE son señales que un controlador de caché envía al destino actual. No son salidas del iniciador, pero tienen ese color porque son entradas del destino.
- PME# ( 19 A ) – Evento de administración de energía (opcional) compatible con PCI versión 2.2 y superior. Es una señal de 3,3 V , de drenaje abierto y activa en bajo. [ 20 ] Las tarjetas PCI pueden usar esta señal para enviar y recibir PME directamente a través del zócalo PCI, lo que elimina la necesidad de un cable Wake-on-LAN especial . [ 21 ]
Combinación de tarjetas PCI de 32 y 64 bits en ranuras de diferente ancho.


La mayoría de las tarjetas PCI de 32 bits funcionarán correctamente en ranuras PCI-X de 64 bits, pero la velocidad del bus estará limitada a la frecuencia de la tarjeta más lenta, una limitación inherente a la topología de bus compartido de PCI. Por ejemplo, cuando se instala un periférico PCI 2.3 de 66 MHz en un bus PCI-X con capacidad para 133 MHz, todo el bus estará limitado a 66 MHz. Para sortear esta limitación, muchas placas base cuentan con dos o más buses PCI/PCI-X: uno destinado a periféricos PCI-X de alta velocidad y otro a periféricos de uso general.
Muchas tarjetas PCI-X de 64 bits están diseñadas para funcionar en modo de 32 bits si se insertan en conectores de 32 bits más cortos, con cierta pérdida de rendimiento. [ 22 ] [ 23 ] Un ejemplo de esto es la tarjeta de interfaz SCSI de 64 bits Adaptec 29160. [ 24 ] Sin embargo, algunas tarjetas PCI-X de 64 bits no funcionan en ranuras PCI estándar de 32 bits. [ 25 ]
Instalar una tarjeta PCI-X de 64 bits en una ranura de 32 bits dejará la parte de 64 bits del conector de borde de la tarjeta sin conectar y sobresaliendo. Por lo tanto, es necesario que ningún componente de la placa base esté colocado de forma que obstruya mecánicamente la parte sobresaliente del conector de borde de la tarjeta.
Dimensiones físicas
Alturas de los soportes PCI:
Longitudes de tarjetas PCI (soporte estándar y 3,3 V): [ 28 ]
- Tarjeta corta: 169,52 mm;
- Tarjeta larga: 313,78 mm.
Longitudes de tarjetas PCI (soporte de perfil bajo y 3,3 V): [ 29 ]
- MD1: 121,79 mm;
- MD2: 169,52 mm;
- MD3: 243,18 mm.
Un soporte de altura completa
Una tarjeta de perfil bajo con un soporte de altura completa
Mini PCI




Mini PCI se incorporó a la versión 2.2 de PCI para su uso en portátiles y algunos routers. Utiliza un bus de 32 bits y 33 MHz con conexiones alimentadas ( solo 3,3 V; 5 V está limitado a 100 mA) y admite bus mastering y DMA . El tamaño estándar de las tarjetas Mini PCI es aproximadamente una cuarta parte del de sus homólogas de tamaño completo. A diferencia de las tarjetas PCI de sobremesa con conectores, no se puede acceder a la tarjeta desde fuera de la carcasa. Esto limita las funciones que puede realizar una tarjeta Mini PCI.
Se desarrollaron numerosos dispositivos Mini PCI, como Wi-Fi , Fast Ethernet , Bluetooth , módems (a menudo Winmodems ), tarjetas de sonido , aceleradores criptográficos , SCSI , IDE - ATA , controladores SATA y tarjetas combinadas. Las tarjetas Mini PCI se pueden usar con hardware equipado con PCI estándar mediante convertidores Mini PCI a PCI . La Mini PCI ha sido reemplazada por la mucho más compacta tarjeta PCI Express Mini Card .
Detalles técnicos de Mini PCI
Las tarjetas Mini PCI tienen un consumo máximo de energía de 2 W, lo que limita la funcionalidad que se puede implementar en este formato. Además, deben ser compatibles con la señal PCI CLKRUN#, que se utiliza para iniciar y detener el reloj PCI con fines de gestión de energía.
Existen tres formatos de tarjeta: tipo I, tipo II y tipo III. El conector de tarjeta utilizado para cada tipo incluye: los tipos I y II utilizan un conector apilable de 100 pines, mientras que el tipo III utiliza un conector de borde de 124 pines, es decir, el conector para los tipos I y II difiere del del tipo III, donde el conector está en el borde de una tarjeta, como en un SO-DIMM . Los 24 pines adicionales proporcionan las señales adicionales necesarias para enrutar la E/S de vuelta a través del conector del sistema (audio, AC-Link , LAN , interfaz de línea telefónica). Las tarjetas de tipo II tienen conectores RJ11 y RJ45 montados. Estas tarjetas deben ubicarse en el borde de la computadora o estación de acoplamiento para que los puertos RJ11 y RJ45 puedan montarse para acceso externo.
Mini PCI es distinto de Micro PCI de 144 pines. [ 30 ]
transacciones de bus PCI
El tráfico del bus PCI consiste en una serie de transacciones. Cada transacción consta de una fase de direccionamiento seguida de una o más fases de datos . La dirección de las fases de datos puede ser del iniciador al destino (transacción de escritura) o viceversa (transacción de lectura), pero todas deben tener la misma dirección. Cualquiera de las partes puede pausar o detener las fases de datos en cualquier momento. (Un ejemplo común es un dispositivo PCI de bajo rendimiento que no admite transacciones en ráfaga y siempre detiene una transacción después de la primera fase de datos).
Cualquier dispositivo PCI puede iniciar una transacción. Primero, debe solicitar permiso a un árbitro del bus PCI en la placa base. El árbitro otorga el permiso a uno de los dispositivos solicitantes. El iniciador comienza la fase de direccionamiento transmitiendo una dirección de 32 bits más un código de comando de 4 bits , y luego espera la respuesta de un dispositivo de destino. Todos los demás dispositivos examinan esta dirección y uno de ellos responde unos ciclos después.
El direccionamiento de 64 bits se realiza mediante una fase de direccionamiento en dos etapas. El iniciador transmite los 32 bits de dirección inferiores, junto con un código de comando especial de "ciclo de doble direccionamiento". Los dispositivos que no admiten direccionamiento de 64 bits simplemente no responden a dicho código. En el siguiente ciclo, el iniciador transmite los 32 bits de dirección superiores, junto con el código de comando real. A partir de ese momento, la transacción se ejecuta de forma idéntica. Para garantizar la compatibilidad con dispositivos PCI de 32 bits, está prohibido utilizar un ciclo de doble direccionamiento si no es necesario, es decir, si los bits de dirección superiores son todos cero.
Si bien el bus PCI transfiere 32 bits por fase de datos, el iniciador transmite 4 señales de habilitación de bytes activas en bajo que indican qué bytes de 8 bits deben considerarse relevantes. En particular, una escritura debe afectar solo a los bytes habilitados en el dispositivo PCI de destino. Estos bytes son de poca importancia para las lecturas de memoria, pero las lecturas de E/S podrían tener efectos secundarios. El estándar PCI permite explícitamente una fase de datos sin bytes habilitados, la cual debe comportarse como una operación nula.
espacios de direcciones PCI
PCI tiene tres espacios de direcciones: memoria, dirección de E/S y configuración.
Las direcciones de memoria tienen un tamaño de 32 bits (opcionalmente 64 bits), admiten almacenamiento en caché y pueden ser transacciones en ráfaga.
Las direcciones de E/S se utilizan para garantizar la compatibilidad con el espacio de direcciones de los puertos de E/S de la arquitectura Intel x86 . Si bien la especificación del bus PCI permite transacciones en ráfaga en cualquier espacio de direcciones, la mayoría de los dispositivos solo lo admiten para direcciones de memoria y no para E/S.
Finalmente, el espacio de configuración PCI proporciona acceso a 256 bytes de registros de configuración especiales por dispositivo PCI. Cada ranura PCI dispone de su propio rango de direcciones de espacio de configuración. Estos registros se utilizan para configurar los rangos de direcciones de memoria y E/S de los dispositivos a los que deben responder los iniciadores de transacciones. Al encender un ordenador, todos los dispositivos PCI responden únicamente a los accesos a su espacio de configuración. La BIOS del ordenador busca los dispositivos y les asigna rangos de direcciones de memoria y E/S.
Si ningún dispositivo reclama una dirección, la fase de dirección del iniciador de la transacción expirará, lo que provocará que el iniciador aborte la operación. En el caso de lecturas, es habitual proporcionar todos los valores en uno para el valor de los datos leídos (0xFFFFFFFF). Por lo tanto, los dispositivos PCI generalmente intentan evitar el uso de todos los valores en uno en los registros de estado importantes, para que el software pueda detectar fácilmente dicho error.
Códigos de comando PCI
Existen 16 códigos de comando de 4 bits posibles, de los cuales 12 están asignados. Con la excepción del ciclo de doble dirección único, el bit menos significativo del código de comando indica si las siguientes fases de datos son de lectura (datos enviados del destino al iniciador) o de escritura (datos enviados del iniciador al destino). Los destinos PCI deben examinar tanto el código de comando como la dirección y no responder a las fases de dirección que especifiquen un código de comando no compatible.
Los comandos que hacen referencia a las líneas de caché dependen de que el registro de tamaño de línea de caché del espacio de configuración PCI esté configurado correctamente; no se podrán utilizar hasta que esto se haya realizado.
- 0000 : Confirmación de interrupción
- Se trata de una forma especial de ciclo de lectura dirigida implícitamente al controlador de interrupciones, que devuelve un vector de interrupción. El campo de dirección de 32 bits se ignora. Una posible implementación consiste en generar un ciclo de reconocimiento de interrupción en un bus ISA mediante un puente de bus PCI/ISA. Este comando es para compatibilidad con IBM PC ; si no hay un controlador de interrupciones de tipo Intel 8259 en el bus PCI, este ciclo no es necesario.
- 0001 : Ciclo especial
- Este ciclo consiste en una escritura de difusión especial de eventos del sistema que podrían interesar a la tarjeta PCI. El campo de dirección de este ciclo especial se ignora, pero le sigue una fase de datos que contiene un mensaje de carga útil. Los mensajes definidos actualmente indican que el procesador se detiene por algún motivo (por ejemplo, para ahorrar energía). Ningún dispositivo responde a este ciclo; siempre finaliza con una interrupción del maestro tras dejar los datos en el bus durante al menos 4 ciclos.
- 0010 : Lectura de E/S
- Esto realiza una lectura del espacio de E/S. Se proporcionan los 32 bits de la dirección de lectura, de modo que un dispositivo puede (por razones de compatibilidad) implementar menos de 4 bytes de registros de E/S. Si los datos de solicitud de habilitación de bytes no se encuentran dentro del rango de direcciones admitido por el dispositivo PCI (por ejemplo, una lectura de 4 bytes de un dispositivo que solo admite 2 bytes de espacio de direcciones de E/S), debe finalizarse con una interrupción del destino. Se permiten múltiples ciclos de datos, utilizando un orden de ráfaga lineal (de incremento simple).
- El estándar PCI desaconseja el uso del espacio de E/S en los nuevos dispositivos, prefiriendo que se haga lo máximo posible mediante la asignación de memoria principal.
- 0011 : Escritura de E/S
- Esto realiza una escritura en el espacio de E/S.
- 010 x : Reservado
- Un dispositivo PCI no debe responder a un ciclo de direcciones con estos códigos de comando.
- 0110 : Lectura de memoria
- Esto realiza un ciclo de lectura desde el espacio de memoria. Debido a que el espacio de memoria más pequeño que un dispositivo PCI puede implementar es de 16 bytes, [ 18 ] [ 16 ] : §6.5.2.1 los dos bits menos significativos de la dirección no son necesarios durante la fase de dirección; la información equivalente llegará durante las fases de datos en forma de señales de selección de byte. En cambio, especifican el orden en que se deben devolver los datos de ráfaga. [ 18 ] [ 16 ] : §3.2.2.2 Si un dispositivo no admite el orden solicitado, debe proporcionar la primera palabra y luego desconectarse.
- Si un espacio de memoria está marcado como "prefetchable", el dispositivo de destino debe ignorar las señales de selección de bytes en una lectura de memoria y devolver siempre 32 bits válidos.
- 0111 : Escritura en memoria
- Esto funciona de forma similar a una lectura de memoria. Las señales de selección de bytes son más importantes en una escritura, ya que los bytes no seleccionados no deben escribirse en la memoria.
- En general, las escrituras PCI son más rápidas que las lecturas PCI, ya que un dispositivo puede almacenar en búfer los datos de escritura entrantes y liberar el bus más rápidamente. Para una lectura, debe retrasar la fase de datos hasta que estos se hayan obtenido.
- 100 x : Reservado
- Un dispositivo PCI no debe responder a un ciclo de direcciones con estos códigos de comando.
- 1010 : Lectura de configuración
- Esto es similar a una lectura de E/S, pero lee desde el espacio de configuración PCI. Un dispositivo debe responder solo si los 11 bits inferiores de la dirección especifican una función y un registro que implementa, y si la señal especial IDSEL está activada. Debe ignorar los 21 bits superiores. Se permiten lecturas en ráfaga (con incremento lineal) en el espacio de configuración PCI.
- A diferencia del espacio de E/S, los registros de configuración PCI estándar están definidos de manera que las lecturas nunca alteren el estado del dispositivo. Es posible que un dispositivo tenga registros de espacio de configuración que superen los 64 bytes estándar y que tengan efectos secundarios de lectura, pero esto es poco común. [ 31 ]
- Los accesos al espacio de configuración suelen presentar un retardo de algunos ciclos para permitir que las líneas IDSEL se estabilicen, lo que los hace más lentos que otras formas de acceso. Además, un acceso al espacio de configuración requiere una operación de varios pasos en lugar de una sola instrucción de máquina. Por lo tanto, es mejor evitarlos durante el funcionamiento habitual de un dispositivo PCI.
- 1011 : Escritura de configuración
- Esto funciona de forma análoga a una lectura de configuración.
- 1100 : Lectura de memoria múltiple
- Este comando es idéntico a una lectura de memoria genérica, pero incluye la indicación de que una lectura prolongada continuará más allá del final de la línea de caché actual, y el sistema de destino debería precargar internamente una gran cantidad de datos. El sistema de destino siempre puede considerar esto como un sinónimo de una lectura de memoria genérica.
- 1101 : Ciclo de doble dirección
- Al acceder a una dirección de memoria que requiere más de 32 bits para su representación, la fase de direccionamiento comienza con este comando y los 32 bits inferiores de la dirección, seguidos de un segundo ciclo con el comando propiamente dicho y los 32 bits superiores de la dirección. Los dispositivos PCI que no admiten direccionamiento de 64 bits pueden simplemente interpretar esto como otro código de comando reservado y no responderle. Este código de comando solo puede utilizarse con una palabra de dirección de orden superior distinta de cero; está prohibido utilizar este ciclo si no es necesario.
- 1110 : Línea de lectura de memoria
- Este comando es idéntico a una lectura de memoria genérica, pero incluye la indicación de que la lectura continuará hasta el final de la línea de caché. El sistema siempre puede considerarlo un sinónimo de lectura de memoria genérica.
- 1111 : Escritura e invalidación de memoria
- Este comando es idéntico a una escritura de memoria genérica, pero garantiza que se escribirán una o más líneas de caché completas, con todas las selecciones de bytes habilitadas. Esta es una optimización para cachés de escritura diferida que monitorizan el bus. Normalmente, una caché de escritura diferida que contiene datos modificados debe interrumpir la operación de escritura el tiempo suficiente para escribir primero sus propios datos modificados. Si la escritura se realiza mediante este comando, se garantiza que los datos que se van a escribir serán irrelevantes y podrían simplemente invalidarse en la caché de escritura diferida.
- Esta optimización solo afecta a la caché de inspección y no supone ninguna diferencia para el destino, que puede interpretarla como un sinónimo del comando de escritura en memoria.
latencia del bus PCI
Poco después de la promulgación de la especificación PCI, se descubrió que las transacciones largas de algunos dispositivos, debido a acuses de recibo lentos, ráfagas de datos largas o alguna combinación de estas, podían causar un desbordamiento o subdesbordamiento del búfer en otros dispositivos. Las recomendaciones sobre la sincronización de las fases individuales en la Revisión 2.0 se hicieron obligatorias en la revisión 2.1: [ 32 ] : 3
- Un sistema objetivo debe poder completar la fase inicial de datos (afirmar TRDY# y/o STOP#) dentro de los 16 ciclos posteriores al inicio de una transacción.
- El iniciador debe completar cada fase de datos (afirmar IRDY#) dentro de 8 ciclos.
Además, a partir de la revisión 2.1, todos los iniciadores capaces de generar más de dos fases de datos deben implementar un temporizador de latencia programable. El temporizador comienza a contar ciclos de reloj cuando se inicia una transacción (el iniciador activa FRAME#). Si el temporizador ha expirado y el árbitro ha eliminado GNT#, el iniciador debe finalizar la transacción en la siguiente oportunidad válida. Normalmente, esta es la siguiente fase de datos, pero las transacciones de escritura en memoria e invalidación deben continuar hasta el final de la línea de caché.
Transacciones retrasadas
Los dispositivos que no pueden cumplir con estas restricciones de tiempo deben usar una combinación de escrituras publicadas (para escrituras en memoria) y transacciones diferidas (para otras escrituras y todas las lecturas). En una transacción diferida, el dispositivo registra la transacción (incluidos los datos de escritura) internamente y aborta (activa STOP# en lugar de TRDY#) la primera fase de datos. El iniciador debe reintentar exactamente la misma transacción más tarde. Mientras tanto, el dispositivo ejecuta internamente la transacción y espera a que se complete el reintento. Cuando se recibe el reintento, se entrega el resultado almacenado en búfer.
Un dispositivo puede ser objeto de otras transacciones mientras completa una transacción diferida; debe recordar el tipo de transacción, la dirección, las selecciones de bytes y (si se trata de una escritura) el valor de los datos, y solo completar la transacción correcta.
Si el sistema de destino tiene un límite en la cantidad de transacciones diferidas que puede registrar internamente (los sistemas de destino simples pueden imponer un límite de 1), forzará que dichas transacciones se reintenten sin registrarlas. Se procesarán cuando se complete la transacción diferida actual. Si dos iniciadores intentan realizar la misma transacción, el resultado de una transacción diferida iniciada por uno puede enviarse al otro; esto no representa ningún riesgo.
Un dispositivo abandona una transacción retrasada cuando un reintento logra entregar el resultado almacenado en búfer, el bus se reinicia o cuando transcurren 2¹⁵ = 32768 ciclos de reloj (aproximadamente 1 ms) sin que se produzca un reintento. Esto último nunca debería ocurrir en condiciones normales de funcionamiento, pero evita un bloqueo total del bus si un iniciador se reinicia o presenta un mal funcionamiento.
puentes de bus PCI
El estándar PCI permite conectar varios buses PCI independientes mediante puentes de bus que reenvían las operaciones de un bus a otro cuando es necesario. Aunque PCI no suele utilizar muchos puentes de bus, los sistemas PCI Express utilizan muchos puentes PCI a PCI, generalmente denominados puerto raíz PCI Express ; cada ranura PCI Express parece ser un bus independiente, conectado a los demás mediante un puente. El puente host PCI (generalmente puente norte en plataformas x86) interconecta la CPU, la memoria principal y el bus PCI. [ 33 ]
Publicado escribe
Generalmente, cuando un puente de bus detecta una transacción en un bus que debe reenviarse al otro, la transacción original debe esperar a que la transacción reenviada se complete antes de que el resultado esté listo. Una excepción notable se da en el caso de las escrituras en memoria. En este caso, el puente puede registrar internamente los datos de escritura (si tiene espacio) y señalar la finalización de la escritura antes de que la escritura reenviada se haya completado. O, incluso, antes de que haya comenzado. Estas escrituras "enviadas pero aún no recibidas" se denominan "escrituras publicadas", por analogía con un mensaje de correo postal. Si bien ofrecen una gran oportunidad para mejorar el rendimiento, las reglas que rigen lo que está permitido son algo complejas. [ 34 ]
Combinar, fusionar y colapsar
El estándar PCI permite que los puentes de bus conviertan varias transacciones de bus en una sola transacción de mayor tamaño en determinadas situaciones. Esto puede mejorar la eficiencia del bus PCI.
Combinatorio
Las transacciones de escritura a direcciones consecutivas pueden combinarse en una escritura en ráfaga más larga, siempre que el orden de los accesos en la ráfaga sea el mismo que el de las escrituras originales. Se permite insertar fases de datos adicionales con todas las habilitaciones de bytes desactivadas si las escrituras son casi consecutivas.
Fusión
Las múltiples escrituras en porciones disjuntas de la misma palabra pueden fusionarse en una sola escritura con múltiples habilitaciones de bytes activadas. En este caso, las escrituras que se presentaron al bus bridge en un orden específico se fusionan para que ocurran simultáneamente al ser reenviadas.
Colapso
No se pueden combinar varias escrituras en el mismo byte o bytes ; por ejemplo, realizando solo la segunda escritura y omitiendo la primera que fue sobrescrita. Esto se debe a que la especificación PCI permite que las escrituras tengan efectos secundarios.
señales del bus PCI
Las transacciones del bus PCI están controladas por cinco señales de control principales, dos impulsadas por el iniciador de una transacción (FRAME# e IRDY#) y tres impulsadas por el destino (DEVSEL#, TRDY# y STOP#). Hay dos señales de arbitraje adicionales (REQ# y GNT#) que se utilizan para obtener permiso para iniciar una transacción. [ 7 ] Todas son activas en bajo , lo que significa que el estado activo o afirmado es un voltaje bajo . Las resistencias pull-up en la placa base aseguran que permanecerán en alto (inactivas o desactivadas ) si no son impulsadas por ningún dispositivo, pero el bus PCI no depende de las resistencias para cambiar el nivel de la señal; todos los dispositivos impulsan las señales en alto durante un ciclo antes de dejar de impulsarlas .
Sincronización de señales
Todas las señales del bus PCI se muestrean en el flanco ascendente del reloj. Las señales cambian nominalmente en el flanco descendente del reloj, lo que da a cada dispositivo PCI aproximadamente medio ciclo de reloj para decidir cómo responder a las señales que observó en el flanco ascendente, y medio ciclo de reloj para transmitir su respuesta al otro dispositivo.
El bus PCI requiere que, cada vez que cambie el dispositivo que controla una señal del bus PCI, transcurra un ciclo de conmutación entre el momento en que un dispositivo deja de controlar la señal y el momento en que el otro comienza a hacerlo. Sin esto, podría producirse un período en el que ambos dispositivos controlaran la señal simultáneamente, lo que interferiría con el funcionamiento del bus.
La combinación de este ciclo de retroalimentación y el requisito de mantener una línea de control en nivel alto durante un ciclo antes de dejar de mantenerla en nivel alto implica que cada una de las líneas de control principales debe permanecer en nivel alto durante un mínimo de dos ciclos al cambiar de propietario. El protocolo del bus PCI está diseñado de manera que esto rara vez representa una limitación; solo en algunos casos especiales (en particular, en transacciones rápidas consecutivas ) es necesario insertar un retardo adicional para cumplir con este requisito.
Arbitraje
Cualquier dispositivo en un bus PCI con capacidad para funcionar como maestro de bus puede iniciar una transacción con cualquier otro dispositivo. Para garantizar que solo se inicie una transacción a la vez, cada maestro debe esperar primero una señal de concesión de bus, GNT#, de un árbitro ubicado en la placa base. Cada dispositivo tiene una línea de solicitud independiente, REQ#, que solicita el bus, pero el árbitro puede "aparcar" la señal de concesión de bus en cualquier dispositivo si no hay solicitudes en curso.
El árbitro puede eliminar GNT# en cualquier momento. Un dispositivo que pierde GNT# puede completar su transacción actual, pero no puede iniciar una nueva (mediante la activación de FRAME#) a menos que observe que GNT# se activó en el ciclo anterior al inicio del mismo.
El árbitro también puede proporcionar GNT# en cualquier momento, incluso durante la transacción de otro maestro. Durante una transacción, se activa FRAME#, IRDY# o ambos; cuando ambos se desactivan, el bus está inactivo. Un dispositivo puede iniciar una transacción en cualquier momento en que GNT# esté activado y el bus esté inactivo.
Fase de dirección
Una transacción de bus PCI comienza con una fase de direccionamiento . El iniciador (normalmente un chipset ), al ver que tiene GNT# y que el bus está inactivo, envía la dirección de destino a las líneas AD[31:0], el comando asociado (por ejemplo, lectura de memoria o escritura de E/S) a las líneas C/BE[3:0]# y pone FRAME# en bajo.
Cada dispositivo examina la dirección y el comando, y decide si responde como objetivo activando DEVSEL#. Un dispositivo debe responder activando DEVSEL# en un plazo de 3 ciclos. Se dice que los dispositivos que prometen responder en 1 o 2 ciclos tienen "DEVSEL rápido" o "DEVSEL medio", respectivamente. (En realidad, el tiempo de respuesta es de 2,5 ciclos, ya que los dispositivos PCI deben transmitir todas las señales medio ciclo antes para que puedan recibirse tres ciclos después).
Un dispositivo debe capturar la dirección en el primer ciclo; el iniciador debe eliminar la dirección y el comando del bus en el ciclo siguiente, incluso antes de recibir una respuesta DEVSEL#. El tiempo adicional solo está disponible para interpretar la dirección y el comando una vez capturados.
En el quinto ciclo de la fase de direccionamiento (o antes si todos los demás dispositivos tienen DEVSEL medio o superior), se permite una decodificación sustractiva general para ciertos rangos de direcciones. Esto lo suele utilizar un puente de bus ISA para direcciones dentro de su rango (24 bits para memoria y 16 bits para E/S).
En el sexto ciclo, si no se ha recibido respuesta, el iniciador puede abortar la transacción desactivando el registro FRAME#. Esto se conoce como terminación por aborto del maestro y, en este caso, los puentes de bus PCI suelen devolver datos de tipo 0xFFFFFFFF. Por lo tanto, los dispositivos PCI generalmente se diseñan para evitar el uso de valores de tipo 0x en los registros de estado importantes, de modo que el software pueda detectar fácilmente este error.
Cronograma de la fase de Abordar
![]()
Notas:
- GNT# Irrelevante una vez que ha comenzado el ciclo.
- La dirección solo es válida durante un ciclo.
- C/BE proporcionará el comando seguido de la primera fase de habilitación de bytes de datos.
En el flanco ascendente del reloj 0, el iniciador observa que FRAME# e IRDY# están en alto, y GNT# en bajo, por lo que transmite la dirección y el comando, y activa FRAME# a tiempo para el flanco ascendente del reloj 1. Los dispositivos de destino capturan la dirección y comienzan a decodificarla. Pueden responder con DEVSEL# a tiempo para el reloj 2 (DEVSEL rápido), 3 (DEVSEL medio) o 4 (DEVSEL lento). Los dispositivos de decodificación sustractiva, al no recibir ninguna otra respuesta antes del reloj 4, pueden responder en el reloj 5. Si el maestro no recibe respuesta antes del reloj 5, finalizará la transacción y eliminará FRAME# en el reloj 6.
TRDY# y STOP# se desactivan (se ponen en alto) durante la fase de direccionamiento. El iniciador puede activar IRDY# tan pronto como esté listo para transferir datos, lo que teóricamente podría ocurrir tan pronto como suene el reloj 2.
Dirección de doble ciclo
Para permitir el direccionamiento de 64 bits, un maestro presenta la dirección en dos ciclos consecutivos. Primero, envía los bits de dirección de orden inferior con un comando especial de "dirección de doble ciclo" en el canal C/BE[3:0]#. En el siguiente ciclo, envía los bits de dirección de orden superior y el comando propiamente dicho. Los ciclos de doble direccionamiento están prohibidos si los bits de dirección de orden superior son cero, por lo que los dispositivos que no admiten el direccionamiento de 64 bits simplemente no pueden responder a los comandos de doble ciclo.
_ 0_ 1_ 2_ 3_ 4_ 5_ 6_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ GNT# \___/XXXXXXXXXXXXXXXXXXXXXXX _______ MARCO# \_______________________ ___ ___ AD[31:0] -------<___X___>--------------- (bits bajos, luego altos) ___ ___ _______________ C/BE[3:0]# -------<___X___X_______________ (DAC, luego comando real) ___________________________ DEVSEL# \___\___\___\___ Rápido Medio Lento _ _ _ _ _ _ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6
Acceso a la configuración
Las direcciones para el acceso al espacio de configuración PCI utilizan una decodificación especial. En este caso, las líneas de dirección de orden inferior especifican el desplazamiento del registro de configuración PCI deseado, y las líneas de dirección de orden superior se ignoran. En su lugar, una señal de dirección adicional, la entrada IDSEL, debe estar en estado alto para que un dispositivo pueda activar DEVSEL#. Cada ranura conecta una línea de dirección de orden superior diferente al pin IDSEL y se selecciona mediante codificación one-hot en las líneas de dirección superiores.
Fases de datos
Tras la fase de direccionamiento (específicamente, comenzando con el ciclo en el que DEVSEL# pasa a nivel bajo), se produce una ráfaga de una o más fases de datos . En todos los casos, el iniciador controla las señales de selección de byte activas en nivel bajo en las líneas C/BE[3:0]#, pero los datos en AD[31:0] pueden ser controlados por el iniciador (en caso de escrituras) o por el destino (en caso de lecturas).
Durante las fases de datos, las líneas C/BE[3:0]# se interpretan como habilitaciones de byte activas en bajo . En caso de escritura, las señales activas indican cuáles de los cuatro bytes del bus AD se escribirán en la ubicación direccionada. En caso de lectura, indican qué bytes interesan al iniciador. Para las lecturas, siempre es válido ignorar las señales de habilitación de byte y simplemente devolver los 32 bits; los recursos de memoria caché deben devolver siempre 32 bits válidos. Las habilitaciones de byte son útiles principalmente para accesos al espacio de E/S donde las lecturas tienen efectos secundarios.
La fase de datos con las cuatro líneas C/BE# desactivadas está explícitamente permitida por el estándar PCI y no debe tener ningún efecto en el destino, salvo el de avanzar la dirección en el acceso en ráfaga en curso.
La fase de datos continúa hasta que ambas partes estén listas para completar la transferencia y pasar a la siguiente fase. El iniciador activa IRDY# ( iniciador listo ) cuando ya no necesita esperar, mientras que el receptor activa TRDY# ( receptor listo ). Quien proporciona los datos debe transmitirlos por el bus AD antes de activar su señal de listo.
Una vez que uno de los participantes activa su señal de listo, no puede desactivarla ni modificar sus señales de control hasta el final de la fase de datos. El receptor de datos debe mantener el bus AD activado en cada ciclo hasta que detecte las señales IRDY# y TRDY#, lo que marca el final de la fase de datos actual e indica que los datos recién activados son la palabra que se va a transferir.
Para mantener la velocidad máxima de ráfaga, el emisor de datos dispone de medio ciclo de reloj después de detectar que se activan tanto IRDY# como TRDY# para enviar la siguiente palabra al bus AD.
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ _______ ___ ___ ___ AD[31:0] ---<___XXXXXXXXX_______XXXXX___X___X___ (Si escribo) ___ ___ _______ ___ ___ AD[31:0] ---<___>~~~<XXXXXXXX___X_______X___X___ (Si se lee) ___ _______________ _______ ___ ___ C/BE[3:0]# ---<___X_______________X_______X___X___ (Siempre debe ser válido) _______________ | ___ | | | IRDY# x \_______/ x \___________ ___________________ | | | | TRDY# xx \___________________ ___________ | | | | DEVSEL# \___________________________ ___ | | | | MARCO# \___________________________________ _ _ _ _ _ |_ _ |_ |_ |_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6 7 8 9
Esto continúa el ciclo de direcciones ilustrado anteriormente, asumiendo un único ciclo de direcciones con DEVSEL medio, por lo que el objetivo responde a tiempo para el reloj 3. Sin embargo, en ese momento, ninguno de los dos está listo para transferir datos. Para el reloj 4, el iniciador está listo, pero el objetivo no. En el reloj 5, ambos están listos y se produce una transferencia de datos (como indican las líneas verticales). Para el reloj 6, el objetivo está listo para transferir, pero el iniciador no. En el reloj 7, el iniciador está listo y se transfieren los datos. Para los relojes 8 y 9, ambos lados permanecen listos para transferir datos, y estos se transfieren a la máxima velocidad posible (32 bits por ciclo de reloj).
En caso de lectura, el reloj 2 está reservado para la conmutación del bus AD, por lo que el dispositivo de destino no tiene permitido transmitir datos por el bus, incluso si es capaz de realizar una operación DEVSEL rápida.
DEVSEL rápido# en lecturas
En teoría, un sistema compatible con DEVSEL rápido podría comenzar a responder a una lectura en el ciclo posterior a la presentación de la dirección. Sin embargo, este ciclo está reservado para la gestión del bus AD. Por lo tanto, un sistema no puede controlar el bus AD (y, en consecuencia, no puede activar TRDY#) en el segundo ciclo de una transacción. La mayoría de los sistemas no alcanzarán esta velocidad y no requerirán lógica especial para garantizar esta condición.
Finalización de transacciones
Cualquiera de las partes puede solicitar que una ráfaga finalice después de la fase de datos actual. Los dispositivos PCI simples que no admiten ráfagas de varias palabras siempre lo solicitarán de inmediato. Incluso los dispositivos que sí admiten ráfagas tendrán algún límite en la longitud máxima que pueden admitir, como el final de su memoria direccionable.
Terminación de ráfaga del iniciador
El iniciador puede marcar cualquier fase de datos como la final de una transacción desactivando FRAME# al mismo tiempo que activa IRDY#. En el ciclo posterior a que el destino active TRDY#, la transferencia final de datos se completa, ambos lados desactivan sus respectivas señales RDY# y el bus vuelve a estar inactivo. El maestro no puede desactivar FRAME# antes de activar IRDY#, ni puede desactivar FRAME# mientras espera, con IRDY# activado, a que el destino active TRDY#.
La única excepción menor es una terminación por aborto del maestro , cuando ningún destino responde con DEVSEL#. Obviamente, no tiene sentido esperar TRDY# en tal caso. Sin embargo, incluso en este caso, el maestro debe activar IRDY# durante al menos un ciclo después de desactivar FRAME#. (Normalmente, un maestro activa IRDY# antes de recibir DEVSEL#, por lo que simplemente debe mantener IRDY# activado durante un ciclo más). Esto es para asegurar que se cumplan las reglas de temporización de cambio de bus en la línea FRAME#.
Terminación de ráfaga objetivo
El destinatario solicita al iniciador que finalice una ráfaga activando STOP#. El iniciador finalizará la transacción desactivando FRAME# en la siguiente oportunidad legal; si desea transferir más datos, continuará en una transacción separada. Existen varias maneras para que el destinatario haga esto:
- Desconectar con datos
- Si el dispositivo de destino activa STOP# y TRDY# simultáneamente, esto indica que desea que esta sea la última fase de datos. Por ejemplo, un dispositivo que no admite transferencias en ráfaga siempre lo hará para forzar transacciones PCI de una sola palabra. Esta es la forma más eficiente para que un dispositivo de destino finalice una ráfaga.
- Desconexión sin datos
- Si el dispositivo de destino activa STOP# sin activar TRDY#, esto indica que desea detenerse sin transferir datos. STOP# se considera equivalente a TRDY# para finalizar una fase de datos, pero no se transfiere ningún dato.
- Rever
- Una desconexión sin datos antes de transferir ningún dato se considera un reintento y, a diferencia de otras transacciones PCI, los iniciadores PCI deben hacer una breve pausa antes de continuar la operación. Consulte la especificación PCI para obtener más detalles.
- Aborto del objetivo
- Normalmente, un dispositivo de destino mantiene la señal DEVSEL# activada durante la última fase de datos. Sin embargo, si un dispositivo de destino desactiva DEVSEL# antes de desconectarse sin datos (activando STOP#), esto indica una interrupción del dispositivo , que es una condición de error fatal. El iniciador puede no reintentar la operación y, por lo general, lo trata como un error del bus . Un dispositivo de destino no puede desactivar DEVSEL# mientras espera con TRDY# o STOP# en estado bajo; debe hacerlo al comienzo de una fase de datos.
Siempre se necesitará al menos un ciclo para que el iniciador detecte una solicitud de desconexión iniciada por el objetivo y responda desactivando FRAME#. Hay dos subcasos que tardan la misma cantidad de tiempo, pero uno requiere una fase de datos adicional:
- Desconexión-A
- Si el iniciador observa STOP# antes de activar su propio IRDY#, entonces puede finalizar la ráfaga desactivando FRAME# al mismo tiempo que activa IRDY#, finalizando la ráfaga después de la fase de datos actual.
- Desconexión-B
- Si el iniciador ya ha activado IRDY# (sin desactivar FRAME#) cuando observa el STOP# del objetivo, se compromete a una fase de datos adicional. El objetivo debe esperar durante una fase de datos adicional sin datos, manteniendo STOP# activado sin TRDY#, antes de que la transacción pueda finalizar.
Si el iniciador finaliza la ráfaga al mismo tiempo que el objetivo solicita la desconexión, no se produce ningún ciclo de bus adicional.
Direccionamiento en ráfaga
Para acceder al espacio de memoria, las palabras de una ráfaga pueden accederse en varios órdenes. Los bits de dirección de orden inferior innecesarios AD[1:0] se utilizan para indicar el orden solicitado por el iniciador. Un dispositivo que no admita un orden específico debe finalizar la ráfaga tras la primera palabra. Algunos de estos órdenes dependen del tamaño de la línea de caché, que es configurable en todos los dispositivos PCI.
Si el desplazamiento inicial dentro de la línea de caché es cero, todos estos modos se reducen al mismo orden.
Los modos de alternancia y desbordamiento de línea de caché son dos formas de búsqueda de línea de caché con prioridad a la palabra crítica. El modo de alternancia realiza una operación XOR entre la dirección proporcionada y un contador incremental. Este es el orden nativo para los procesadores Intel 486 y Pentium. Su ventaja radica en que no es necesario conocer el tamaño de la línea de caché para su implementación.
La versión 2.1 de PCI dejó obsoleto el modo de alternancia y añadió el modo de envoltura de línea de caché, [ 32 ] : 2 donde la obtención procede linealmente, envolviéndose al final de cada línea de caché. Cuando una línea de caché se obtiene por completo, la obtención salta al desplazamiento inicial en la siguiente línea de caché.
La mayoría de los dispositivos PCI solo admiten un rango limitado de tamaños típicos de línea de caché; si el tamaño de la línea de caché se programa con un valor inesperado, fuerzan el acceso a una sola palabra.
PCI también admite el acceso en ráfaga al espacio de E/S y de configuración, pero solo admite el modo lineal. (Esto se usa con poca frecuencia y puede presentar errores en algunos dispositivos; es posible que no lo admitan, pero tampoco fuerzan correctamente el acceso a una sola palabra).
Ejemplos de transacciones
Esta es la ráfaga de escritura de cuatro palabras a la velocidad más alta posible, finalizada por el maestro:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ AD[31:0] ---<___X___X___X___X___>---<___> ___ ___ ___ ___ ___ C/BE[3:0]# ---<___X___X___X___X___>---<___> | | | | ___ IRDY# ^^^^^^^^\______________/ ^^^^^ | | | | ___ TRDY# ^^^^^^^^\______________/ ^^^^^ | | | | ___ DEVSEL# ^^^^^^^^\______________/ ^^^^^ ___ | | | ___ MARCO # \_______________/ | ^^^^\____ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7
En el flanco de reloj 1, el iniciador inicia una transacción enviando una dirección, un comando y activando FRAME#. Las demás señales están inactivas (indicadas por ^^^), mantenidas en alto por las resistencias pull-up de la placa base. Este podría ser su ciclo de retorno. En el ciclo 2, el destino activa DEVSEL# y TRDY#. Como el iniciador también está listo, se produce una transferencia de datos. Esto se repite durante tres ciclos más, pero antes del último (flanco de reloj 5), el maestro desactiva FRAME#, indicando que este es el final. En el flanco de reloj 6, el bus AD y FRAME# se desactivan (ciclo de retorno) y las demás líneas de control se mantienen en alto durante 1 ciclo. En el flanco de reloj 7, otro iniciador puede iniciar una transacción diferente. Este es también el ciclo de retorno para las demás líneas de control.
La ráfaga de lectura equivalente requiere un ciclo más, porque el objetivo debe esperar 1 ciclo para que el bus AD cambie de dirección antes de poder afirmar TRDY#:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ AD[31:0] ---<___>---<___X___X___X___>---<___> ___ _______ ___ ___ ___ C/BE[3:0]# ---<___X_______X___X___X___>---<___> ___ | | | | ___ IRDY# ^^^^\___________________/ ^^^^^ ___ _____ | | | | ___ TRDY# ^^^^ \______________/ ^^^^^ ___ | | | | ___ DEVSEL# ^^^^\___________________/ ^^^^^ ___ | | | ___ FOTOGRAMA # \___________________/ | ^^^^\____ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7 8
Una ráfaga de alta velocidad interrumpida por el objetivo tendrá un ciclo adicional al final:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ AD[31:0] ---<___>---<___X___X___X___XXXX>---- ___ _______ ___ ___ ___ ___ C/BE[3:0]# ---<___X_______X___X___X___X___>---- | | | | ___ IRDY# ^^^^^^^\_______________________/ _____ | | | | _______ TRDY# ^^^^^^^ \______________/ ________________ | ___ ALTO# ^^^^^^^ | | | \_______/ | | | | ___ DEVSEL# ^^^^^^^\_______________________/ ___ | | | | ___ FOTOGRAMA # \_______________________/ ^^^^ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7 8
En el flanco de reloj 6, el objetivo indica que quiere detenerse (con datos), pero el iniciador ya mantiene IRDY# en bajo, por lo que hay una quinta fase de datos (flanco de reloj 7), durante la cual no se transfieren datos.
Paridad
El bus PCI detecta errores de paridad, pero no intenta corregirlos reintentando las operaciones; simplemente indica un fallo. Por ello, no es necesario detectar el error de paridad antes de que ocurra, y el bus PCI lo detecta unos ciclos después. Durante una fase de datos, el dispositivo que controla las líneas AD[31:0] calcula la paridad par sobre ellas y las líneas C/BE[3:0]#, y la envía a través de la línea PAR un ciclo después. Todas las reglas de acceso y los ciclos de respuesta del bus AD se aplican a la línea PAR, solo que un ciclo después. El dispositivo que escucha en el bus AD comprueba la paridad recibida y activa la línea PERR# (error de paridad) un ciclo después. Esto generalmente genera una interrupción del procesador, y este puede buscar en el bus PCI el dispositivo que detectó el error.
La línea PERR# solo se utiliza durante las fases de datos, una vez que se ha seleccionado un destino. Si se detecta un error de paridad durante una fase de direccionamiento (o la fase de datos de un ciclo especial), los dispositivos que lo detectan activan la línea SERR# (error del sistema).
Incluso cuando algunos bytes están enmascarados por las líneas C/BE# y no se utilizan, deben tener un valor definido, y este valor debe usarse para calcular la paridad.
Transacciones rápidas y consecutivas
Debido a la necesidad de un ciclo de retroalimentación entre los diferentes dispositivos que controlan las señales del bus PCI, generalmente es necesario un ciclo de inactividad entre las transacciones del bus PCI. Sin embargo, en algunas circunstancias se permite omitir este ciclo de inactividad, pasando directamente del ciclo final de una transferencia (IRDY# activado, FRAME# desactivado) al primer ciclo de la siguiente (FRAME# activado, IRDY# desactivado).
Un iniciador solo puede realizar transacciones consecutivas cuando:
- son del mismo iniciador (de lo contrario no habría tiempo para invertir las líneas C/BE# y FRAME#),
- La primera transacción fue una escritura (por lo que no hay necesidad de dar la vuelta al bus AD), y
- El iniciador aún tiene permiso (a partir de su entrada GNT#) para usar el bus PCI.
Las restricciones de tiempo adicionales pueden derivarse de la necesidad de revertir las líneas de control del destino, en particular DEVSEL#. El destino desactiva DEVSEL#, elevándolo a nivel alto, en el ciclo posterior a la fase de datos final, que en el caso de transacciones consecutivas es el primer ciclo de la fase de direcciones. El segundo ciclo de la fase de direcciones se reserva para la reversión de DEVSEL#, por lo que si el destino es diferente del anterior, no debe activar DEVSEL# hasta el tercer ciclo (velocidad media de DEVSEL).
Un caso en el que este problema no puede surgir es si el iniciador sabe de alguna manera (presumiblemente porque las direcciones comparten suficientes bits de orden superior) que la segunda transferencia está dirigida al mismo destino que la anterior. En ese caso, puede realizar transacciones consecutivas. Todos los dispositivos PCI deben admitir esta funcionalidad.
También es posible que el objetivo realice un seguimiento de los requisitos. Si nunca realiza una prueba DEVSEL rápida, estos se cumplen fácilmente. Si la realiza, debe esperar hasta el tiempo de la prueba DEVSEL media, a menos que:
- La transacción actual fue precedida por un ciclo inactivo (no es consecutiva), o
- la transacción anterior fue con el mismo objetivo, o
- La transacción actual comenzó con un ciclo de doble dirección.
Los dispositivos que poseen esta capacidad lo indican mediante un bit especial en un registro de configuración PCI, y si todos los dispositivos en un bus la tienen, todos los iniciadores pueden usar transferencias consecutivas libremente.
Un puente de bus de decodificación sustractiva debe prever este retraso adicional en caso de ciclos consecutivos, para anunciar la compatibilidad con ciclos consecutivos.
PCI de 64 bits
A partir de la revisión 2.1, la especificación PCI incluye soporte opcional para 64 bits. Este soporte se proporciona mediante un conector extendido que incluye las extensiones de bus de 64 bits AD[63:32], C/BE[7:4]# y PAR64, además de varios pines adicionales de alimentación y tierra. El conector PCI de 64 bits se distingue de uno de 32 bits por el segmento adicional de 64 bits.
Las transacciones de memoria entre dispositivos de 64 bits pueden usar los 64 bits para duplicar la velocidad de transferencia de datos. Las transacciones que no son de memoria (incluidos los accesos al espacio de configuración y E/S) no pueden usar la extensión de 64 bits. Durante una ráfaga de 64 bits, el direccionamiento de ráfaga funciona igual que en una transferencia de 32 bits, pero la dirección se incrementa dos veces por fase de datos. La dirección inicial debe estar alineada a 64 bits; es decir, AD2 debe ser 0. Los datos correspondientes a las direcciones intermedias (con AD2 = 1) se transmiten por la mitad superior del bus AD.
Para iniciar una transacción de 64 bits, el iniciador envía la dirección de inicio en el bus AD y activa REQ64# simultáneamente con FRAME#. Si el destino seleccionado admite una transferencia de 64 bits para esta transacción, responde activando ACK64# simultáneamente con DEVSEL#. Un destino puede decidir, para cada transacción, si permite o no una transferencia de 64 bits.
Si se activa REQ64# durante la fase de direccionamiento, el iniciador también transmite los 32 bits superiores de la dirección y una copia del comando del bus en la mitad superior del bus. Si la dirección requiere 64 bits, aún se requiere un ciclo de direccionamiento doble, pero la mitad superior del bus transporta la mitad superior de la dirección y el código de comando final durante ambos ciclos de la fase de direccionamiento; esto permite que un dispositivo de destino de 64 bits vea la dirección completa y comience a responder antes.
Si el iniciador detecta la señal DEVSEL# sin ACK64#, realiza fases de datos de 32 bits. Los datos que se habrían transferido en la mitad superior del bus durante la primera fase se transfieren en la segunda. Normalmente, el iniciador transmite los 64 bits de datos antes de detectar DEVSEL#. Si falta ACK64#, puede dejar de transmitir la mitad superior del bus de datos.
Las líneas REQ64# y ACK64# se mantienen activas durante toda la transacción, excepto la última fase de datos, y se desactivan al mismo tiempo que FRAME# y DEVSEL#, respectivamente.
La línea PAR64 funciona igual que la línea PAR, pero proporciona paridad uniforme sobre AD[63:32] y C/BE[7:4]#. Solo es válida para las fases de dirección si REQ64# está activado. PAR64 solo es válida para las fases de datos si REQ64# y ACK64# están activados.
Espionaje de caché (obsoleto)
PCI originalmente incluía soporte opcional para la coherencia de caché de escritura diferida . Esto requería soporte por parte de los destinos de memoria caché, que escuchaban dos pines de la caché en el bus: SDONE (snoop done) y SBO# (snoop backoff). [ 35 ]
Debido a que esto rara vez se implementaba en la práctica, se eliminó de la revisión 2.2 de la especificación PCI, [ 16 ] [ 36 ] y los pines se reutilizaron para el acceso SMBus en la revisión 2.3. [ 18 ]
La caché supervisaría todos los accesos a memoria, sin activar DEVSEL#. Si detectara un acceso que pudiera estar en caché, pondría SDONE en bajo (la operación de espionaje no se realizaría). Un objetivo compatible con la coherencia evitaría completar una fase de datos (activando TRDY#) hasta que observara SDONE en alto.
En el caso de escribir datos limpios en la caché, esta solo tendría que invalidar su copia y activaría SDONE en cuanto se estableciera. Sin embargo, si la caché contuviera datos modificados, tendría que reescribirlos antes de que el acceso pudiera continuar. Por lo tanto, activaría SBO# al activar SDONE. Esto indicaría al destino activo que activara STOP# en lugar de TRDY#, lo que provocaría que el iniciador se desconectara y volviera a intentar la operación más tarde. Mientras tanto, la caché arbitraría el bus y escribiría sus datos de nuevo en la memoria.
Los sistemas compatibles con la coherencia de caché también deben finalizar las ráfagas antes de que crucen las líneas de caché.
Herramientas de desarrollo

Al desarrollar o solucionar problemas del bus PCI, el análisis de las señales de hardware puede ser fundamental. Los analizadores lógicos y de bus son herramientas que recopilan, analizan y decodifican señales para que los usuarios puedan visualizarlas de forma útil.
Empresas como Synopsys , Lattice Semiconductor y Rambus ofrecen núcleos de propiedad intelectual de silicio para diseñar circuitos integrados de aplicación específica (ASIC) de semiconductores que utilizan el estándar de bus PCI.
Véase también
- Espacio de configuración PCI
- CompactPCI , PCI-X , PCI Express
- PCI-SIG , Grupo de Interés Especial de PCI
- PICMG , Grupo de Fabricantes de Computadoras Industriales PCI
- Eurocard (placa de circuito impreso)
Referencias
- ↑ Especificación del bus local PCI Revisión 2.2 . Hillsboro, Oregón : Grupo de Interés Especial de PCI . 18 de diciembre de 1998. página ii.
- ↑ "PCIe (Peripheral Component Interconnect Express) | En la placa base | Certificación de TI de Pearson" . www.pearsonitcertification.com . Consultado el 25 de septiembre de 2020 .
- ↑ «PCI» . Web-o-pedia. Septiembre de 1996..
- ^ Hamacher, V. Carl; Vranesic, Zvonko G.; Zaky, Safwat G. (2002). Organización informática (5ª ed.). McGraw-Hill. ISBN 9780071122184.
- ↑ "Tarjeta gráfica AMD HD 4350 edición PCI de HIS" . Consultado el 27 de julio de 2009 .
- ↑ Sumathi, S.; Surekha, P. (2007). Sistemas avanzados de instrumentación basados en LabVIEW . Springer. pág. 305. ISBN 978-3-540-48501-8.
- 1 2 Abbott, Doug (2004). El bus PCI desmitificado . Serie Desmitificando la tecnología (2.ª ed.). Ámsterdam Boston: Newnes. págs. xi, 7–10 . ISBN 978-0-7506-7739-4.
- ↑ Imdad-Haque, Faisal (1996). Inside PC Card: CardBus and PCMCIA Design: CardBus and PCMCIA Design . Newnes. p. 39. ISBN 978-0-08-053473-2.
- ↑ Variación del bus PCI
- 1 2 Williams, John (2008). Diseño digital VLSI con Verilog: Un libro de texto del Instituto Técnico de Silicon Valley . Springer. pág. 67. ISBN 978-1-4020-8446-1.
- ↑ Bachmutsky, Alexander (2011). Diseño de sistemas para pasarelas de telecomunicaciones . John Wiley & Sons. pág. 81. ISBN 978-1-119-95642-6.
- ↑ VLB fue diseñado para sistemas basados en 486, pero incluso el PCI, más genérico, llegó a ganar protagonismo en esa plataforma.
- ↑ Meyers, Michael (2012). Guía de preparación para el examen de certificación CompTIA A+ (8.ª ed.). McGraw Hill Professional. pág. 339. ISBN 978-0-07-179512-8.
- ↑ Identificar una variedad de ranuras PCI , LaCie
- ↑ "Historial familiar de PCI" (PDF) .
- 1 2 3 4 5 6 Especificación del bus local PCI, revisión 3.0
- ↑ "Cómo configurar un temporizador de latencia PCI" . Reric.NET por Eric Seppanen. 14/11/2004 . Consultado el 17/07/2008 .
- 1 2 3 4 5 Especificación del bus local PCI Revisión 2.3 . Portland, Oregón : Grupo de Interés Especial de PCI . 29 de marzo de 2002.
- ↑ "Diagrama de pines del conector PCI" . Archivado del original el 26 de junio de 2010. Consultado el 12 de mayo de 2009 .
- 1 2 Especificación de la interfaz de administración de energía PCI v1.2
- ↑ "archive.org/zuavra.net - Uso de Wake-On-LAN WOL/PME para encender su computadora de forma remota" . Archivado del original el 8 de marzo de 2007.
- ↑ ZNYX Networks (16 de junio de 2009). "Serie ZX370" . Archivado del original el 2 de mayo de 2011. Consultado el 13 de julio de 2012. La
serie ZX370 es un verdadero adaptador de 64 bits, que amplía el canal de red para lograr un mayor rendimiento a la vez que ofrece compatibilidad con versiones anteriores con ranuras PCI estándar de 32 bits.
- ↑ ZNYX Networks. "Adaptador Ethernet rápido PCI multicanal de la serie ZX370" (PDF) . Archivado del original (PDF) el 20 de julio de 2013. Consultado el 13 de julio de 2012.
Compatible con versiones anteriores
de ranuras PCI de 32 bits y 33 MHz
. - ↑ Adaptec (enero de 2000). "Referencia del usuario del controlador SCSI Ultra160 de la tarjeta SCSI Adaptec 29160" (pdf) . pág. 1. Consultado el 13 de julio de 2012. Aunque
la tarjeta SCSI Adaptec 29160 es una tarjeta PCI de 64 bits, también funciona en una ranura PCI de 32 bits. Cuando se instala en una ranura PCI de 32 bits, la tarjeta funciona automáticamente en el modo de 32 bits, que es más lento.
- ↑ LaCie. "Soporte de LaCie: Identificación de diversas ranuras PCI" . Archivado del original el 4 de abril de 2012. Consultado el 13 de julio de 2012 .
- ↑ Especificación del bus local PCI, revisión 3.0 . Hillsboro, Oregón : Grupo de Interés Especial de PCI . 3 de febrero de 2004. Figura 5-8.
- ↑ Especificación del bus local PCI, revisión 3.0 . Hillsboro, Oregón : Grupo de Interés Especial de PCI . 3 de febrero de 2004. Figura 5-9.
- ↑ Especificación del bus local PCI, revisión 3.0 . Hillsboro, Oregón : Grupo de Interés Especial de PCI . 3 de febrero de 2004. Figura 5-6.
- ↑ Especificación del bus local PCI, revisión 3.0 . Hillsboro, Oregón : Grupo de Interés Especial de PCI . 3 de febrero de 2004. Figura 5-7.
- ↑ Micro PCI, Micro AGP (Preguntas frecuentes), iBASE , consultado el 20/11/2010
{{citation}}: CS1 maint: servicio de archivado obsoleto ( enlace ) . - ↑ Roudier, Gérard (2001-11-28). "Re: sym53c875: la lectura de /proc causa un error de paridad SCSI" . linux-kernel (Lista de correo).
- 1 2 Especificación del bus local PCI: Revisión 2.1 frente a Revisión 2.0 (PDF) (Nota de aplicación). Intel Corporation. Marzo de 1997. AP-753. Archivado del original (PDF) el 30 de abril de 2015.
- ↑ "Especificaciones del bus: escritura de controladores de dispositivos para Oracle® Solaris 11.3" . docs.oracle.com . Consultado el 18 de diciembre de 2020 .
- ↑ Especificación de la arquitectura del puente PCI a PCI, revisión 1.1
- ↑ Especificación del bus local PCI, revisión 2.1
- ↑ Especificación del bus local PCI, revisión 2.2 . Hillsboro, Oregón : Grupo de Interés Especial de PCI . 18 de diciembre de 1998.
Lecturas adicionales
- Especificaciones técnicas oficiales
- Especificación del bus local PCI: Revisión 2.3 . PCI-SIG. 29 de marzo de 2002.(1000 dólares para no miembros o 50 dólares para miembros. La membresía de PCI-SIG cuesta 3000 dólares al año).
- Especificación del bus local PCI: Revisión 3.0 . PCI-SIG. 12 de agosto de 2002.(1000 dólares para no miembros o 50 dólares para miembros. La membresía de PCI-SIG cuesta 3000 dólares al año).
- Libros
- Abbott, Doug (2004). PCI Bus Demystified (2.ª ed.). Elsevier Science. ISBN 978-0-7506-7739-4.250 páginas.
- Shanley, Tom (1999). Arquitectura del sistema PCI (4.ª ed.). Addison-Wesley Professional. ISBN 978-0-201-30974-4.832 páginas.
- Shanley, Tom (2000). Arquitectura del sistema PCI-X (1.ª ed.). Addison-Wesley. ISBN 978-0-201-72682-4.752 páginas.
- Solari, Ed. (2001). Arquitectura y diseño de hardware y software PCI y PCI-X (5.ª ed.). Annabooks. ISBN 978-0-929392-63-9.1140 páginas.
- Goodrum, Alan (1998). Aplicación y diseño de PCI HotPlug (1.ª ed.). Annabooks. ISBN 978-0-929392-60-8.162 páginas.
Enlaces externos
- Oficial
- Sitio web oficial del Grupo de Interés Especial de PCI (PCI-SIG)
- Detalles técnicos
- Introducción al protocolo PCI. Archivado el 19 de enero de 2013 en Wayback Machine , electrofriends.com.
- Diagrama de pines y señales del bus PCI , pinouts.ru
- Dimensiones de la tarjeta PCI , interfacebus.com
- Listas de proveedores, dispositivos e identificadores
- Listados de proveedores y dispositivos PCI , pcidatabase.com
- Repositorio de ID de PCI , un proyecto para recopilar todos los ID conocidos.
- Consejos
- Breve descripción general de los requisitos de alimentación y compatibilidad de PCI con un diagrama ilustrativo.
- Buenos diagramas y texto sobre cómo reconocer la diferencia entre ranuras de 5 voltios y de 3,3 voltios.
- Linux
- Linux con tarjetas miniPCI
- Decodificación de datos PCI y salida de lspci en hosts Linux
- Herramientas de desarrollo
- Extensor de bus PCI activo , dinigroup.com
- Núcleos FPGA
- Núcleo de interfaz PCI , Lattice Semiconductor
- Núcleo del puente PCI , OpenCore.
- Búsqueda de IP para núcleos de bus PCI , Berkeley.
- Interconexión de componentes periféricos
- Ranura de expansión de la placa base
- Componentes internos de Macintosh
- IBM PC compatibles
- Introducciones relacionadas con la informática en 1993