PCI Plug and Play
Por Ricardo Zelenovsky e Alexandre Mendonça em 11 de maio de 1998

Introdução

Motivado pelas limitações técnicas do barramento ISA (8MHz, 16 bits), a Intel, em 1992, introduziu a especificação de barramento PCI (Peripheral Component Interconnect), que permite a comunicação de palavras de 32 ou 64 bits, a 33MHz. Mais que uma nova especificação de barramentos para PCs, o PCI possui a característica de universalidade, ou seja, pode ser aproveitado por qualquer processador em qualquer arquitetura de máquina. Isto parece ser uma dualidade, pois, apesar de universal, o PCI também tem característica de barramento local.

Outra inovação do barramento PCI é expandir a limitação de alguns carregamentos elétricos através de pontes PCI-PCI. Uma ponte deste tipo cria um barramento secundário isolado eletricamente do barramento raiz, permitindo-se a utilização de mais placas de expansão. Esta característica consagrou o PCI como barramento nas arquiteturas de servidores de grande desempenho, como estudado nas DevMag de fevereiro, março e abril de 97.

Além da ponte PCI-PCI, foi especificada a ponte PCI-ISA, de forma a permitir o aproveitamento de placas ISA na configuração da máquina.

PCI: Interrupções, I/O e DMA

No barramento PCI, a utilização de alguns recursos de hardware requer uma abordagem diferente daquela associada ao barramento ISA.

