# Peripheral Component Interconnect

Peripheral Component Interconnect (PCI) é um barramento de computador local para conectar dispositivos de hardware em um computador e faz parte do padrão PCI Local Bus. O barramento PCI suporta as funções encontradas em um barramento de processador, mas em um formato padronizado que é independente de qualquer barramento nativo do processador. Os dispositivos conectados ao barramento PCI parecem a um barramento mestre estar conectados diretamente ao seu próprio barramento e recebem endereços no espaço de endereço do processador. É um barramento paralelo, síncrono a um único clock de barramento. Os dispositivos conectados podem assumir a forma de um circuito integrado instalado na placa-mãe (chamado de dispositivo planar na especificação PCI) ou uma placa de expansão que se encaixa em um slot. O PCI Local Bus foi implementado pela primeira vez em compatíveis com IBM PC, onde substituiu a combinação de vários slots lentos Industry Standard Architecture (ISA) e um slot rápido VESA Local Bus (VLB) como a configuração do barramento. Posteriormente, foi adotado para outros tipos de computadores. As placas PCI típicas usadas em PCs incluem: placas de rede, placas de som, modems, portas extras como Universal Serial Bus (USB) ou serial, placas sintonizadoras de TV e adaptadores host de unidade de disco rígido. As placas de vídeo PCI substituíram as placas ISA e VLB até que as crescentes necessidades de largura de banda superaram as capacidades do PCI. A interface preferida para placas de vídeo tornou-se então a Accelerated Graphics Port (AGP), um superconjunto do PCI, antes de dar lugar ao PCI Express.
A primeira versão do PCI encontrada em computadores de mesa de varejo era um barramento de 32 bits usando um clock de barramento de 33 MHz e sinalização de 5 V, embora o padrão PCI 1.0 também fornecesse uma variante de 64 bits. Eles têm um entalhe de localização na placa. A versão 2.0 do padrão PCI introduziu slots de 3,3 V, fisicamente diferenciados por um conector físico invertido para evitar a inserção acidental de placas de 5 V. As placas universais, que podem operar em qualquer voltagem, têm dois entalhes. A versão 2.1 do padrão PCI introduziu a operação opcional de 66 MHz. Uma variante orientada a servidor do PCI, PCI Extended (PCI-X) operava em frequências de até 133 MHz para PCI-X 1.0 e até 533 MHz para PCI-X 2.0. Um conector interno para placas de laptop, chamado Mini PCI, foi introduzido na versão 2.2 da especificação PCI. O barramento PCI também foi adotado para um padrão de conector de laptop externo - o CardBus. A primeira especificação PCI foi desenvolvida pela Intel, mas o desenvolvimento subsequente do padrão tornou-se responsabilidade do PCI Special Interest Group (PCI-SIG).
PCI e PCI-X às vezes são chamados de PCI Paralelo ou PCI Convencional para distingui-los tecnologicamente de seu sucessor mais recente, PCI Express, que adotou uma arquitetura serial baseada em pistas. O apogeu do PCI no mercado de computadores desktop foi aproximadamente de 1995 a 2005. PCI e PCI-X se tornaram obsoletos para a maioria dos propósitos e desapareceram amplamente de muitas outras placas-mãe modernas desde 2013; no entanto, eles ainda são comuns em alguns desktops modernos a partir de 2020 para fins de compatibilidade com versões anteriores e o custo relativamente baixo de produção. Outra aplicação moderna comum do PCI paralelo é em PCs industriais, onde muitas placas de expansão especializadas, usadas aqui, nunca fizeram a transição para PCI Express, assim como com algumas placas ISA. Muitos tipos de dispositivos anteriormente disponíveis em placas de expansão PCI agora são comumente integrados em placas-mãe ou disponíveis em versões USB e PCI Express.

## História

O trabalho no PCI começou no Intel Architecture Labs (IAL, também Architecture Development Lab) por volta de 1990. Uma equipe composta principalmente por engenheiros do IAL definiu a arquitetura e desenvolveu um chipset e uma plataforma de prova de conceito (Saturn) em parceria com equipes nos sistemas de PC de mesa da empresa e nas principais organizações de produtos lógicos.
O PCI foi imediatamente colocado em uso em servidores, substituindo a Micro Channel architecture (MCA) e a Extended Industry Standard Architecture (EISA) como o barramento de expansão de servidor de escolha. Em PCs convencionais, o PCI foi mais lento para substituir o VLB e não ganhou penetração significativa no mercado até o final de 1994 em PCs Pentium de segunda geração. Em 1996, o VLB estava quase extinto e os fabricantes adotaram o PCI até mesmo para computadores Intel 80486 (486). O EISA continuou a ser usado junto com o PCI até 2000. A Apple Computer adotou o PCI para computadores Power Macintosh profissionais (substituindo o NuBus) em meados de 1995 e a linha de produtos Performa para o consumidor (substituindo o LC Processor Direct Slot (PDS)) em meados de 1996.
Fora do mercado de servidores, a versão de 64 bits do PCI simples permaneceu rara na prática, embora tenha sido usada, por exemplo, por todos os computadores Power Macintosh G3 e G4 (pós-iMac).
Revisões posteriores do PCI adicionaram novos recursos e melhorias de desempenho, incluindo um padrão de 66 MHz 3,3 V e 133 MHz PCI-X, e a adaptação da sinalização PCI para outros fatores de forma. Tanto o PCI-X 1.0b quanto o PCI-X 2.0 são compatíveis com versões anteriores de alguns padrões PCI. Essas revisões foram usadas em hardware de servidor, mas o hardware de PC do consumidor permaneceu quase todo de 32 bits, 33 MHz e 5 volts.
O PCI-SIG introduziu o PCI Express serial em c. 2004. Desde então, os fabricantes de placas-mãe incluíram progressivamente menos slots PCI em favor do novo padrão. Muitas placas-mãe novas não fornecem slots PCI, até o final de 2013.$^[$
Histórico do PCI :
| Especificação | Ano | Resumo da alteração |
| PCI 1.0 | 1992 | Edição original |
| PCI 2.0 | 1993 | Conector incorporado e especificação de placa adicional |
| PCI 2.1 | 1995 | Esclarecimentos incorporados e capítulo de 66 MHz adicionado |
| PCI 2.2 | 1998 | ECNs incorporados e legibilidade melhorada |
| PCI 2.3 | 2002 | ECNs incorporados, erratas e placas adicionais com chave de 5 volts excluídos |
| PCI 3.0 | 2004 | Removido o suporte para conector de placa de sistema com chave de 5,0 volts |

## Configuração automática

PCI fornece memória separada e espaços de endereço de porta de I/O mapeados em memória para a família de processadores x86, 64 e 32 bits, respectivamente. Endereços nesses espaços de endereço são atribuídos por software. Um terceiro espaço de endereço, chamado PCI Configuration Space, que usa um esquema de endereçamento fixo, permite que o software determine a quantidade de memória e espaço de endereço de I/O necessários para cada dispositivo. Cada dispositivo pode solicitar até seis áreas de espaço de memória ou espaço de porta de entrada/saída (I/O) por meio de seus registradores de espaço de configuração.
Em um sistema típico, o firmware (ou sistema operacional) consulta todos os barramentos PCI no momento da inicialização (por meio do PCI Configuration Space) para descobrir quais dispositivos estão presentes e quais recursos do sistema (espaço de memória, espaço de I/O, linhas de interrupção, etc.) cada um precisa. Ele então aloca os recursos e informa a cada dispositivo qual é sua alocação.
O espaço de configuração PCI também contém uma pequena quantidade de informações sobre o tipo de dispositivo, o que ajuda o sistema operacional a escolher drivers de dispositivo para ele ou, pelo menos, a dialogar com o usuário sobre a configuração do sistema.
Os dispositivos podem ter uma memória somente leitura (ROM) on-board contendo código executável para processadores x86 ou PA-RISC, um driver Open Firmware ou uma Option ROM. Eles são normalmente necessários para dispositivos usados ​​durante a inicialização do sistema, antes que os drivers de dispositivo sejam carregados pelo sistema operacional.
Além disso, há PCI Latency Timers que são um mecanismo para dispositivos PCI Bus-Mastering compartilharem o barramento PCI de forma justa. "Justo" neste caso significa que os dispositivos não usarão uma porção tão grande da largura de banda do barramento PCI disponível que outros dispositivos não consigam fazer o trabalho necessário. Observe que isso não se aplica ao PCI Express.

## Interrupções

Os dispositivos precisam seguir um protocolo para que as linhas de solicitação de interrupção (IRQ) possam ser compartilhadas. O barramento PCI inclui quatro linhas de interrupção, INTA# a INTD#, todas disponíveis para cada dispositivo. Até oito dispositivos PCI compartilham a mesma linha de IRQ (LNKA a LNKH) em sistemas x86 habilitados para APIC. As linhas de interrupção não são conectadas em paralelo, assim como as outras linhas de barramento PCI. As posições das linhas de interrupção giram entre os slots, então o que parece para um dispositivo como a linha INTA# é INTB# para o próximo e INTC# para o seguinte. Dispositivos de função única geralmente usam seu INTA# para sinalização de interrupção, então a carga do dispositivo é distribuída de forma bastante uniforme entre as quatro linhas de interrupção disponíveis. Isso alivia um problema comum com o compartilhamento de interrupções.
O mapeamento de linhas de interrupção PCI em linhas de interrupção do sistema, por meio da ponte de host PCI, depende da implementação. O firmware específico da plataforma ou o código do sistema operacional devem saber disso e definir o campo "linha de interrupção" no espaço de configuração de cada dispositivo, indicando a qual IRQ ele está conectado.
As linhas de interrupção PCI são acionadas por nível. Isso foi escolhido em vez do acionamento por borda para obter uma vantagem ao atender uma linha de interrupção compartilhada e para robustez: interrupções acionadas por borda são fáceis de perder.
Revisões posteriores da especificação PCI adicionam suporte para interrupções sinalizadas por mensagem. Neste sistema, um dispositivo sinaliza sua necessidade de serviço realizando uma gravação de memória, em vez de afirmar uma linha dedicada. Isso alivia o problema de escassez de linhas de interrupção. Mesmo se os vetores de interrupção ainda forem compartilhados, ele não sofre os problemas de compartilhamento de interrupções acionadas por nível. Ele também resolve o problema de roteamento, porque a gravação de memória não é modificada de forma imprevisível entre o dispositivo e o host. Finalmente, como a sinalização de mensagem é in-band, ele resolve alguns problemas de sincronização que podem ocorrer com gravações postadas e linhas de interrupção fora de banda.
O PCI Express não tem linhas de interrupção física. Ele usa interrupções sinalizadas por mensagem exclusivamente.

## Especificações de hardware convencionais

Essas especificações representam a versão mais comum de PCI usada em PCs normais:
* Clock de 33,33 MHz com transferências síncronas
* Taxa de transferência máxima de 133 MB/s (133 megabytes por segundo) para largura de barramento de 32 bits (33,33 MHz × 32 bits ÷ 8 bits/byte = 133 MB/s)
* Largura de barramento de 32 bits
* Espaço de endereço de memória de 32 ou 64 bits (4 GiB ou 16 EiB)
* Espaço de porta de I/O de 32 bits
* Espaço de configuração de 256 bytes (por dispositivo)
* Sinalização de 5 volts
* Comutação de onda refletida
A especificação PCI também fornece opções para sinalização de 3,3 V, largura de barramento de 64 bits e clock de 66 MHz, mas elas não são comumente encontradas fora do suporte PCI-X em placas-mãe de servidor.
O árbitro de barramento PCI realiza arbitragem de barramento entre vários mestres no barramento PCI. Qualquer número de mestres de barramento pode residir no barramento PCI, bem como solicitações para o barramento. Um par de sinais de solicitação e concessão é dedicado a cada mestre de barramento.

### Voltagem e codificação da placa

Placas PCI típicas têm um ou dois entalhes de chave, dependendo da voltagem de sinalização. Placas que requerem 3,3 volts têm um entalhe a 56,21 mm da placa traseira da placa; aquelas que requerem 5 volts têm um entalhe a 104,41 mm da placa traseira. Isso permite que as placas sejam encaixadas somente em slots com uma voltagem que elas suportam. "Placas universais" que aceitam qualquer voltagem têm ambos os entalhes de chave.

### Pinagem do conector

O conector PCI é definido como tendo 62 contatos em cada lado do conector de borda, mas dois ou quatro deles são substituídos por entalhes de chave, então uma placa tem 60 ou 58 contatos em cada lado. O lado A se refere ao 'lado da solda' e o lado B se refere ao 'lado do componente': se a placa for segurada com o conector apontando para baixo, uma vista do lado A terá a placa traseira à direita, enquanto uma vista do lado B terá a placa traseira à esquerda. A pinagem dos lados B e A são os seguintes, olhando para baixo no conector da placa-mãe (os pinos A1 e B1 são os mais próximos da placa traseira).
32-bit PCI connector pinout :
| Pino | Lado B | Lado B | Lado A | Lado A | Comentários |
| 1 | −12 V | −12 V | TRST# | TRST# | Pinos de porta JTAG (opcional) |
| 2 | TCK | TCK | +12 V | +12 V | | Pinos de porta JTAG (opcional) |
| 3 | Ground | Ground | TMS | TMS | | Pinos de porta JTAG (opcional) |
| 4 | TDO | TDO | TDI | TDI | | Pinos de porta JTAG (opcional) |
| 5 | +5 V | +5 V | +5 V | +5 V | |
| 6 | +5 V | +5 V | INTA# | INTA# | Pinos de interrupção (dreno aberto) |
| 7 | INTB# | INTB# | INTC# | INTC# | | Pinos de interrupção (dreno aberto) |
| 8 | INTD# | INTD# | +5 V | +5 V | | Pinos de interrupção (dreno aberto) |
| 9 | PRSNT1# | PRSNT1# | Reservado | Reservado | Puxado para baixo para indicar 7,5 ou 25 W de potência necessária |
| 10 | Reservado | Reservado | IOPWR | IOPWR | +5 V ou +3.3 V |
| 11 | PRSNT2# | PRSNT2# | Reservado | Reservado | Puxado para baixo para indicar 7,5 ou 15 W de potência necessária |
| 12 | Ground | Ground | Ground | Ground | Entalhe de chave para placas com capacidade para 3,3 V |
| 13 | Ground | Ground | Ground | Ground | | Entalhe de chave para placas com capacidade para 3,3 V |
| 14 | Reservado | Reservado | 3.3 V aux | 3.3 V aux | Stand by power (opcional) |
| 15 | Ground | Ground | RST# | RST# | Reinicialização do barramento |
| 16 | CLK | CLK | IOPWR | IOPWR | Clock 33/66 MHz |
| 17 | Ground | Ground | GNT# | GNT# | Concessão de barramento da placa-mãe para a placa |
| 18 | REQ# | REQ# | Ground | Ground | Solicitação de barramento da placa para a placa-mãe |
| 19 | IOPWR | IOPWR | PME# | PME# | Evento de gerenciamento de energia (opcional) 3,3 V, dreno aberto, ativo baixo. |
| 20 | AD[31] | AD[31] | AD[30] | AD[30] | Barramento de endereço/dados (metade superior) |
| 21 | AD[29] | AD[29] | +3.3 V | +3.3 V | | Barramento de endereço/dados (metade superior) |
| 22 | Ground | Ground | AD[28] | AD[28] | | Barramento de endereço/dados (metade superior) |
| 23 | AD[27] | AD[27] | AD[26] | AD[26] | | Barramento de endereço/dados (metade superior) |
| 24 | AD[25] | AD[25] | Ground | Ground | | Barramento de endereço/dados (metade superior) |
| 25 | +3.3 V | +3.3 V | AD[24] | AD[24] | | Barramento de endereço/dados (metade superior) |
| 26 | C/BE[3]# | C/BE[3]# | IDSEL | IDSEL | | Barramento de endereço/dados (metade superior) |
| 27 | AD[23] | AD[23] | +3.3 V | +3.3 V | | Barramento de endereço/dados (metade superior) |
| 28 | Ground | Ground | AD[22] | AD[22] | | Barramento de endereço/dados (metade superior) |
| 29 | AD[21] | AD[21] | AD[20] | AD[20] | | Barramento de endereço/dados (metade superior) |
| 30 | AD[19] | AD[19] | Ground | Ground | | Barramento de endereço/dados (metade superior) |
| 31 | +3.3 V | +3.3 V | AD[18] | AD[18] | | Barramento de endereço/dados (metade superior) |
| 32 | AD[17] | AD[17] | AD[16] | AD[16] | | Barramento de endereço/dados (metade superior) |
| 33 | C/BE[2]# | C/BE[2]# | +3.3 V | +3.3 V | | Barramento de endereço/dados (metade superior) |
| 34 | Ground | Ground | FRAME# | FRAME# | Transferência de barramento em andamento |
| 35 | IRDY# | IRDY# | Ground | Ground | Iniciador pronto |
| 36 | +3.3 V | +3.3 V | TRDY# | TRDY# | Alvo pronto |
| 37 | DEVSEL# | DEVSEL# | Ground | Ground | Alvo selecionado |
| 38 | PCIXCAP | Ground | STOP# | STOP# | PCI-X compatível; solicitações de destino são interrompidas |
| 39 | LOCK# | LOCK# | +3.3 V | +3.3 V | Transação bloqueada |
| 40 | PERR# | PERR# | SMBCLK | SDONE | Erro de paridade; Clock SMBus ou Snoop feito (obsoleto) (Snoop done (obsolete)) |
| 41 | +3.3 V | +3.3 V | SMBDAT | SBO# | Dados SMBus ou Snoop backoff (obsoleto) (Snoop backoff (obsolete)) |
| 42 | SERR# | SERR# | Ground | Ground | Erro do sistema |
| 43 | +3.3 V | +3.3 V | PAR | PAR | Paridade par sobre AD[31:00] e C/BE[3:0]# |
| 44 | C/BE[1]# | C/BE[1]# | AD[15] | AD[15] | Barramento de endereço/dados (metade superior) |
| 45 | AD[14] | AD[14] | +3.3 V | +3.3 V | | Barramento de endereço/dados (metade superior) |
| 46 | Ground | Ground | AD[13] | AD[13] | | Barramento de endereço/dados (metade superior) |
| 47 | AD[12] | AD[12] | AD[11] | AD[11] | | Barramento de endereço/dados (metade superior) |
| 48 | AD[10] | AD[10] | Ground | Ground | | Barramento de endereço/dados (metade superior) |
| 49 | M66EN | Ground | AD[09] | AD[09] | | Barramento de endereço/dados (metade superior) |
| 50 | Ground | Ground | Ground | Ground | Entalhe de chave para placas com capacidade para 5 V |
| 51 | Ground | Ground | Ground | Ground | | Entalhe de chave para placas com capacidade para 5 V |
| 52 | AD[08] | AD[08] | C/BE[0]# | C/BE[0]# | Barramento de endereço/dados (metade inferior) |
| 53 | AD[07] | AD[07] | +3.3 V | +3.3 V | | Barramento de endereço/dados (metade inferior) |
| 54 | +3.3 V | +3.3 V | AD[06] | AD[06] | | Barramento de endereço/dados (metade inferior) |
| 55 | AD[05] | AD[05] | AD[04] | AD[04] | | Barramento de endereço/dados (metade inferior) |
| 56 | AD[03] | AD[03] | Ground | Ground | | Barramento de endereço/dados (metade inferior) |
| 57 | Ground | Ground | AD[02] | AD[02] | | Barramento de endereço/dados (metade inferior) |
| 58 | AD[01] | AD[01] | AD[00] | AD[00] | | Barramento de endereço/dados (metade inferior) |
| 59 | IOPWR | IOPWR | IOPWR | IOPWR | |
| 60 | ACK64# | ACK64# | REQ64# | REQ64# | Para extensão de 64 bits; sem conexão para dispositivos de 32 bits. |
| 61 | +5 V | +5 V | +5 V | +5 V | |
| 62 | +5 V | +5 V | +5 V | +5 V | | |
O PCI de 64 bits estende isso com 32 contatos adicionais em cada lado, que fornecem AD[63:32], C/BE[7:4]#, o sinal de paridade PAR64 e vários pinos de alimentação e aterramento.
Legenda :
| pino de aterramento (Ground pin, GND) | Referência de zero volt |
| Pino de energia (Power pin) | Fornece energia para a placa PCI |
| Pino de saída (Output pin) | Acionado pela placa PCI, recebido pela placa-mãe |
| Saída do iniciador | Impulsionado pelo mestre/iniciador, recebido pelo alvo |
| Sinal de I/O | Pode ser acionado pelo iniciador ou pelo alvo, dependendo da operação |
| Saída alvo | Impulsionado pelo alvo, recebido pelo iniciador/mestre |
| Entrada (Input) | Acionado pela placa-mãe, recebido pela placa PCI |
| Dreno aberto | Pode ser puxado para baixo e/ou detectado por várias cartas |
| Reservado | Não utilizado atualmente, não conectar |
A maioria das linhas são conectadas a cada slot em paralelo. As exceções são:
* Cada slot tem sua própria saída REQ# e entrada GNT# do árbitro da placa-mãe.
* Cada slot tem sua própria linha IDSEL, geralmente conectada a uma linha AD específica.
* O TDO é encadeado em série ao TDI do slot seguinte. Placas sem suporte a JTAG devem conectar o TDI ao TDO para não quebrar a cadeia.
* PRSNT1# e PRSNT2# para cada slot têm seus próprios resistores pull-up na placa-mãe. A placa-mãe pode (mas não precisa) detectar esses pinos para determinar a presença de placas PCI e seus requisitos de energia.
* REQ64# e ACK64# são extraídos individualmente em slots de apenas 32 bits.
* Os pinos de interrupção INTA# a INTD# são conectados a todos os slots em ordens diferentes. (INTA# em um slot é INTB# no próximo e INTC# no seguinte.)
Notas:
* IOPWR é +3,3 V ou +5 V, dependendo do backplane. Os slots também têm uma crista em um dos dois lugares que impede a inserção de placas que não tenham o entalhe de chave correspondente, indicando suporte para esse padrão de voltagem. Os placas universais têm ambos os entalhes de chave e usam IOPWR para determinar seus níveis de sinal de I/O.
* O PCI SIG incentiva fortemente a sinalização PCI de 3,3 V, exigindo suporte para ela desde a revisão padrão 2.3, mas a maioria das placas-mãe de PC usa a variante de 5 V. Assim, embora muitas placas PCI disponíveis atualmente suportem ambas e tenham dois entalhes principais para indicar isso, ainda há um grande número de placas somente de 5 V no mercado.
* O pino M66EN é um aterramento adicional em barramentos PCI de 5 V encontrados na maioria das placas-mãe de PC. Placas e placas-mãe que não suportam operação de 66 MHz também aterram esse pino. Se todos os participantes suportarem operação de 66 MHz, um resistor pull-up na placa-mãe eleva esse sinal alto e a operação de 66 MHz é habilitada. O pino ainda é conectado ao aterramento por meio de capacitores de acoplamento em cada placa para preservar sua função de blindagem CA.
* O pino PCIXCAP é um aterramento adicional em barramentos e placas PCI. Se todas as placas e a placa-mãe suportarem o protocolo PCI-X, um resistor pull-up na placa-mãe eleva esse sinal alto e a operação PCI-X é habilitada. O pino ainda é conectado ao aterramento por meio de capacitores de acoplamento em cada placa para preservar sua função de blindagem CA.
* Pelo menos um dos PRSNT1# e PRSNT2# deve ser aterrado pela placa. A combinação escolhida indica os requisitos totais de energia da placa (25 W, 15 W ou 7,5 W).
* SBO# e SDONE são sinais de um controlador de cache para o alvo atual. Eles não são saídas do iniciador, mas são coloridos dessa forma porque são entradas de alvo.
* PME# (19 A) – Evento de gerenciamento de energia (opcional) que é suportado na versão PCI 2.2 e superior. É um sinal baixo ativo de 3,3 V, Dreno aberto. As placas PCI podem usar este sinal para enviar e receber PME diretamente pelo soquete PCI, o que elimina a necessidade de um cabo Wake-on-LAN especial.

### Mistura de placas PCI de 32 e 64 bits em slots de larguras diferentes

A maioria das placas PCI de 32 bits funcionará corretamente em slots PCI-X de 64 bits, mas a taxa de clock do barramento será limitada à frequência de clock da placa mais lenta, uma limitação inerente da topologia de barramento compartilhado do PCI. Por exemplo, quando um periférico PCI 2.3 de 66 MHz é instalado em um barramento PCI-X com capacidade de 133 MHz, todo o backplane do barramento será limitado a 66 MHz. Para contornar essa limitação, muitas placas-mãe têm dois ou mais barramentos PCI/PCI-X, com um barramento destinado ao uso com periféricos PCI-X de alta velocidade e o outro barramento destinado a periféricos de uso geral.
Muitas placas PCI-X de 64 bits são projetadas para funcionar no modo de 32 bits se inseridas em conectores mais curtos de 32 bits, com alguma perda de desempenho. Um exemplo disso é a placa de interface SCSI Adaptec 29160 de 64 bits. No entanto, algumas placas PCI-X de 64 bits não funcionam em slots PCI padrão de 32 bits.
Instalar uma placa PCI-X de 64 bits em um slot de 32 bits deixará a porção de 64 bits do conector de borda da placa desconectada e pendurada. Isso requer que não haja componentes da placa-mãe posicionados de modo a obstruir mecanicamente a porção pendurada do conector de borda da placa.

## Dimensões físicas

Alturas dos suportes PCI:
* Padrão: 120,02 mm;
* Perfil baixo: 79,20 mm.
Comprimentos da placa PCI (suporte padrão e 3,3 V):
* Placa curta: 169,52 mm;
* Placa longa: 313,78 mm.
Comprimentos da placa PCI (suporte de baixo perfil e 3,3 V):
* MD1: 121.79 mm;
* MD2: 169.52 mm;
* MD3: 243.18 mm.
* Um suporte de altura total
* Uma placa de baixo perfil com um suporte de altura total

### Mini PCI

O Mini PCI foi adicionado à versão 2.2 do PCI para uso em laptops e alguns roteadores;$^[$ ele usa um barramento de 32 bits, 33 MHz com conexões energizadas (apenas 3,3 V; 5 V é limitado a 100 mA) e suporte para masterização de barramento e DMA. O tamanho padrão para placas Mini PCI é aproximadamente um quarto de suas contrapartes de tamanho normal. Não há acesso à placa de fora do gabinete, ao contrário das placas PCI de desktop com suportes carregando conectores. Isso limita os tipos de funções que uma placa Mini PCI pode executar.
Muitos dispositivos Mini PCI foram desenvolvidos, como Wi-Fi, Fast Ethernet, Bluetooth, modems (frequentemente Winmodems), placas de som, aceleradores criptográficos, SCSI, IDE – ATA, controladores SATA e placas de combinação. As placas Mini PCI podem ser usadas com hardware equipado com PCI regular, usando conversores Mini PCI para PCI. O Mini PCI foi substituído pelo muito mais estreito PCI Express Mini Card.

#### Detalhes técnicos do Mini PCI

As placas Mini PCI têm um consumo máximo de energia de 2 W, o que limita a funcionalidade que pode ser implementada neste fator de forma. Elas também são necessárias para suportar o sinal CLKRUN# PCI usado para iniciar e parar o clock PCI para fins de gerenciamento de energia.
Existem três fatores de forma de placa: placas Tipo I, Tipo II e Tipo III. O conector de placa usado para cada tipo inclui: Tipo I e II usam um conector de empilhamento de 100 pinos, enquanto o Tipo III usa um conector de borda de 124 pinos, ou seja, o conector para Tipos I e II difere daquele para Tipo III, onde o conector está na borda de uma placa, como com um SO-DIMM. Os 24 pinos adicionais fornecem os sinais extras necessários para rotear I/O de volta através do conector do sistema (áudio, AC-Link, LAN, interface de linha telefônica). As placas Tipo II têm conectores montados RJ11 e RJ45. Esses placas devem estar localizados na borda do computador ou estação de acoplamento para que as portas RJ11 e RJ45 possam ser montadas para acesso externo.
| Tipo | Placa na borda externa do sistema gost | Conector | Tamanho (mm × mm × mm) | Comentários |
| IA | Não | Empilhamento de 100 pinos | 07.50 × 70.0 × 45.00 | Grande dimensão Z (7.5 mm) |
| IB | Não | Empilhamento de 100 pinos | 05.50 × 70.0 × 45.00 | Dimensão Z menor (5.5 mm) |
| IIA | Sim | Empilhamento de 100 pinos | 17.44 × 70.0 × 45.00 | Grande dimensão Z (17.44 mm) |
| IIB | Sim | Empilhamento de 100 pinos | 05.50 × 78.0 × 45.00 | Dimensão Z menor (5.5 mm) |
| IIIA | Não | Borda da placa de 124 pinos | 02.40 × 59.6 × 50.95 | Dimensão Y maior (50.95 mm) |
| IIIB | Não | Borda da placa de 124 pinos | 02.40 × 59.6 × 44.60 | Dimensão Y menor (44.6 mm) |
Mini PCI é diferente de Micro PCI de 144 pinos.

## Transações de barramento PCI

O tráfego de barramento PCI consiste em uma série de transações de barramento PCI. Cada transação consiste em uma fase de endereço seguida por uma ou mais fases de dados. A direção das fases de dados pode ser do iniciador para o destino (transação de gravação) ou vice-versa (transação de leitura), mas todas as fases de dados devem estar na mesma direção. Qualquer uma das partes pode pausar ou interromper as fases de dados a qualquer momento. (Um exemplo comum é um dispositivo PCI de baixo desempenho que não suporta transações de burst e sempre interrompe uma transação após a primeira fase de dados.)
Qualquer dispositivo PCI pode iniciar uma transação. Primeiro, ele deve solicitar permissão de um árbitro de barramento PCI na placa-mãe. O árbitro concede permissão a um dos dispositivos solicitantes. O iniciador inicia a fase de endereço transmitindo um endereço de 32 bits mais um código de comando de 4 bits e, em seguida, aguarda a resposta de um alvo. Todos os outros dispositivos examinam esse endereço e um deles responde alguns ciclos depois.
O endereçamento de 64 bits é feito usando uma fase de endereço de dois estágios. O iniciador transmite os 32 bits de endereço baixos, acompanhados por um código de comando especial "dual address cycle". Dispositivos que não suportam endereçamento de 64 bits podem simplesmente não responder a esse código de comando. No próximo ciclo, o iniciador transmite os 32 bits de endereço altos, mais o código de comando real. A transação opera de forma idêntica a partir desse ponto. Para garantir a compatibilidade com dispositivos PCI de 32 bits, é proibido usar um ciclo de endereço duplo se não for necessário, ou seja, se os bits de endereço de ordem alta forem todos zero.
Enquanto o barramento PCI transfere 32 bits por fase de dados, o iniciador transmite 4 sinais de habilitação de byte baixo ativo indicando quais bytes de 8 bits devem ser considerados significativos. Em particular, uma gravação deve afetar apenas os bytes habilitados no dispositivo PCI de destino. Eles são de pouca importância para leituras de memória, mas leituras de I/O podem ter efeitos colaterais. O padrão PCI permite explicitamente uma fase de dados sem bytes habilitados, que deve se comportar como um no-op.

### Espaços de endereço PCI

O PCI tem três espaços de endereço: memória, endereço de I/O e configuração.
Os endereços de memória têm 32 bits (opcionalmente 64 bits) de tamanho, suportam cache e podem ser transações em burst.
Endereços de I/O são para compatibilidade com o espaço de endereço de porta de I/O da arquitetura Intel x86. Embora a especificação de barramento PCI permita transações de burst em qualquer espaço de endereço, a maioria dos dispositivos só oferece suporte para endereços de memória e não para I/O.
Finalmente, o espaço de configuração PCI fornece acesso a 256 bytes de registradores de configuração especial por dispositivo PCI. Cada slot PCI obtém seu próprio intervalo de endereço de espaço de configuração. Os registradores são usados ​​para configurar a memória dos dispositivos e intervalos de endereço de I/O aos quais eles devem responder dos iniciadores de transação. Quando um computador é ligado pela primeira vez, todos os dispositivos PCI respondem apenas aos seus acessos de espaço de configuração. O BIOS do computador verifica os dispositivos e atribui intervalos de endereço de Memória e I/O a eles.
Se um endereço não for reivindicado por nenhum dispositivo, a fase de endereço do iniciador da transação expirará, fazendo com que o iniciador aborte a operação. No caso de leituras, é costume fornecer todos os uns para o valor de dados lidos (0xFFFFFFFF) neste caso. Portanto, os dispositivos PCI geralmente tentam evitar usar o valor todos os uns em registros de status importantes, para que tal erro possa ser facilmente detectado pelo software.

### Códigos de comando PCI

Há 16 códigos de comando de 4 bits possíveis, e 12 deles são atribuídos. Com exceção do ciclo de endereço duplo exclusivo, o bit menos significativo do código de comando indica se as fases de dados a seguir são uma leitura (dados enviados do alvo para o iniciador) ou uma gravação (dados enviados de um iniciador para o alvo). Os alvos PCI devem examinar o código de comando, bem como o endereço, e não responder às fases de endereço que especificam um código de comando não suportado.
Os comandos que se referem às linhas de cache dependem da configuração correta do registro de tamanho da linha de cache do espaço de configuração PCI; eles não podem ser usados ​​até que isso seja feito.

#### 0000: Reconhecimento de interrupção

    Esta é uma forma especial de ciclo de leitura implicitamente endereçada ao controlador de interrupção, que retorna um vetor de interrupção. O campo de endereço de 32 bits é ignorado. Uma implementação possível é gerar um ciclo de reconhecimento de interrupção em um barramento ISA usando uma ponte de barramento PCI/ISA. Este comando é para compatibilidade com IBM PC; se não houver um controlador de interrupção estilo Intel 8259 no barramento PCI, este ciclo nunca precisará ser usado.

#### 0001: Ciclo Especial

    Este ciclo é uma gravação de transmissão especial de eventos do sistema nos quais a placa PCI pode estar interessada. O campo de endereço de um ciclo especial é ignorado, mas é seguido por uma fase de dados contendo uma mensagem de carga útil. As mensagens definidas atualmente anunciam que o processador está parando por algum motivo (por exemplo, para economizar energia). Nenhum dispositivo responde a este ciclo; ele é sempre encerrado com um aborto mestre após deixar os dados no barramento por pelo menos 4 ciclos.

#### 0010: Leitura de I/O

    Isso executa uma leitura do espaço de I/O. Todos os 32 bits do endereço de leitura são fornecidos, de modo que um dispositivo pode (por razões de compatibilidade) implementar menos de 4 bytes de registros de I/O. Se o byte habilitar dados de solicitação que não estejam dentro do intervalo de endereços suportado pelo dispositivo PCI (por exemplo, uma leitura de 4 bytes de um dispositivo que suporta apenas 2 bytes de espaço de endereço de I/O), ele deve ser encerrado com um aborto de destino. Vários ciclos de dados são permitidos, usando ordenação de burst linear (incremento simples).
    O padrão PCI está desencorajando o uso de espaço de I/O em novos dispositivos, preferindo que o máximo possível seja feito por meio do mapeamento da memória principal.

#### 0011: I/O Gravação

    Isso executa uma gravação no espaço de I/O.

#### 010 x: Reservado

    Um dispositivo PCI não deve responder a um ciclo de endereço com esses códigos de comando.

#### 0110: Leitura de memória

    Isso executa um ciclo de leitura do espaço de memória. Como o menor espaço de memória que um dispositivo PCI tem permissão para implementar é 16 bytes,$^{:§6.5.2.1}$ os dois bits menos significativos do endereço não são necessários durante a fase de endereço; informações equivalentes chegarão durante as fases de dados na forma de sinais de seleção de bytes. Em vez disso, eles especificam a ordem na qual os dados de burst devem ser retornados.$^{:§3.2.2.2}$ Se um dispositivo não suportar a ordem solicitada, ele deve fornecer a primeira palavra e então desconectar.
    Se um espaço de memória for marcado como "pré-buscável", o dispositivo de destino deverá ignorar os sinais de seleção de bytes em uma leitura de memória e sempre retornar 32 bits válidos.

#### 0111: Gravação de memória

    Isso opera similarmente a uma leitura de memória. Os sinais de seleção de bytes são mais importantes em uma gravação, pois bytes não selecionados não devem ser gravados na memória.
    Geralmente, gravações PCI são mais rápidas do que leituras PCI, porque um dispositivo pode armazenar em buffer os dados de gravação de entrada e liberar o barramento mais rápido. Para uma leitura, ele deve atrasar a fase de dados até que os dados tenham sido buscados.

#### 100 x: Reservado

    Um dispositivo PCI não deve responder a um ciclo de endereço com esses códigos de comando.

#### 1010: Leitura de configuração

    Isto é similar a uma leitura de I/O, mas lê do espaço de configuração PCI. Um dispositivo deve responder somente se os 11 bits baixos do endereço especificarem uma função e registrar que ele implementa, e se o sinal IDSEL especial for afirmado. Ele deve ignorar os 21 bits altos. Leituras de burst (usando incremento linear) são permitidas no espaço de configuração PCI.
    Ao contrário do espaço de I/O, os registradores de configuração PCI padrão são definidos de modo que as leituras nunca perturbem o estado do dispositivo. É possível que um dispositivo tenha registradores de espaço de configuração além dos 64 bytes padrão que tenham efeitos colaterais de leitura, mas isso é raro.
    Os acessos ao espaço de configuração geralmente têm alguns ciclos de atraso para permitir que as linhas IDSEL se estabilizem, o que os torna mais lentos do que outras formas de acesso. Além disso, um acesso ao espaço de configuração requer uma operação multietapas em vez de uma única instrução de máquina. Portanto, é melhor evitá-los durante a operação de rotina de um dispositivo PCI.

#### 1011: Configuração de gravação

    Isso funciona de forma análoga a uma leitura de configuração.

#### 1100: Leitura múltipla de memória

    Este comando é idêntico a uma leitura de memória genérica, mas inclui a dica de que uma longa rajada de leitura continuará além do fim da linha de cache atual, e o alvo deve pré-buscar internamente uma grande quantidade de dados. Um alvo sempre tem permissão para considerar isso um sinônimo para uma leitura de memória genérica.

#### 1101: Ciclo de Endereço Duplo

    Ao acessar um endereço de memória que requer mais de 32 bits para representar, a fase de endereço começa com este comando e os 32 bits baixos do endereço, seguido por um segundo ciclo com o comando real e os 32 bits altos do endereço. Alvos PCI que não suportam endereçamento de 64 bits podem simplesmente tratar isso como outro código de comando reservado e não responder a ele. Este código de comando só pode ser usado com uma palavra de endereço de ordem alta diferente de zero; é proibido usar este ciclo se não for necessário.

#### 1110: Linha de leitura de memória

    Este comando é idêntico a uma leitura de memória genérica, mas inclui a dica de que a leitura continuará até o fim da linha de cache. Um alvo sempre tem permissão para considerar isso um sinônimo para uma leitura de memória genérica.

#### 1111: Gravação e Invalidação de Memória

    Este comando é idêntico a uma gravação de memória genérica, mas vem com a garantia de que uma ou mais linhas de cache inteiras serão gravadas, com todas as seleções de bytes habilitadas. Esta é uma otimização para caches de write-back bisbilhotando o barramento. Normalmente, um cache de write-back contendo dados sujos deve interromper a operação de gravação por tempo suficiente para gravar seus próprios dados sujos primeiro. Se a gravação for realizada usando este comando, os dados a serem gravados de volta são garantidos como irrelevantes e podem simplesmente ser invalidados no cache de write-back.
    Essa otimização afeta apenas o cache de espionagem e não faz diferença para o alvo, que pode tratar isso como um sinônimo para o comando de gravação de memória.

## Latência do barramento PCI

Logo após a promulgação da especificação PCI, foi descoberto que transações longas por alguns dispositivos, devido a confirmações lentas, rajadas longas de dados ou alguma combinação, poderiam causar estouro ou sub-explosão de buffer em outros dispositivos. Recomendações sobre o tempo de fases individuais na Revisão 2.0 foram tornadas obrigatórias na revisão 2.1:$^{:3}$
* Um alvo deve ser capaz de concluir a fase de dados inicial (afirmar TRDY# e/ou STOP#) dentro de 16 ciclos do início de uma transação.
* Um iniciador deve concluir cada fase de dados (afirmar IRDY#) dentro de 8 ciclos.
Além disso, a partir da revisão 2.1, todos os iniciadores capazes de estourar mais de duas fases de dados devem implementar um timer de latência programável. O timer começa a contar ciclos de clock quando uma transação começa (o iniciador afirma FRAME#). Se o timer tiver expirado e o árbitro tiver removido GNT#, então o iniciador deve encerrar a transação na próxima oportunidade legal. Esta é geralmente a próxima fase de dados, mas as transações Memory Write e Invalidate devem continuar até o fim da linha de cache.

### Transações atrasadas

Dispositivos incapazes de atender a essas restrições de tempo devem usar uma combinação de gravações postadas (para gravações de memória) e transações atrasadas (para outras gravações e todas as leituras). Em uma transação atrasada, o alvo registra a transação (incluindo os dados de gravação) internamente e aborta (afirma STOP# em vez de TRDY#) a primeira fase de dados. O iniciador deve tentar novamente exatamente a mesma transação mais tarde. Nesse ínterim, o alvo executa a transação internamente e aguarda a transação tentada novamente. Quando a transação tentada novamente é vista, o resultado armazenado em buffer é entregue.
Um dispositivo pode ser alvo de outras transações enquanto conclui uma transação atrasada; ele deve lembrar o tipo de transação, endereço, seleção de bytes e (se for uma gravação) valor de dados, e concluir apenas a transação correta.
Se o alvo tiver um limite no número de transações atrasadas que ele pode registrar internamente (alvos simples podem impor um limite de 1), ele forçará essas transações a tentar novamente sem registrá-las. Elas serão tratadas quando a transação atrasada atual for concluída. Se dois iniciadores tentarem a mesma transação, uma transação atrasada iniciada por um pode ter seu resultado entregue ao outro; isso é inofensivo.
Um alvo abandona uma transação atrasada quando uma nova tentativa obtém sucesso em entregar o resultado armazenado em buffer, o barramento é reiniciado ou quando 2 $^{15}$ =32768 ciclos de clock (aproximadamente 1 ms) decorrem sem que uma nova tentativa seja vista. O último nunca deve acontecer em operação normal, mas previne um deadlock de todo o barramento se um iniciador for reiniciado ou apresentar mau funcionamento.

## Pontes de barramento PCI

O padrão PCI permite que múltiplos barramentos PCI independentes sejam conectados por pontes de barramento que encaminharão operações de um barramento para outro quando necessário. Embora o PCI tenda a não usar muitas pontes de barramento, os sistemas PCI Express usam muitas pontes PCI para PCI, geralmente chamadas de PCI Express Root Port; cada slot PCI Express parece ser um barramento separado, conectado por uma ponte aos outros. A ponte host PCI (geralmente northbridge em plataformas x86) interconecta entre CPU, memória principal e barramento PCI.

### Escritos postados

Geralmente, quando uma ponte de barramento vê uma transação em um barramento que deve ser encaminhada para o outro, a transação original deve esperar até que a transação encaminhada seja concluída antes que um resultado esteja pronto. Uma exceção notável ocorre no caso de gravações de memória. Aqui, a ponte pode registrar os dados de gravação internamente (se houver espaço) e sinalizar a conclusão da gravação antes que a gravação encaminhada seja concluída. Ou, na verdade, antes que ela tenha começado. Essas gravações "enviadas, mas ainda não recebidas" são chamadas de "gravações postadas", por analogia com uma mensagem de correio postal. Embora ofereçam grande oportunidade para ganhos de desempenho, as regras que regem o que é permitido são um tanto intrincadas.

### Combinando, fundindo e colapsando

O padrão PCI permite que pontes de barramento convertam múltiplas transações de barramento em uma transação maior sob certas situações. Isso pode melhorar a eficiência do barramento PCI.

#### Combinando

Transações de gravação para endereços consecutivos podem ser combinadas em uma gravação em rajada mais longa, desde que a ordem dos acessos na rajada seja a mesma que a ordem das gravações originais. É permitido inserir fases de dados extras com todas as habilitações de bytes desligadas se as gravações forem quase consecutivas.

#### Mesclando

Várias gravações em porções disjuntas da mesma palavra podem ser mescladas em uma única gravação com habilitações de vários bytes afirmadas. Nesse caso, as gravações que foram apresentadas à ponte de barramento em uma ordem específica são mescladas para que ocorram ao mesmo tempo quando encaminhadas.

#### Colapso

Várias gravações no mesmo byte ou bytes não podem ser combinadas, por exemplo, executando apenas a segunda gravação e pulando a primeira gravação que foi sobrescrita. Isso ocorre porque a especificação PCI permite que as gravações tenham efeitos colaterais.

## Ferramentas de desenvolvimento

Ao desenvolver e/ou solucionar problemas do barramento PCI, o exame de sinais de hardware pode ser muito importante. Analisadores lógicos e analisadores de barramento são ferramentas que coletam, analisam e decodificam sinais para que os usuários visualizem de maneiras úteis.