Primeiro, apenas 4 sinais de interrupção estão disponíveis nos slots (INTA#, INTB#, INTC# e INTD#). Com isso, o controlador PCI fica responsável por fazer a ligação elétrica conveniente entre a INT# escolhida pelo projetista da placa e a IRQ que será alocada pelo software de gerenciamento plug and play (BIOS e sistema operacional). Vale observar que as 4 interrupções são roteadas para cada um dos slots lógicos, sem que haja conflitos caso duas placas optem por usar o mesmo sinal. Inclusive, é conveniente que placas que usem apenas 1 sinal de interrupção utilizem a INTA#.

Segundo, as placas PCI admitem uma decodificação de endereços de I/O total, ou seja, de 32 bits (0 a FFFFFFFFh), contra 12 bits do ISA (0 a 3FFh). Isto permite que a BIOS e o sistema operacional tenham a flexibilidade de mapear dispositivos PCI sem que haja qualquer tipo de conflito com placas ISA.

Terceiro, a especificação PCI proíbe que se consuma canal de DMA por placas PCI. Quando alguma placa ISA exigir DMA, estando esta placa conectada a um slot ligado ao PCI por ponte PCI-ISA, é implementado um mecanismo especial para fazer transferências por DMA, que fica transparente para o software.

Mapeamento dos Endereços de I/O

Para cada slot lógico, a especificação PCI reserva 256 endereços de I/O consecutivos, sendo que os 64 primeiros compõem um cabeçalho para a identificação e programação dos recursos exigidos pelo dispositivo. Dependendo do chip-set PCI utlizado na placa mãe do sistema, como será comentado, apenas o cabeçalho poderá ser acessado. O formato deste cabeçalho está ilustrado na Figura 1. Os outros 192 endereços estão disponíveis ao projetista para uso geral.

Campos do Cabeçalho

Os códigos (somente leitura) do vendedor e do dispositivo identificam a empresa e o tipo de controladora da placa.

O registrador de comando (leitura e escrita) é o responsável pela programação de alguns parâmetros de acesso, como a permissão para manusear memória e I/O contidos na placa, a habilitação de alguns ciclos especiais de barramento e outros.

O registrador de estado (leitura e escrita parcial) informa algumas condições de velocidade de comunicação e de detecção de erros.

O identificador de revisão (leitura) informa o número da revisão do adaptador, sendo um código criado pelo fabricante.

O código da classe (leitura) identifica a função básica do dipositivo (ex: multimídia, ponte PCI-outro barramento, placa de rede, base de dados, etc.).

O tamanho do cache (leitura e escrita) (4 para um 486) é o tamnho, em doublewords, da linha de cache para escritas na memória da placa.

O temporizador de latência (leitura e escrita) especifica o tempo mínimo, em clocks de barramento, que o barramento mestre pode manter a posse do barramento. Ele é decrementado pelo barramento mestre a cada clock a partir do início da transferência de um dado.

O tipo de cabeçalho (leitura) define se o dispositivo é um adaptador ou uma ponte PCI-PCI.

O BIST (Built In Self Test - leitura) é um registrador opcional que permite efetuar-se uma seqüência de auto-teste do adaptador.

Os registradores para a programação de endereços bases são necessários quando o dispositivo implementa decodificadores de endereços para mapearem porções de memória e I/O. O bit menos significativo destes registradores é reservado para a leitura e indica o tipo se é a defição de endereços de I/O ou de memória. O mecanismo para tal programação é bastante interessante e será comentado posteriormente.

O registrador do pino de interrupção (leitura) indica por que sinal elétrico do barramento a placa PCI gerará o pedido de interrupção (INT# A, B, C ou D - programa-se 1 a 4 - ou não exige recurso de interrupção - programa-se 0).

O registrador de linha de interrupção (leitura e escrita) é programável pelo software plug and play (BIOS ou sistema operacional) e informa à placa qual das linha IRQ que alimentam o controlador de interrupções do PC está alocado para o adaptador.

3 2 1 0 offsets
código do dispositivo código do vendedor 00h
registrador de estado registrador de comando 04h
código da classe id. de revisão 08h
BIST tipo cabeçalho temp. latência tam. cache 0Ch
primeiro registrador para a programação do endereço base 10h
segundo registrador para a programação do endereço base 14h
terceiro registrador para a programação do endereço base 18h
quarto registrador para a programação do endereço base 1Ch
quinto registrador para a programação do endereço base 20h
sexto registrador para a programação do endereço base 24h
reservado 28h
reservado reservado 2Ch
registrador para endereço base da ROM de expansão 30h
reservado 34h
reservado 38h
reservado reservado reg. pino int. reg. linha int. 3Ch

Figura 1: Mapeamento dos registradores PCI. Os 12 primeiros bytes mais o tipo de cabeçalho são campos obrigatórios.

Programação de Endereços Bases

O mecanismo de programação de endereços bases de regiões de memória e I/O, regiões estas de comprimento mínimo de 16 ou 4 endereços (memória ou I/O, respectivamente), consiste em, primeiramente, escrever 1 em todos os bits do registrador de programação de endereços base. Em seguida, executa-se uma leitura do mesmo registrador. A lógica da placa implementada deve fazer com que seja retornado um número cuja porção menos significativa é, a menos dos primeiros 4 ou 2 bits (memória ou I/O), uma seqüência de zeros, de tamanho igual ao número de bits utilizado pelo decodificador em questão. A porção mais significativa restante deverá ser composta por dígitos 1. Este conjunto de dígitos 1 é que será imediatamente reprogramado, pelo software plug and play, de acordo com a disponibilidade de recursos, de forma a compor o endereço base da região de endereços.

Como exemplo, caso a placa esteja utilizando uma RAM de 4 KB, será retornado, após a escrita de dígitos 1, o valor FFFFF000h (12 bits menos significativos iguais a 0). A lógica da placa deve permitir a programação dos demais 20 bits, que vão habilitar a decodificação. Um exemplo de circuito que implementa os procedimentos detalhados é apresentado na Figura 2.

A BIOS procura por decodificadores implementados nos registradores de programação de endereço base até que encontre um não implementado, quando interrompe a busca.

O registrador de endereço base da ROM de Expansão é utilizado por placas que contêm ROMs que participarão da seqüência de inicialização do computador (POST - Power On Self Test) ou que oferecem serviços de interrupção por software.

A programação deste endereço é feita de forma semelhante à programação do exemplo da RAM de 4KB. Contudo, exige-se também que a ROM tenha a assinatura de uma ROM de expansão tradicional, ou seja, comece por 55h, AAh, tamanho, instrução JMP, etc..

 
clique para ampliar
Figura 2: Circuito que permite a programação do endereço base de um bloco de memória em barramento PCI.

Acesso aos Registradores de Configuração

Primeiramente, vale ressaltar que apenas o software de gerenciamento de recursos (BIOS e sistema operacional plug and play) deve ter acesso aos registradores de configuração (ver Figura 1) de cada dispositivo.

Existem dois mecanismos para acessar o espaço de endereçamento de um slot.

No primeiro mecanismo, programa-se uma palavra de controle de 32 bits (nos endereços de I/O CF8h a CFBh) que contém determinados campos, especificando qual o barramento a ser acessado (0 a 255), qual o número do dispositivo (0 a 39), a função (0 a 3) e o índice do registrador de configuração (0 a 63). O dado a ser lido ou escrito na localização especificada pela palavra de controle é acessado com uma leitura ou escrita no endereço CFCh.

No segundo mecanismo, desprotege-se o espaço de configuração PCI através de uma escrita conveniente no endereço CF8h. Após isto ser feito, o primeiro slot fica mapeado a partir do endereço C000h, o segundo a partir de C100h e assim por diante, sempre saltando 256 endereços por slot. Dets aforma, o registrador de comando do terceiro slot fica mapeado nos endereços C204h e C205h, podendo ser normalmente acessado por instruções IN e OUT.

As figuras 3 e 4 ilustram o espaço de endereçamento gerado pelos dois mecanismos.

 
clique para ampliar
Figura 3: Espaço de endereçamento gerado pelo primeiro mecanismo.

 
clique para ampliar
Figura 4: Espaço de endereçamento gerado pelo segundo mecanismo.

Na verdade, o mecanismo adotado é automaticamente definido pelo chipset PCI da máquina em questão.

O segundo mecanismo tem a vantagem de ser de programação bastante simples, contudo é impróprio para implementações de máquinas com múltiplos processadores, pois, para a sincronização dos ciclos de barramento, o sistema fica bastante lento e caro.

A BIOS oferece diversos serviços aos aplicativos e sistema operacional, pela INT 1Ah do modo real ou outras funções, de forma que estes possam ter acesso a dados provenientes do resultado da configuração de recursos estabelecida pleo gerenciamento plug and play.


Para saber mais:

Originalmente em http://www.clubedohardware.com.br/artigos/866

© 1996-2009, Clube do Hardware. Todos os direitos reservados.

É expressamente proibida a reprodução total ou parcial do conteúdo deste site e dos textos disponíveis, seja através de mídia eletrônica, impressa, ou qualquer outra forma de distribuição. Os infratores serão indiciados e punidos com base na lei nº 9.610 de 19/02/1998.

Não nos responsabilizamos por danos materiais e/ou morais de qualquer espécie promovidos pelo uso das informações contidas no Clube do Hardware.